LINUX.ORG.RU
ФорумAdmin

Как не применять iptables SNAT к исходящим пакетам от localhost?

 , ,


0

1

Если я делаю

iptables -t nat -A POSTROUTING -o eth0 -j SNAT --to-source 100.200.100.200

то оказывается что оно применяется и к исходящим соединенниям от локальных процессов. Это нежелательно если надо один IP для NAT, а другой IP для чего-то важного . Я могу сделать

iptables -t nat -A POSTROUTING -s 10.0.0.0/8 -o eth0 -j SNAT --to-source 100.200.100.200

но это не удобно, еще одно место где надо следить за IP. Можно как-то «объяснить» SNAT что не надо менять адрес исходящих от localhost пакетов?

Попробуйте так:
iptables -t nat -A POSTROUTING -o eth0 -m addrtype ! --src-type LOCAL -j SNAT --to-source 100.200.100.200

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

Можно как-то «объяснить» SNAT что не надо менять адрес исходящих от localhost пакетов?

iptables -t nat -A POSTROUTING -s 127.0.0.0/8 -j ACCEPT Перед другими правилами

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

под localhost ты имел ввиду 127.0.0.1 или 100.200.100.201?

100.200.100.200 наверное неуместно в таком случае называть его localhost

правило

iptables -t nat -A POSTROUTING -s 127.0.0.0/8 -j ACCEPT

сработает только для интерфейса «lo»

Зато

iptables -t nat -I POSTROUTING -m addrtype --src-type LOCAL -j ACCEPT

перед остальными правилами работает как часы

Еще, судя по-всему, можно сделать так

iptables -A FORWARD -j CONNMARK --set-xmark 0x0001

iptables -t nat -A POSTROUTING -m connmark ! --mark 0x0001 -j ACCEPT

это решение нравится больше, так SNAT не будет применяться если соединение не прошло через filter.FORWARD. Это верно?

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

Уже понял ошибку. Написал на фоне фразы localhost. Дальше уже поправили.

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