Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Сетевые технологии > какие порты в ответном UDP у сервера за NAT?


Автор: semibug 11.10.2011, 19:35
Есть клиент (PC), и сервер (железяка на микроконтроллере).
Клиент отправляет UDP пакет с портом источника 1100, и портом назначения 1200.
Сервер принимает его и отправляет ответное с портом источника 1200, и портом назначения 1100.
Пока все работает.
Теперь выношу сервер за NAT, вижу, что на него приходят UDP пакеты с портом назначения 1200, а вот портом источника совсем другим, причем не одинаковым. Это в общем то нормально для NAT. Но не понятно как теперь выдать ответ, чтобы он попал клиенту?
Какие указать порты источника/назначения?
Честно говоря перепробовал все варианты, не работает, поэтому причина не только в этом, а ещё в настройках роутера/фаирвола, но чтобы сузить область поиска, хотелось бы знать наверняка, какие должны быть указаны  порты источника/назначения в ответе от сервера?

Автор: Akina 11.10.2011, 20:53
Цитата(semibug @  11.10.2011,  20:35 Найти цитируемый пост)
выношу сервер за NAT, вижу, что на него приходят UDP пакеты с портом назначения 1200, а вот портом источника совсем другим, причем не одинаковым. Это в общем то нормально для NAT.

Это нормально для НЕНАСТРОЕННОГО NAT.

Цитата(semibug @  11.10.2011,  20:35 Найти цитируемый пост)
не понятно как теперь выдать ответ, чтобы он попал клиенту?

Ровно на тот порт, с которого рутер оттранслировал данный конкретный пакет. 

Автор: semibug 11.10.2011, 20:56
Цитата(Akina @  11.10.2011,  20:53 Найти цитируемый пост)
Это нормально для НЕНАСТРОЕННОГО NAT.

Упс, здесь я не в теме, можно подробнее.

Цитата(Akina @  11.10.2011,  20:53 Найти цитируемый пост)
Ровно на тот порт, с которого рутер оттранслировал данный конкретный пакет. 

Т.е. адрес порта назначения исходящего от сервера пакета = адрес порта назначения входящего пакета?
В какое значение установить адрес источника для исходящего от сервера пакета?

Автор: Akina 11.10.2011, 22:58
Цитата(semibug @  11.10.2011,  21:56 Найти цитируемый пост)
здесь я не в теме, можно подробнее.

Если я верно понимаю, то сервер в Инете, а клиент в локалке. Не суть, где именно, но принцип тот же.
В этом случае следует использовать настройку NAT на обеспечение отдачи пакетов с определёнными характеристиками с определённого исходящего порта. Впрочем, это несколько противоречит идеологии NAT... (в скобках замечу, что не знаю ни одной имеющей практический смысл реализации такого подхода)
Однако возможно иное и решение - трансляция внутрь на опредедлённый адрес и порт пакетов с определёнными характеристиками. Но при этом придётся изменить схему установления соединения.
Проблема - только один клиент из локалки сможет в любом из вариантов общаться с сервером.

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

Автор: semibug 12.10.2011, 00:31
Akina, спасибо. Заработало когда в ответном сообщении менял местами источник и цель у портов, ip и mac адреса.



Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)