我有以下设置:
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
我已经尝试遵循 nat 规则:
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
答案1
我检查了你在问题中提到的答案,并尝试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
答案2
输入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 源。