
在 Linux 上,是否可以透過虛擬介面路由對特定 IP 的所有請求,以便在另一端顯示與主機的主 IP 位址不同的 IP 位址?假設eth0
IP 位址為 1.1.1.1,eth0:1
位址為 1.1.1.2。如何使所有對 1.2.3.4 的請求顯示為來自eth0:1
?我正在嘗試以下操作,但似乎不起作用:
route add 1.2.3.4 dev eth0:1
答案1
是的。
實現此目的的一種方法是使用 IPTABLES 重寫離開具有多個 IP 位址的電腦的封包,以表明它們來自虛擬介面。嘗試
/sbin/iptables -t nat -I POSTROUTING -d DEST.IP -j SNAT --to VIRTUAL.IP
(當然,您確實需要按照您的預期設定虛擬 IP,即 eth0:1 或等效的設備需要存在,以便流量可以找到返回電腦的路徑)
答案2
可能需要使用命令
ip route add 1.2.3.4 dev eth0:1 src 1.1.1.2
或具有類似選項的路線。如果這沒有按預期工作,您可能需要高級路由:在 /etc/iproute2/rt_tables 中為此目標創建一個附加路由表,將上述條目作為唯一的條目放入此表中並啟動此表:
ip rule add to 1.2.3.4 priority 100 table to__1_2_3_4
ip route flush cache
最後的絕望解決方案是 netfilter:您可以在 POSTROUTING 鏈中使用帶有 iptables 的 SNAT 來重寫發送到此目的地的封包的來源位址。