Как изменить IP-адрес назначения после принятия решения о маршрутизации, то есть в цепочке POSTROUTING iptables?
д ... как следует из названия - уже слишком поздно делать это в таблице POSTROUTING.
этот и этот очень полезны, чтобы увидеть, что и когда произойдет. если действительно нужно перезаписать dst-адрес - может быть, поставить другую машину в строку [virtual? ] или даже лучше - подумайте еще раз, зачем вам это нужно.
Я не думаю, что на это есть хороший ответ. Я не думаю, что iptables позволяет вам изменить IP-адрес назначения после маршрутизации. Что я хочу сделать:
iptables -t nat -A POSTROUTING -o eth0 -p udp -d 10.0.0.0/8 --dport 53 -m comment --comment "Redirect DNS when VPN is down" -j DNAT --to-destination 8.8.8.8
Но это незаконно. Я хочу изменить адрес назначения на основе интерфейса вывода, который неизвестен до момента маршрутизации.
Если бы вы могли изменить IP-адрес назначения, было бы слишком поздно менять маршрутизацию (что было бы хорошо для моего примера использования). Вы можете маршрутизировать пакеты только один раз.
Единственное известное мне решение - это иметь виртуальную машину, которая находится между eth0 и реальной сетью, которая затем может выполнять DNAT.
Для моих целей я могу динамически добавлять или удалять правило предварительной маршрутизации, когда интерфейс VPN выходит из строя или срабатывает, но это кажется неуклюжим решением.
Если вы действительно хотите изменить место назначения в POSTROUTING, возможно, вы можете попробовать злоупотребить целью NETMAP? Я не уверен, работает ли это, но попробуйте что-нибудь вроде:
iptables -t nat -A POSTROUTING -d 1.2.2.2/32 -j NETMAP --to=1.3.3.3/32
Невозможно изменить IP-адрес назначения в POSTROUTING
стол.
С помощью NETMAP
в POSTROUTING
цепь будет действовать как SNAT
для всей картографической сети.
НАПРИМЕР.
iptables -t nat -A POSTROUTING -s 1.2.3.4/24 -d 5.6.7.8/24 -j NETMAP --to 11.22.33.44/24
Приведенное выше правило произведет замену исходных IP-адресов 1.2.3.4
к 11.22.33.44
в 24
сеть.