透過虛擬介面路由IP

透過虛擬介面路由IP

在 Linux 上,是否可以透過虛擬介面路由對特定 IP 的所有請求,以便在另一端顯示與主機的主 IP 位址不同的 IP 位址?假設eth0IP 位址為 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 來重寫發送到此目的地的封包的來源位址。

相關內容