Тестирование кода прорыва NAT - PullRequest
2 голосов
/ 26 октября 2009

Я очень заинтересован, по крайней мере, попытаться реализовать прорыв NAT для моего старшего проекта. (Я делаю сетевой API). Это даже не требование моего проекта, просто мой интерес. Я знаю основы того, как это работает, поправьте меня, если я ошибаюсь: Два клиента подключаются к серверу, который не находится за NAT, и этот сервер, зная IP-адрес этих двух клиентов, говорит клиентам подключаться друг к другу одновременно. Таким образом, «Прорыв».

Это кажется не очень простым или ужасно трудным для кодирования. Тем не менее, часть, на которой я застрял - это тестирование. Можно ли выполнить разумную настройку только с одним маршрутизатором / одним NAT и моими тремя доступными компьютерами?

Спасибо за любой совет!

Ответы [ 2 ]

1 голос
/ 27 октября 2009

С точки зрения кода / теории о нарушении NAT, я не могу дать совет, но могу высказать некоторые предложения по настройке тестовой среды.

Вы можете скачать копию m0n0wall и запустить ее в образе Virtual PC (оба бесплатны). Это даст вам второй маршрутизатор без покупки дополнительного оборудования. С помощью этого дополнительного маршрутизатора вы можете создать отдельную подсеть для ваших двух клиентов.

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

Затем настройте существующий маршрутизатор и сервер, как они есть, подсеть 192.168.1.x / 24; затем настройте второй маршрутизатор (m0n0wall / hardware router) как подсеть 192.168.2.x / 24 и подключите порт «internet» второго маршрутизатора к одному из портов «PC» на первом маршрутизаторе. Затем подключите оба клиента ко второму маршрутизатору.

(я понимаю, что это немного сбивает с толку, прокомментируйте, если вы не можете понять, что я имею в виду)

1 голос
/ 27 октября 2009

Дайте мне посмотреть, если у меня есть это прямо. У вас есть два клиента, которые находятся за NAT и сервер, который не находится за ним. Оба клиента подключаются к серверу и получают информацию об общедоступном IP-адресе другого. Поскольку у каждого из них теперь есть пункт назначения, они отключаются от сервера и подключаются друг к другу напрямую через свои соответствующие блоки NAT. Это твое мышление? Если это так, у меня могут быть плохие новости для вас.

Чтобы это работало вообще, в каждой конфигурации NAT должны быть настроены выделенные порты для перенаправления хотя бы одного внешнего порта на предварительно определенный внутренний IP-адрес / номер порта. При общей настройке NAT исходящие запросы соединения будут перехвачены NAT, который откроет временный внешний порт. Этот номер внешнего порта используется только для связи с этим одним исходным адресом и портом. Когда соединение закрыто, этот внешний порт исчезает и будет переназначен для другого соединения позже. Поэтому, если оба клиента общаются с сервером, а затем отключаются, информация, отправленная им сервером, теперь недействительна.

Предполагая, что вы как-то обошли это, должно быть довольно просто просто подключить обоих клиентов к «внутренней» стороне NAT, а серверный ПК - к «внешней» стороне. Тогда вы должны надеяться, что ваш NAT-блок достаточно умен, чтобы зацикливать пакеты с одного локального внешнего порта на другой. Я уверен, что netfiler мог бы быть настроен таким образом, но я сомневаюсь, что домашний интернет-маршрутизатор (например, Linksys, NetGear и т. Д.) Сделает это с полки.

...