Я пытаюсь понять, почему UDP дырокол работает.
- С учетом пиров
A
,B
за NAT-маршрутизатором иServer
с открытым портом 80. A
отправляет пакет наServer
с порта1234
. Это заставляет маршрутизатор открывать маршрут из / вA:1234
иS:80
B
отправляет пакет наServer
с порта4321
. Это заставляет маршрутизатор открывать маршрут от / доB:4321
иS:80
В этот момент предполагается, что A
может отправлять пакеты напрямую в B:4321
а B
должен отправлять пакеты напрямую в A:1234
.
У меня есть два вопроса:
- Правильно ли я понимаю, как пробивать дыры в UDP?
- Почему маршрутизаторы не проверяют соответствие IP-адреса источника пакета
Server
? Разве это не угроза безопасности?
ОБНОВЛЕНИЕ: отвечая на мой собственный вопрос здесь, так как он помечен как закрытый. NAT дырокол работает следующим образом:
- С учетом пиров
A
,B
за NAT-маршрутизатором иServer
. A
иB
подключаются кServer
и отправляют ему список портов, которые они будут использовать для исходящих / входящих соединений.- Предполагая, что
A
перечисляет порт1234
аB
перечисляет порт4321
, тогдаA
отправляет пакет из порта1234
вB
на порт4321
. Это заставляет маршрутизатор открывать маршрут из / вA:1234
иB:4321
. - Маршрутизатор B молча блокирует запрос, но маршрутизатор A держит соединение открытым в ожидании ответа.
B
отправляет пакет из порта4321
вA
порт1234
. Это заставляет маршрутизатор открывать маршрут из / вB:4321
иA:1234
.- Маршрутизатор
A
принимает входящее соединение, считая, что это ответ на шаг 3. - Были сделаны. Обратите внимание, что на протяжении всего этого процесса мы использовали только исходящие соединения из
A
иB