Чи такий страшний symmetric nat

  • Full-cone NAT;
  • Address-restricted cone NAT;
  • Port-restricted cone NAT;
  • Symmetric NAT

Насправді це не так. Точніше не зовсім вірно. У будь-якого NAT'a є дві основні характеристики:

1) фільтр вхідних пакетів;
2) правило маппінга портів.

Symmetric NAT

А тепер детальніше про симетричний NAT. Відразу обмовлюся, що фільтри вхідних пакетів теж можуть бути будь-які (no filter, address-restricted або port-restricted). І єдина відмінність цього типу NAT'a від попередніх якраз у виборі вихідного порту на роутері, він майже напевно буде відрізнятися від вихідного порту на клієнті. Повернувшись до попереднього прикладу відображення може бути таким: 192.168.10.24:62145 -> 1.2.3.4:1274.

Вибирається той самий порт випадково (ну або не випадково, а по черзі, але це не важливо, тому що вплинути на його вибір ззовні ми не можемо). Але є певні правила, вони схожі на фільтр вхідних пакетів:

При цьому є ще й правила для вибору наступного порту:
Це може бути якась дельта (+ 1 / -1 або + 10 / -10) або взагалі кожен раз випадково.
Крім того бачив один NAT у якого кожний наступний порт відстояв від попереднього на випадкове число, але завжди кратне 4096.

замість висновку

Отже, зрозумілого, що знаючи правило розподілу портів і дельту можна вгадати, з якого порту піде вихідний пакет, відповідно пробити той самий симетричний NAT. Зрозуміло, в разі вибору порту зовсім випадково, цей фокус не пройде.

Ну що ж ми підібралися до суті і мети статті. Відповіді на питання

«Чи можна визначити правило розподілу портів і дельту, перебуваючи за NAT'ом?»

І тут я закликаю читачі мені допомогти зі статистикою. На просторах Інтернету був знайдений простенький stun клієнт, трошки допив кувалдою і ось що вийшло:

Користувачі Лінукса прекрасно знають як це скомпілювати.

gcc -lpthread -o stun stun.c

Під вінду відмінно Компільо студією, ось тут бінарник. якщо студії під рукою немає.

Хай вибачить мене stun.counterpath.net за Хабра ефект :)

Ось мої результати, але у мене не симетричний НАТ і не цікаво:

Results
tests: 1010
NAT present: 1
first preserved port: 1
preserves port: 0
type: Port restricted NAT
mapped ports: 55907 55907 55907 55907

Дякую всім за допомогу!

Схожі статті