UDP дырокол - PullRequest
       50

UDP дырокол

6 голосов
/ 24 января 2011

У меня есть несколько вопросов, касающихся пробивания отверстий по UDP. Основано на вики http://en.wikipedia.org/wiki/UDP_hole_punching

1) Чтобы установить сеанс UDP между двумя сторонами (клиент, который находится за NAT, сервер, который не является NAT), клиент должен просто отправить пакет на сервер, и затем сеанс разрешается в обе стороны ( отправить и получить) через брандмауэр? То есть клиент тоже может получать с сервера.

2) Перфорация UDP Hole: два клиента сначала подключаются к серверу, затем сервер передает клиентский порт / IP-адрес другим клиентам, поэтому клиенты отправляют пакеты друг другу на эти порты. Это правильно?

3) если № 2 истинно, почему брандмауэры позволяют получать данные с другого IP-адреса, отличного от того, который использовался при подключении к этому самому порту? Похоже на большую дыру в безопасности, которую нужно легко отфильтровать? Я понимаю, что подмена IP-адреса источника могла бы его обмануть, но это?

Спасибо заранее, Johan

Ответы [ 2 ]

4 голосов
/ 24 января 2011

1) Да, с большинством разумных брандмауэров, если вы не настроите его в крайне параноидальном режиме.

2) Не совсем. Эта статья объясняет это более подробно, но идея в том, что один из клиентов сначала отправляет дейтаграмму общедоступному IP-адресу другого. Затем эта дейтаграмма отбрасывается, но другой клиент знает, что она была отправлена, потому что первый сообщил об этом через сервер. Затем другой клиент отправляет дейтаграмму обратно к первому тому же порту, с которого произошла первая дейтаграмма. Поскольку NAT на первом клиенте запоминает, что с этого порта был пакет, он считает входящую дейтаграмму ответом на первый. Проблема здесь состоит в том, чтобы выяснить, какой открытый порт NAT выберет для отправки первой дейтаграммы, но большинство NAT делают это предсказуемым образом, поэтому он почти всегда работает нормально, иногда просто с первой попытки.

2 голосов
/ 24 января 2011

1) Да.Однако вам не нужно пробивать дырки, если вы обращаетесь к серверу без NAT.Ваше клиентское приложение просто ведет себя нормально.

2) Да.

3) Некоторые NAT действительно ограничивают общедоступный порт только одной парой отправитель-получатель.Если вам нужно пробить дыру в таком сценарии, ваш единственный шанс - угадать общедоступный порт, который NAT выберет для прямого соединения.

Однако NAT не является функцией безопасности.Поэтому принятие любых пакетов на публичный порт не является дырой в безопасности, поскольку нет разницы в простом случае клиента, напрямую подключенного к Интернету.

...