Вопрос или проблема
Я пытался пробить отверстие с помощью netcat в режиме udp, но не смог сделать это, я также пытался использовать технику circuit-relay из libp2p, но безуспешно, я также экспериментировал с пробиванием отверстий в bittorrent в прошлом, и у меня ничего не вышло.
Затем я обнаружил pystun3, и когда я запускаю его на пирцах, которые я контролирую, я получаю “Full Cone” как тип nat для обоих моих пирцев, что в теории должно быть самым легким типом NAT для пробивания, но у меня не было большого успеха с этим.
Существует ли библиотека, которая может использоваться для прохождения через NAT (пробивания отверстия) между 2 пирцами?
Библиотека должна содержать несколько техник для тестирования, чтобы найти, какая техника работает лучше для этих пирцев, у меня есть доступ к публичным пирцам, которые я могу использовать в качестве сигнализирующего сервера, если это необходимо.
Библиотека может быть на любом языке, go, c, c++, python, javascript … и т.д.
Ответ или решение
Для решения задачи пробития дыр в NAT между двумя пирами, вам необходимо использовать библиотеку, которая поддерживает различные техники NAT-hole punching. Существует несколько библиотек и методов, которые могут помочь в реализации этой задачи. Ниже приведены некоторые из них, а также рекомендации по их применению.
1. Libp2p
Вы уже упомянули о libp2p, что является хорошим началом, так как этот фреймворк специально разработан для построения распределенных приложений и включает механизмы для работы с NAT. В частности, libp2p
поддерживает различные техники, включая:
- Установление соединений через реле (Circuit Relay): В случае, если напрямую нельзя пробить NAT, можно использовать механизм опосредованного соединения.
- Techniques для стукотехник: Эти техники предназначены для разных типов NAT (например, Full Cone, Restricted Cone, Symmetric NAT и др.), что позволяет адаптироваться к различным условиям сети.
Для вашего случая, даже несмотря на предыдущие неудачи с libp2p
, стоит рассмотреть использование его других возможностей и обновлений, которые могли быть добавлены после вашего последнего эксперимента.
2. pystun3
Так как вы уже экспериментировали с pystun3 и получили результаты о типе NAT, это может быть полезным для определения, какая техника лучше всего подходит. Однако библиотека pystun3
сама по себе не предназначена для пробития NAT, но она может помочь вам понять ваше сетевое окружение. Вы можете использовать ее в сочетании с другими библиотеками, чтобы повысить шансы на успех.
3. STUN/TURN и ICE
Для реализации пробития NAT можно также использовать протоколы STUN (Session Traversal Utilities for NAT) и TURN (Traversal Using Relays around NAT). Эти протоколы позволяют:
- STUN: Определить ваши сетевые параметры и использовать их для создания прямых соединений.
- TURN: Если STUN не работает (например, для симметричного NAT), TURN предоставляет механизм реле, чтобы пересылать трафик между пирами.
Существует множество библиотек, которые реализуют эти технологии:
- python-stun (Python) — простая библиотека для работы с STUN.
- coturn (C, серверная часть) — позволяет вам установить TURN-сервер.
4. WebRTC
Если у вас есть возможность использовать браузер или подобное окружение, WebRTC предоставляет мощные средства для пробивания NAT. WebRTC использует ICE для выбора оптимального соединения и может эффективно обходить NAT различного типа. Кроме того, WebRTC включает в себя встроенные механизмы для работы со STUN и TURN серверами.
5. Дополнительные библиотеки
Если вы ищете альтернативы, вот несколько других библиотек, которые могут быть полезны:
- NAT-PMP и PCP: Эти протоколы могут быть полезны для взаимодействия с вашими маршрутизаторами, если они поддерживаются.
- Pion (Go): Библиотека во языке Go, которая также поддерживает WebRTC и может помочь с NAT traversal.
Заключение
Вам стоит попробовать сочетание упомянутых решений и технологий, начиная с библиотек для STUN и TURN и исследований возможностей libp2p
, включая проверку типов NAT ваших пиров. Обязательно проводите тестирование с различными конфигурациями и входными данными, так как успешное пробитие NAT может зависеть от множества факторов, включая конкретное оборудование и настройки сети.
Выбор подходящей библиотеки зависит от ваших требований и языка программирования, на котором вы работаете. Надеюсь, приведенные рекомендации помогут вам успешно пробить NAT и наладить необходимые соединения между вашими пирами.