#mobile #udp #p2p #nat #nat-traversal
#Мобильный #udp #p2p #nat #обход nat
Вопрос:
Я столкнулся с интересной проблемой. В принципе, у меня есть 2 мобильных телефона, которые оба находятся за NATs. Я хочу напрямую обмениваться данными между двумя устройствами, используя UDP.
Я знаю, что если я инициирую соединение с телефонов на сервер, то я могу отправить данные обратно по этому соединению на телефон (т. Е. отправить их обратно с того же порта, с которого было получено сообщение, на тот же IP и порт, с которого оно было получено). Таким образом, я могу легко обмениваться данными между двумя устройствами, подключив оба телефона к серверу. Затем отправка данных на сервер и перенаправление их обратно на телефоны. Это позволяет обойти любые проблемы с обходом NAT, с которыми я могу столкнуться.
Однако я бы предпочел просто использовать сервер, чтобы направить два устройства друг на друга, а затем позволить им взаимодействовать напрямую. Как бы я это сделал? Возможно ли это без использования чего-то вроде UPnP?
Любая помощь была бы очень признательна!
Редактировать: я нашел этот документ http://www.brynosaurus.com/pub/net/p2pnat/ Похоже, что перевод шпильки — это то, что мне нужно, но, похоже, он не пользуется широкой поддержкой. Интересно, насколько хороша поддержка UPnP мобильным провайдером?
Комментарии:
1. Ваш вопрос был «Интересно, насколько хороша поддержка UPnP мобильным провайдером?». Во всех вопросах объясняется, что такое перфорация отверстий, но ни один из них не отвечает на вопрос о текущей поддержке. О, как весело 🙂 Благодарим вас за ссылку на документ p2pnat.
2. Нашли ли вы решение для этого за последние годы? У меня также есть три удаленные сети (все с LTE-модемами, ISP NAT без UPnP), которые я хотел бы соединить вместе. Сейчас я использую Pritunl OpenVPN, но я хотел бы иметь сервер-посредник только для того, чтобы быть посредником, как вы описали, а не для маршрутизации всего трафика через него.
3. Нашел ZeroTier, который выглядит как инструмент для работы (не удалось отредактировать комментарий, потому что прошло более 5 минут).
Ответ №1:
То, что вы ищете, — это пробивание отверстий в UDP, см., например, http://en.wikipedia.org/wiki/UDP_hole_punching
Основная идея проста: вы указываете каждой конечной точке, какие порты использовать, и они начинают отправлять udp-пакеты. Устройства, использующие NAT, настроят правило обхода, когда увидят первый исходящий пакет, и затем следующая попытка с другого конца будет соответствовать этому правилу обхода.
Комментарии:
1. Пробивка отверстий — это хорошо, если у каждого маршрутизатора есть внешняя видимость, в которой я не могу быть уверен: ( Этот документ brynosaurus.com/pub/net/p2pnat содержит хорошее объяснение пробивки отверстий, а также «перевод шпильки», который больше похож на то, что мне нужно, но, увы, плохо поддерживается : (
Ответ №2:
Вам нужен сервер-посредник, чтобы клиенты могли определить, где они находятся. Затем один открывает сервер с помощью UPnP, а другой подключается к нему.
Комментарии:
1. Да, это было бы идеально, если бы я мог его использовать. UPnP не работает в многоуровневой сетевой топологии, хотя: (
2. мульти-nat? С обеих сторон? Это Китай?