LINUX.ORG.RU
решено ФорумAdmin

Почему DNAT внутри сети не работает?

 


2

3
-A PREROUTING -d 11.11.11.11 -i eth1 -p tcp -m tcp --dport 80 -j DNAT --to-destination 192.168.11.142:8082

eth1 - LAN интерфейс.

11.11.11.11 это внешний интерфейс.

Вроде по логике:

Заходит пакет на интерфейс eth1, попадает в цепочку PREROUTING, фильтр видит в заголовке адрес направления 11.11.11.11 и порт 80, и перенаправляет пакет на 192.168.11.142:8082

★★★★★

Последнее исправление: steemandlinux (всего исправлений: 2)

Для такого случая нужен дополнительный SNAT. Получается ситуация следующая (например 192.168.11.100 - клиент, 192.168.11.1 - роутер)

192.168.11.100 - посылает SYN пакет через роутер (192.168.11.1) на 11.11.11.11
192.168.11.1 делает DNAT и перенаправляет пакет на 192.168.11.142
192.168.11.142 - видит син пакет от 192.168.11.100 и отвечает ACK на 192.168.11.100 (на прямую мимо роутера).
192.168.11.100 - видит ACK от 192.168.11.142 и не знает что с ним делать так как SYN пакетов туда никто не посылал (конектились к 11.11.11.11 а не 192.168.11.142)

Я обычно такие ситуации лечу так:

iptables -A POSTROUTING -t nat -o ${LAN_IF} -s 192.168.0.0/16 -m conntrack --ctorigdst ${WAN_IP} -j SNAT --to-source ${LAN_IP}

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

Ага, только ты упустил один момент, DNAT меняет только заголовок DST в IP пакете. И получается примерно такое: Машина 192.168.11.20 отправляет пакет на 11.11.11.11, тот делает DNAT на машину 192.168.11.142 (тут пока все как ты говоришь.) НО, машина 192.168.11.142 получает запрос, обрабатывает, и отправляет ответ сразу на 192.168.11.20 мимо DNAT роутера.

Машина 192.168.11.20 - просто не ожидает получить ответ от 192.168.11.142. Он то отправлял на 11.11.11.11, и от него ждет ответ.

Tok ★★
()

Интерфейс лишний. Еще можно указать таблицу -t nat, или по PREROUTING iptables, сам поймет какая таблица, но я например всегда указываю. Алсо должна быть связь между «11.11.11.11» и 192.168.11.142. Да если еще так как выше не работатет, можешь попробовать, например так:

iptables -t nat -A PREROUTING --dst 11.11.11.11 -p tcp --dport 80 -j DNAT --to-destination 192.168.11.142:8082
iptables -t nat -A POSTROUTING -p tcp --dst 192.168.11.142 --dport 8082 -j SNAT --to-source 11.11.11.11
iptables -t nat -A OUTPUT --dst 11.11.11.11 -p tcp --dport 80 -j DNAT --to-destination 192.168.11.142:8082

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

192.168.11.142 - видит син пакет от 192.168.11.100 и отвечает ACK на 192.168.11.100 (на прямую мимо роутера).

А понял, source ip.

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

Если firewall достаточно ограничивающий, то без него не будет работать.

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