LINUX.ORG.RU
ФорумAdmin

Хочу странного от NAT в iptables

 , ,


0

2

Понадобилось тут отладить и протестировать работу некоего сетевого приложения в режиме точка-точка, когда оба инстанса за натом. Работает прокол ната через STUN. Сделал такую схему:

Node1 (10.10.0.10) <---
                      |
                      v
                    (10.10.0.1) GW (SNAT) (172.16.80.1) <---> (172.16.80.2) STUN Server                      
                      ^
                      | 
Node2 (10.10.0.11) <---

На нодах запущены инстансы приложения, которым надо пообщаться друг с другом. Они в одной подсети, потому что это не просто компы, а специфические девайсы, нужные куче людей и я не могу просто так менять их сетевые настройки. Вот тут и начинается странное, которого я хочу. На шлюзе настроен MASQUERADING из подсети 10.10.0.0/24.

Если я просто запускаю stun-client из подсети 10.10.0.10, то все работает отлично, STUN-сервер получает пакет, и его ответный пакет доходит до клиента, клиент показывает правильные «внешние» адрес и порт. Но если я пытаюсь эксплуатировать «проколотый» NAT и отправляю пакеты с другого клиента на 172.16.80.1 с полученым портом, то этот пакет обрабатывается как предназначенный самому шлюзу и в трансляцию адресов не попадает. Как я понимаю, проблема в том, что пакет приходит из «внутренней» сети и сразу попадает в цепочку INPUT.

Странное, что я хочу: зафорсить трансляцию адресов, даже если пакет приходит из «внутренней» сети. Айпишники нод фиксировать не хочется, они могут быть разные, т.е. варианты «напиши правило, чтобы пакеты с Node1 редиректились на Node2 и наоборот» не канают, хочется чтобы работал именно «прокол» NAT.

Как такое можно сделать? Я просто не знаю, в какой момент происходит смена адреса ответного пакета, это делается как будто не в одной из цепочек iptables, а где-то еще.

★★

Как такое можно сделать?

Чтобы пропанчить дырку надо показать stun серверу 2 IP Ergo, 2xLAN + 2xInternal interfaces + 2xNAT services + 2xExternal interfaces

Виртуальные или реальные, зависит от возможностей GW

kindof
()
Ответ на: комментарий от kindof

Node 1 кидает пакет стан-серверу, он проходит через нат, стан-сервер отвечает, соединение на нат становится established, дальше казалось бы кто угодно (в том числе и Node 2) может кидать пакеты на открытый порт на NAT и шлюз их может пересылать Node 1. Что в этой схеме требует именно двух раздельных сетей?

roof ★★
() автор топика
Ответ на: комментарий от kindof

Я, наверное, сделаю две сети, это несложно, но дыра в понимании, как оно работает, раздражает. Если не трудно, объясните пожалуйста.

roof ★★
() автор топика
Ответ на: комментарий от roof

Что в этой схеме требует именно двух раздельных сетей?

ARP

kindof
()
Ответ на: комментарий от roof

Я просто не знаю, в какой момент происходит смена адреса ответного пакета, это делается как будто не в одной из цепочек iptables, а где-то еще.

https://www.frozentux.net/iptables-tutorial/images/tables_traverse.jpg
Точнее вот
https://images1.russianblogs.com/60/fc/fc6cb0a63cbb2b76a7e719db243ac3cc.png

anc ★★★★★
()
Последнее исправление: anc (всего исправлений: 1)

Если отправить пакет 10.10.0.11:хх->172.16.80.1:yy, то nat скорее всего выполнится (если rp_filter не помешает) и на нода1 придет пакет 10.10.0.11:хх->10.10.0.10:zz. Но вот ответный пакет будет 10.10.0.10:zz->10.10.0.11:хх который нода1 совсем не ожидает.

Нужно учесть, что ответные пакеты не попадают в nat-правила prerouting.

Для начала отключи rp_filter - он крайне вреден в данной ситуации.

А каким способом ты разделил 2 машины имеющие адреса из одной и той же сети?

Нет ли возможности на нодах сделать дополнительные адреса из разных сетей? Это сильно упрости ситуацию, т.к. линух умеет делать snat+dnat для одного соединения.

vel ★★★★★
()
Ответ на: комментарий от vel

Ох ты ж, вот же ж блин. Даже понять теперь не могу, как я себе это представлял и на что рассчитывал. Спасибо.

roof ★★
() автор топика
Ответ на: комментарий от kindof

Я понимаю, что вы из лучших побужедний, но блин. Ладно, спасибо все равно. Сделал по человечески (как в первом ответе), все заработало.

roof ★★
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.