У меня следующая настройка:
ip addr
:
2: ens4: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP group default qlen 1000
link/ether 01:12:23:34:45:5f brd ff:ff:ff:ff:ff:ff
inet xxx.xxx.xxx.xxx/24 brd xxx.xxx.xxx.xxx scope global ens4
valid_lft forever preferred_lft forever
inet 192.168.0.2/24 scope global ens4:1
valid_lft forever preferred_lft forever
inet 192.168.0.3/24 scope global secondary ens4:2
valid_lft forever preferred_lft forever
Я хочу получать весь трафик из 192.168.0.2
суждено 192.168.0.3
показать, как будто источник 192.168.0.3
.
Причина в том, что у меня есть конкретная конфигурация postgres, которую я не могу изменить. Этот postgres принимает соединения только тогда, когда источник 192.168.0.3
, поэтому если источник становится 192.168.0.2
тогда в соединении будет отказано.
Вышеуказанные вопросы являются результатом ответа, полученного здесь: Как добавить IP-маршрут для маршрутизации трафика через интерфейс, когда пункт назначения также является этим интерфейсом (невозможно изменить исходный IP-адрес со статическими маршрутами, если в одной сети настроены два псевдонима)
Ответ на следующий вопрос, кажется, связан с моим вопросом, хотя это не приводит к добавлению правила: https://unix.stackexchange.com/questions/243451/iptables-change-local-source-address-if-destination-address-matches
Я уже пробовал следовать правилам нат:
iptables -t nat -A POSTROUTING -o ens4 -j MASQUERADE
iptables -A FORWARD -i ens4 --source 192.168.0.2/32 -o 192.168.0.3 -m state --state RELATED,ESTABLISHED -j ACCEPT
iptables -A FORWARD -i ens4 --source 192.168.0.2/32 -o 192.168.0.3 -j ACCEPT
Выше получено отсюда: http://www.revsys.com/writings/quicktips/nat.html
Я проверил ответ, который вы упомянули в своем вопросе, и попытался настроить iptables
вроде там упоминалось. Протестировано с nginx
на моей виртуальной машине с CentOS, и она работает.
Попробуйте использовать это правило:
iptables -t nat -A POSTROUTING --destination 192.168.0.3/32 -j SNAT --to-source 192.168.0.3
В моем случае это правило работает даже с отключенной переадресацией IP, так что попробуйте.
Обновить:
Для всего исходящего трафика следует использовать правило:
iptables -t nat -A POSTROUTING -j SNAT --to-source 192.168.0.3
Тип ip route get 192.168.0.3
чтобы увидеть, какой маршрут фактически выбран.
В моем ящике (debian) я смог сделать то, что вы хотите, набрав:
sudo ip route change local 192.168.0.3 dev lo src 192.168.0.3
Кроме того, не известно, какие инструменты вы используете для подключения к 192.168.0.3, но большинство из них позволит вам указать, какой IP-источник использовать.