我有以下设置:
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所有stream量显示,如果源是192.168.0.3 。
原因是我有特殊的configurationpostgres,我不能改变。 当source是192.168.0.3 ,这个postgres只接受连接,所以如果source变为192.168.0.2连接将被拒绝。
上面的问题是这里收到的答案的结果: 当目的地也是那个接口时,如何通过接口添加ip route来路由通信量 (当在同一个networking中configuration两个别名时,不可能用静态路由改变源IP地址)
下面的问题的答案似乎与我的问题有关,虽然它不会导致添加规则: https : //unix.stackexchange.com/questions/243451/iptables-change-local-source-address-if-destination-地址匹配
我已经尝试遵循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
我已经检查了你在你的问题中提到的答案,并试图configurationiptables就像它在那里提到的那样。 使用CentOS在我的虚拟机上用nginx进行testing,它工作正常。
尝试使用这个规则:
iptables -t nat -A POSTROUTING --destination 192.168.0.3/32 -j SNAT --to-source 192.168.0.3
在我的情况下,这个规则即使在禁用IP转发的情况下也是如此,所以试试吧。
更新:
对于所有传出的stream量,您应该使用规则:
iptables -t nat -A POSTROUTING -j SNAT --to-source 192.168.0.3
inputip 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源。