Хочу странного от NAT в iptables
Понадобилось тут отладить и протестировать работу некоего сетевого приложения в режиме точка-точка, когда оба инстанса за натом. Работает прокол ната через 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, а где-то еще.