2013-02-15 87 views
7

我試圖將所有傳入的TCP數據包轉發到多個IP地址。克隆和轉發數據包到多個IP地址

設置:

A - 10.10.10.10 
B - 10.10.10.11 
C - 10.10.10.12 
D - 10.10.10.13 

我想要B,C和d接收(在端口8000)的所有傳入的數據包上的端口12345。理想情況下,我希望A做到這一點。

我可以轉發到一臺機器上一個這樣的規則:

iptables -t nat -A PREROUTING -p tcp --dport 12345 -j REDIRECT --to 10.10.10.11:8000 

我也可以使用TEE選項克隆包:

iptables -t mangle -A PREROUTING -p tcp --dport 8000 -d 10.10.10.11 -j TEE --gateway 10.10.10.12 

到目前爲止,一切都還好。問題是C將收到目的地IP爲B而不是C的數據包。此外,我不知道如何轉發到D和/或更多其他目的地。

我該如何使用iptables規則將端口12345上的所有傳入數據包發送到所有其他機器(B,C和D)到端口8000?

回答

0

你必須使用POSTROUTING:

iptables -t nat -A POSTROUTING -p tcp --dports 8080 -j SNAT --to-source 10.10.10.12 

,但你需要找到一種方法來區分哪些數據包是B或C否則他們將所有C的IP它應該做到貨界面如果你有不同的界面;我想它的情況下更改網關的話,是這樣的:

iptables -t nat -A POSTROUTING -o eth3 -p tcp --dports 8080 -j SNAT --to-source 10.10.10.12 

所以只包傳出到接口的eth3,成像它的路由路徑C,將目標IP更改爲C的IP。