Было много перечитано литературы по этой теме(STUN, TURN, NAT Traversal, UDP Hole Punching), но реального результата(соединение клиента и сервера через интернет) так и не было получено.
Может кто-то сталкивался с такой проблемой и есть опыт?Будет интересно узнать как решали проблему.
Или есть какие-нибудь ещё мысли по этому поводу?
St1G
> Или есть какие-нибудь ещё мысли по этому поводу?
Уже пора начинать думать о IPv6, а не о пробивании натов. Хотя бы через тунели. ИМХО конечно.
Туннелирование - наше все. В принципе, уже существуют готовые решения - например, I2P можно заюзать, он за NAT'ом работает. API у него, правда, какой-то не очень удобный и плохо документированный.
Gecko
А если ещё какие примеры туннелирования кроме i2p?А то что-то не нашёл больше ничего.
Например для программного туннелирования мобилок черещ TCP/UDP.
В итупи тоже не всё хорошо, там ведь тоже ноды делятся по степени доступности. Роутеры с белым айпи приоритетны.
St1G
i2p это малость не то, что тебе надо. Там тоже проблема серых адресов, они не могут быть рутерами, т.к. рандомный порт к ним не открыть. Домашний nat лечится UPnP или пробросом. Провайдерский nat не лечится вовсе. Провайдерский файрвол тем более. Когда мне надо было держать 1 сокет для управления, 1 для данных, то я поступал банально. К серверу идет запрос на подключение, сервер в ответке сообщает номер порта, к которому можно подцепиться за данными. Клиент к нему цепляется и все счастливы. Адрес у сервера разумеется белый или проброшен необходимый диапазон. Но вообще не зная что у тебя за задача советовать сложно.
Теоретически в RakNet все есть, но лично еще не опробовал.
Dampire
Задача в том, чтобы соединить друг с другом два любых мобильных устройства(или компа) через p2p или c-s(где одно устройство как сервер, а второе - клиент) по tcp.
Может есть у кого ещё какие варианты?
посмотреть как устроен опенсорс аналог teamview
ICE?
St1G
Сейчас практически на всех роутерах (кроме корпоративных) есть UPnP NAT. Есть несколько опенсорсных реализаций. MiniUPnP например. По идее должно работать. Другой вариант использовать какой-нибудь STUN/TURN сервис или написать свой велосипед с мастер-сервером. Принцип работы аналогичен тому, что я описывал выше, только в обе стороны. Если тебе именно туннелирование нужно - изучи принцип работы Hamachi. Но там ведь тоже нужен мастер-сервер, который будет маршрутизировать траффик.
Ogra
Это насколько я знаю просто обертка-подбиралка на все эти технологии.
Upd.
Кстати Teamviewer тоже работает с мастер-сервером.
Dampire
> Это насколько я знаю просто обертка-подбиралка на все эти технологии.
Обертка над STUN, если быть точным.
Ребята, если у вас нету хождения IP пакетов между двумя узлами, то прямого соединения между ними не будет. Тогда уж делайте через сервер (только данные шифруйте непрозрачно для сервера)
По TCP напрямую не соединишься, если оба компа за NATом. RAKNET в себе содержит имитацию ухудшенного и покореженного TCP поверх UDP, потому он соединяется.
Не всегда ходят и UDP, если роутеры настраивались. По умолчанию они обычно так настроены, что соединение возможно. Надо лишь суметь передать номер порта через какого-то посредника, это может быт STUN или еще что-то.
Zab
> суметь передать номер порта через какого-то посредника, это [b]может быт STUN[/b] или
> еще что-то.
С этого места можно подробнее? Как через стун передать второй стороне что-то?
Тема в архиве.