
我們有 3 台 PC,其中兩台連接到網路(兩台都有 2 個網路卡)
電腦1:
eth0 - 1.0.0.1 (external IP)
eth1 - 172.16.0.1 (internal IP)
電腦2:
eth0 - 1.0.0.2 (external IP)
eth1 - 172.16.0.2 (internal IP)
電腦3:
eth0 - 172.16.0.3 (internal IP)
現在我們要將連接埠 80 從 PC1 和 PC2 轉送到 PC3。
但有一個問題:iptables 連接埠轉送在 PC1 或 PC2 上運作良好,但僅限於 PC3 將 PC1 或 PC2 作為網關的情況。
IPtables 規則(針對 PC1):
iptables -t nat -A PREROUTING -p tcp -d 1.0.0.1 --dport 80 -j DNAT --to-destination 172.16.0.3:80
iptables -A FORWARD -p tcp -d 172.16.0.3 --dport 80 -j ACCEPT
因此,問題是:無論 PC3 上的網關設定如何,我們都可以從 PC1 和 PC2 進行連接埠映射嗎?
先感謝您。
答案1
您只是重寫了目的地。
需要將來源位址改為PC1或PC2,這樣回覆封包也可以進行NAT轉換。並且您需要更改目標位址,以便封包將發送至 PC3。重寫來源和目標稱為“雙 NAT”。
您需要在 PREROUTING 鏈中進行 DNAT,在 POSTROUTING 鏈中進行 SNAT。像這樣(對於 PC1):
iptables -t nat -A PREROUTING -p tcp -m tcp -d 1.0.0.1 --dport 80 -j DNAT \
--to-destination 172.16.0.3:80
iptables -t nat -A POSTROUTING -p tcp -m tcp -d 172.16.0.3 --dport 80 \
-j SNAT --to-source 172.16.0.1
答案2
為 PC3 提供另一個 IP 位址,並在 PC1 和 PC2 中使用 DNAT 規則到 PC3 的不同 IP 位址。
在PC3上使用「ip規則」按來源IP位址進行路由,如下所示:http://lartc.org/howto/lartc.rpdb.multiple-links.html