更改发往源主机第二个网络别名的传出流量的源地址

更改发往源主机第二个网络别名的传出流量的源地址

我有以下设置:

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

以上内容取自此处:http://www.revsys.com/writings/quicktips/nat.html

答案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 源。

相关内容