2012-02-11 3 views
0

Я хотел бы настроить сетевое соединение (RTP или UDP) между двумя компьютерами в разных местах, каждое из которых находится за модемом/брандмауэром NAT. Я не хочу менять брандмауэры.Подключение к точкам сети через брандмауэры

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

Это нормально, насколько это возможно, но это означает, что все данные перемещаются через бот. Есть ли способ, которым я могу подключить два компьютера без бота или, если это не удается, позволить боту выпадать из обмена данными после установки соединения? Я чувствую, что нет никакого способа сделать это, но мой TCP/IP немного ржавый ...

+0

Возможный дубликат [Как сделать работу сервера TCP за маршрутизатором (NAT) без необходимости настройки перенаправления] (http://stackoverflow.com/questions/1511562/how-do-i-make-a- tcp-server-work-behind-a-router-nat-without-any-redirection-co) или [C++ Hole-punching UDP/RTP] (http://stackoverflow.com/questions/4634780/c-hole-punching -udprtp) –

+0

@Adam Liss: исправьте, извините :-( –

ответ

1

Если вы ничего не принимаете на NAT/Firewall, вы правы.

Отверстие для отверстий, например, не будет работать с перегруженным NAT (PAT), насколько я знаю, поскольку исходный порт рандомизирован устройством NAT и отображает/сопоставляет как общий адрес назначения, так и выбранный источник избранный порт.

UPnP может работать, но снова вам нужно предположить, что он существует и включен на устройстве NAT.

Как я вижу, у вас есть только два варианта, если вы хотите быть общим: 1. Настройте NAT. 2. Используйте прокси-сервер (упомянутый бот). Skype, например, использует второй, но делает это распределенным образом, используя каждый клиент Skype в качестве потенциального прокси (возможно, только если он обнаруживает, что он не находится за NAT или не ограничен им).

+0

спасибо, что я посмотрю на перфорирование отверстий (хотя вы указываете, что это не сработает, я должен знать еще об этом). UPnP не предназначен для обнаружения службы в частных сетях? Мой сценарий находится в общедоступной сети. –

+0

Если я правильно понимаю, UPnP используется в частной сети, чтобы разрешить переговоры между элементами. В этом контексте разрешить клиенту обновлять маршрутизатор/брандмауэр в портах, которые ему нужны открывать для связи (на практике, м одиозный маршрутизатор или брандмауэр автоматически), если это будет сделано, оба клиента могут обменивать порты, через которые они могут быть достигнуты (обмен, вероятно, произойдет через прокси). – EdwardH