За NAT для подключения за NAT

Я столкнулся с интересной проблемой. В основном у меня есть 2 мобильных телефона, оба за NAT. Я хочу напрямую общаться между двумя устройствами, используя UDP.

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

Однако я бы предпочел просто использовать сервер, чтобы указать 2 устройства друг на друга, а затем позволить им общаться напрямую. Как бы я это сделал? Возможно ли это без использования чего-то вроде uPnP?

Любая помощь будет очень приветствоваться!

Изменить: я нашел этот документ http://www.brynosaurus.com/pub/net/p2pnat/ Похоже, мне нужен перевод в виде шпильки, но, похоже, он не получит широкой поддержки. Интересно, насколько хорошо мобильный интернет-провайдер поддерживает UPnP?


person Goz    schedule 22.02.2011    source источник
comment
Вы спросили: «Интересно, насколько хорошо мобильный интернет-провайдер поддерживает UPnP?». Все вопросы действительно объясняют что такое дырокол, но ни один из них не отвечает на вопрос о текущей поддержке. Ой, как весело :-) Спасибо за ссылку на статью о p2pnat.   -  person guettli    schedule 09.11.2016
comment
Вы нашли решение этой проблемы в последние годы? У меня также есть три удаленные сети (все с модемами LTE, ISP NAT без uPNP), которые я хотел бы соединить вместе. Теперь я использую Pritunl OpenVPN, но я хотел бы иметь сервер-посредник только для того, чтобы быть посредником, как вы описали, а не для маршрутизации всего трафика через него.   -  person Bojan P.    schedule 14.10.2019
comment
Найден ZeroTier, который выглядит как инструмент для работы (не удалось отредактировать комментарий, потому что ›5 мин).   -  person Bojan P.    schedule 14.10.2019


Ответы (2)


То, что вы ищете, это пробивка отверстий UDP, см., Например, http://en.wikipedia.org/wiki/UDP_hole_punching

Основная идея проста: вы указываете каждой конечной точке используемые порты, и они начинают отправлять пакеты udp. Устройства с NAT установят правило обхода, когда увидят первый исходящий пакет, а затем следующая попытка с другого конца будет соответствовать этому правилу обхода.

person Erik    schedule 22.02.2011
comment
Пробивка отверстий - это хорошо, если у каждого маршрутизатора есть внешняя видимость, в которой я не могу быть уверен :( Этот документ brynosaurus.com/pub/net/p2pnat имеет хорошее объяснение пробивки отверстий, а также перевод шпильки, который больше похож на то, что мне нужно, но, увы, не поддерживается :( - person Goz; 22.02.2011

Вам нужен сервер-посредник, чтобы клиенты могли знать, где они находятся. Затем один открывает сервер по uPNP, а другой подключается к нему.

person Daniel    schedule 22.02.2011
comment
Да, было бы идеально, если бы я смог его использовать. UPnP не работает в топологии сети с несколькими уровнями NAT :( - person Goz; 22.02.2011
comment
мульти-нац? С обеих сторон? Это фарфор? - person Daniel; 22.02.2011