Одноранговое соединение, когда один пэр позади NAT

Итак, мне нужно мое приложение на C ++, чтобы установить одноранговое UDP-соединение. Я рассмотрел дырокол и UPNP (используя сопоставление портов). Пробивание отверстий кажется немного грязным: вам нужен сервер, тонны мусорных пакетов UDP. я действительно не хочу связываться с сервером, поэтому я выбрал UPNP. Я построил miniupnpc http://miniupnp.free.fr/ библиотека, и с радостью использовал его дома. Но когда я попробовал свое приложение в других сетях, я получил очень разочаровывающие результаты:

  1. Только 1 (мой) роутер делает все что нужно (локально & внешний ip, маппинг портов)
  2. 3 роутера показывают только локальный ip, и, может быть (я не проверял) сделать отображение портов
  3. 1 роутер поддерживает upnp, но miniupnpc не может найти устройство
  4. 1 маршрутизатор не поддерживает upnp (протестировано с помощью инструментов разработчика upnp)

Итак, у меня есть 2 вопроса:

  1. UPNP не очень распространен, или мне просто не повезло, или я неправильно использую miniupnpc?
  2. Есть ли другие способы сделать одноранговое соединение UDP, которое не требует внешнего сервера? (Так что не дырявое перфорирование)

Спасибо!

1

Решение

  1. UPNP не очень распространен, или мне просто не повезло, или я неправильно использую miniupnpc?

Вы не можете доверять случайному маршрутизатору для поддержки сопоставления портов UPnP IGD, и вы определенно не можете доверять включенной функции.

Существуют ли другие способы сделать одноранговое соединение UDP, которое
не требует внешнего сервера? (так что не дырокол)

Сторонний сервер, строго говоря, не требуется для пробивки дырок в типичных домашних сетях, но вам нужен способ, чтобы конечные точки знали о внешнем IP-адресе и порте друг друга: в этот момент обе машины могут просто начать отправлять сообщения друг другу: первые сообщения действительно будут отброшены, но когда маршрутизатор увидит, что внутренний IP-адрес уже отправил пакеты на внешний IP-адрес, он также разрешит входящий трафик (поскольку маршрутизатор воспринимает их как ответы на пакеты от внутреннего IP-адреса, даже если они не ‘ т действительно).

Увидеть ICE за то, что напоминает стандарт в этой области.

1

Другие решения


По вопросам рекламы [email protected]