Почему серверу STUN нужны два разных публичных IP-адреса - PullRequest
15 голосов
/ 29 сентября 2011

Я посмотрел настройки сервера STUN в openfire , и оттуда это утверждение:

"Для работы в качестве сервера STUN необходимы два разных общедоступных IP-адреса на одном и том же компьютере, а также два разных номера порта для каждого IP."

Я исследовал Google, и обычно для ошеломляющих серверов нужны два общедоступных IP-адреса. В чем причина?

Ответы [ 3 ]

13 голосов
/ 04 декабря 2011

Для попытки установить соединение P2P запрос привязки STUN и ответ на / с основного адреса службы STUN (IP и порт) - это все, что действительно имеет значение.Отображенный адрес, возвращенный в теле ответа на этот запрос, передается (через XMPP или другую службу) удаленному узлу, с которым локальный клиент пытается установить прямую связь с.

Второй IP-адрес и порт, которые STUNпрослушивание службы полезно для определения поведения сопоставления портов NAT и поведения фильтрации NAT.

Отправляя запросы на привязку к альтернативному порту IP: в службе, клиент может обнаружить, имеет ли его NAT согласованную семантику сопоставления для локальных портов.,В случае, если он получает разные значения сопоставления портов для каждого теста, клиент может заключить, что он находится за «симметричным NAT» - который наиболее труден для прохождения P2P.

Посылая запрос связывания сАтрибут «запрос на изменение», который запрашивает у службы ответ с другого IP-адреса или порта, клиент может определить, просто ли его NAT фильтрует дейтаграммы с удаленных хостов на основе IP-адреса и порта, или разрешает дейтаграммы с альтернативных портов на хостах, которые он отправил исходящим.датаграммы до.

Тесты отображения и фильтрации предоставляют только ограниченную информацию для последующих P2P-соединений.В случае определения симметричного NAT между хостом и Интернетом, некоторые реализации могут наблюдать, что NAT имеет последовательное возрастающее значение значения порта в каждом ответе привязки.(например, внешний порт, наблюдаемый службой STUN, увеличивается на единицу).Таким образом, клиент может предложить удаленный клиент IP и угаданный номер порта, чтобы попытаться отправить его вместо того, который был отображен обратно из первого запроса привязки.Или клиент может использовать этот тест поведения / фильтрации для регистрации.Или для автоматического выделения реле в случае симметричного NAT.

11 голосов
/ 04 октября 2011

Поскольку в некоторых редких случаях поведение трансляции NAT является функцией целевого IP-адреса. Это означает, что вы должны «пропинговать» два разных IP-адреса, чтобы найти точное поведение NAT (зависит от целевого IP-адреса или нет?)

Если вы дважды «пингуете» один и тот же сервер с двумя разными портами, это не будет правильно покрывать этот случай (т. Е. Вы не охватите все свои базы).

P.S .: Два IP-адреса не обязательно должны быть на одном сервере, это могут быть разные серверы.

1 голос
/ 29 сентября 2011

Я предполагаю, что необходимо определить тип выполняемого NAT - некоторые NAT будут использовать тот же IP-адрес источника и кодировать идентификатор сеанса через номер порта (я думаю, что это называется конусным NAT, но не уверен),некоторые NAT будут использовать комбинацию IP-адреса источника и порта для кодирования идентификатора сеанса.Ответ, который сервер STUN должен дать клиенту, отличается в зависимости от типа NAT.

...