LINUX.ORG.RU
ФорумAdmin

Очередной вопрос о port forwarding :)


0

0

Как с помощью iptables перенаправить трафик на другой ип, я нашел кучу примеров как это сделать если надо пробросить порт на хост за натом. Но если надо перенаправить трафик просто на другой хост? Делаю так:

iptables -t nat -A PREROUTING -p tcp -d 1.1.1.1 -j DNAT --to-destination 2.2.2.2
iptables -A FORWARD -i eth0 -d 2.2.2.2 -j ACCEPT

Видишь ли, там есть такая небольшая проблемка.

Дело в том, что клиент стучится на твой айпишник и, соответственно, ждет ответа именно от тебя. В то время как 2.2.2.2, для которого твой хост наверняка не является шлюзом, будет отвечать напрямую клиенту. Разумеется, клиент проигнорирует ответ от 2.2.2.2, так как ждет ответа от 1.1.1.1 и ни от кого больше. Мораль:

iptables -t nat -I POSTROUTING -d 2.2.2.2 -j MASQUERADE

Теперь 2.2.2.2 всегда будет думать, что к нему обращается твой хост, и станет отвечать именно ему, а тот уж позаботится о правильном преобразовании адресов.

P.S. Если не хочешь, чтобы маскарадились _все_ соединения до 2.2.2.2 (включая те, которые не являются результатом проброса), используй маркировку.

nnz ★★★★
()

Мой любимый вопрос собеседуемым, вписавшим iptables в резюме: «Чем отличаются DNAT, SNAT и MASQUERADE?»

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

Это я к тому, что стоило бы раскурить различные реализации NAT на основе iptables, чтобы таких вопросов больше не возникало.

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

Yaii! Работает, спасибо за развернутый ответ) А П.С. ваш я не понял, при такой схеме у меня все соединения поступившие на 1.1.1.1 (это один из алиасов) передаются на 2.2.2.2. Что вы имели в виду? я заинтригован)

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

>А П.С. ваш я не понял, при такой схеме у меня все соединения поступившие на 1.1.1.1 (это один из алиасов) передаются на 2.2.2.2. Что вы имели в виду? я заинтригован)

Чего тут непонятно? Изменился только обратный адрес. Раньше он был равным адресу клиента, и ничего не работало. Теперь он всегда 1.1.1.1, и все работает.

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

>Теперь он всегда 1.1.1.1, и все работает.

Точнее, не обязательно 1.1.1.1, а один из адресов твоего хоста, поэтому на обратном пути трафик обязательно заходит к тебе.

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

Если такой вопрос возник, то, видимо, ничего :)

Просто если бы твой хост был шлюзом для белой подсети и/или маршрутизатором AS, то маскарадить _все_ транзитные соединения до 2.2.2.2 было бы вовсе необязательно.

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