Есть ли способ использовать UPnP для обхода NAT на Android с подключением 3G/4G, и если да, то зависит ли он от оператора?
UPnP NAT Traversal для беспроводной передачи данных 3G/4G на Android
Ответы (3)
Нет, пока нет возможности сделать это по той простой причине, что операторы мобильной связи не используют NAT жилого класса — у них есть CGN «NAT операторского класса», см. здесь http://en.wikipedia.org/wiki/Carrier-grade_NAT, и эти устройства имеют очень разные механизмы распределения портов и управления от жилые шлюзы.
См. документы по NAT операторского класса (CGN) в этой коллекции: http://www.scribd.com/collections/3292450/P2P
PS в настоящее время существует протокол, подобный UPnP, который рассматривается для CGN, а именно «протокол управления портами» (PCP), см. здесь: http://tools.ietf.org/html/draft-ietf-pcp-base-29
Cling имеет специальные классы для Android для выполнения UPnP, и, судя по сообщениям на форуме и их документации, он должен работай. В настоящее время я тестирую его на ПК, но в конечном итоге я выбрал его из-за их поддержки Android. Я опубликую результаты своих тестов здесь через день или два.
Проверьте Cling Core и особенно поддерживающие библиотеки. . На самом базовом уровне вам нужно всего 4 строки кода для сопоставления портов.
[ОБНОВЛЕНИЕ] В документации Cling для Android указано, что она разрешает привязку только к интерфейсам Wi-Fi, что делает невозможным сопоставление портов при сотовом подключении для передачи данных (по крайней мере, с версией Cling 1.0.5)
Вместо того, чтобы пытаться использовать uPnP (что представляет угрозу безопасности, поскольку он арендует несопоставленный открытый порт), вы можете либо использовать STUN для получения общедоступного IP-адреса/порта, а затем установить UDP-соединение, через которое вы можете туннелировать псевдо-TCP, или используйте сервер TURN. Для NAT операторского класса, если вы не хотите платить за ретрансляцию, есть еще один метод, который может когда-нибудь сработать:
https://drive.google.com/file/d/0B1IimJ20gG0SY2NvaE4wRVVMbG8/view?usp=sharing