2014-09-28 58 views
0

我有一臺帶有3個接口的機器,兩個公共接口和一個本地接口。它們都來自相同的IP範圍。機器上的所有可從外部訪問的服務都使用內部IP。在Linux下分配一臺機器IP

但是,當進程打開與外部世界的連接時,數據包中的源地址將設置爲將用於發送數據包的公共接口的源地址。

Linux下是否有可能強制所有源地址成爲特定接口的源地址,即使數據包會通過其他接口路由?

假設我們有一臺帶有3個接口的機器,A.B.C.1,A.B.C.2,A.B.C.3。這些A.B.C.1和A.B.C.2連接到互聯網(並且A.B.C.0/24被路由到它們)。機器上的所有服務都聽A.B.C.3。是否可以保證來自機器的所有數據包將具有A.B.C.3的源地址,即使它們將通過A.B.C.1或A.B.C.2離開機器?

打開傳出連接的套接字時指定源地址不是解決方案;我們正在談論無法改變的現有程序。此外,它也應該適用於ICMP。

謝謝。

回答

0

這可以用iptables實現:

sudo iptables -t nat -A OUTPUT -j SNAT --to A.B.C.3 

如果iptables服務沒有運行,它可以通過下面的命令來激活:

sudo service iptables restart 
+0

謝謝,我會來挖成。但是,在A.B.C.3中,還有其他物理上不同的機器使用A.B.C. *範圍內的其他地址。我不希望他們的傳出數據包被翻譯。也就是說,如果A.B.C.9上的機器使用A.B.C.3的默認路由,我希望它的數據包保留爲A.B.C.9,那麼只有具有3個接口的機器應該被強制使用A.B.C.3作爲所有的輸出數據包。我想我需要深入研究iptables(作爲防火牆是活躍的)和NAT表(我從未使用過)。 – Zoltan 2014-09-28 21:34:08

+0

然後使用'OUTPUT'鏈代替。看到我更新的答案。 – Yoel 2014-09-28 21:43:53