Я пытаюсь понять, почему UDP дырокол работает.
- С учетом пиров
A,Bза NAT-маршрутизатором иServerс открытым портом 80. Aотправляет пакет наServerс порта1234. Это заставляет маршрутизатор открывать маршрут из / вA:1234иS:80Bотправляет пакет на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
