Передача сообщений P2P за брандмауэрами и NAT

У меня есть два Java-приложения, работающие на двух разных машинах в двух разных частях мира. Машины могут быть за NAT (или нет!).

Приложения должны передавать некоторые данные (‹500kb).

У нас есть сервер, который может делать все (например, предоставлять IP-адреса пиров), но данные из приложений всегда должны передаваться в одноранговой сети. Данные не могут быть маршрутизированы через сервер.

Должен ли я иметь дело с беспорядком в брандмауэре?
Должен ли я устанавливать переадресацию портов?
Мне нужны JXTA или JGroups? UPNP что-то, что мне нужно изучить? UDP Hole Punching - это то, на что я должен обратить внимание?

Я знаю, что мой вопрос немного расплывчатый, но, пожалуйста, не забрасывайте мой вопрос, мне просто нужен толчок в правильном направлении. Я постараюсь объяснить лучше, когда начнут поступать комментарии/ответы!


person Marci-man    schedule 01.02.2014    source источник
comment
Начните с изучения ICE (RFC 5245) с помощью STUN и TURN. WebRTC в основном основан на этих технологиях.   -  person selbie    schedule 02.02.2014


Ответы (1)


Я согласен с советом Селби в комментарии выше.

Короткий ответ заключается в том, что для создания одноранговых сетей вы должны иметь базовое представление обо всех технологиях, которые вы упомянули.

Должен ли я иметь дело с беспорядком брандмауэра?

Если одноранговые узлы находятся за NAT, вам нужно будет иметь дело с обходом NAT.

Нужно ли устанавливать переадресацию портов?

Тебе обязательно"? Нет. Но вы могли бы рассматривать это как решение вашей проблемы. Переадресация портов — это способ настроить брандмауэр таким образом, чтобы ваши одноранговые узлы эффективно взаимодействовали, как если бы они не находились за брандмауэром. Это означает, что вы можете писать свое программное обеспечение, как если бы брандмауэра не было. Пробивка отверстий NAT является альтернативой ручной переадресации портов. Вы можете думать об этом как об «автоматической переадресации портов».

Мне нужны JXTA или JGroups?

Прости. Я не знаю, что это такое.

UPNP что-то, что мне нужно изучить?

UPnP — одна из возможных стратегий обхода NAT:

http://en.wikipedia.org/wiki/Universal_Plug_and_Play#NAT_traversal

Обратите внимание, что UPnP известен как небезопасный и, вероятно, его не следует включать, см., например:

http://www.zdnet.com/how-to-fix-the-upnp-security-holes-7000010584/

У меня сложилось впечатление, что UPnP — не самый важный метод обхода NAT, но его можно было бы использовать для достижения большей совместимости (т. е. в качестве запасного варианта в случае сбоя STUN).

UDP Hole Punching - это то, на что я должен обратить внимание?

Вам понадобится стратегия обхода NAT. UDP Hole Punching (STUN и т. д.) является одной из таких стратегий, и, как говорит Селби, она является распространенной. Существуют также бессерверные методики (посмотрите на механизм, который использует SubEthaEdit).

Полный стек обхода NAT может потребовать использования нескольких подходов для максимальной совместимости с различными маршрутизаторами/брандмауэрами.

person Ross Bencina    schedule 28.02.2014