Networking
更改發往源主機的第二個網路別名的傳出流量的源地址
我有以下設置:
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 僅在 source 為 時接受連接
192.168.0.3
,因此如果 source 變為192.168.0.2
則連接將被拒絕。以上問題是此處收到的答案的結果:How to add ip route to route traffic through interface when destination is also that interface(當在同一網路中配置兩個別名時,無法使用靜態路由更改源 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
我已經檢查了您在問題中提到的答案,並嘗試
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 源。