
我想將所有連接埠從我的客戶端(Windows)轉送到網關(Linux)後面的伺服器(Windows)。
我的網路拓撲如下所示:
10.20.10.14 --> 10.20.10.4 --> 192.168.1.1 --> 192.168.1.4
client ppp0 eth0 server
|--------- Gateway -------|
其中網關設備有兩個網路設備:ppp0 和 eth0。
我希望在客戶端與 ppp0 之間存在網路連線的情況下,伺服器裝置將在與客戶端發送的資料相同的連接埠上看到資料。
換句話說,伺服器應該認為它直接與客戶端通信,並且在這種情況下網關是透明的。
另外我想知道如何刪除這個規則。
有任何想法嗎?
備註:我是所有設備的管理員。
答案1
將英文規則翻譯成iptables規則,只需要這條規則:
iptables -t nat -A PREROUTING -s 10.20.10.14 -i ppp0 -j DNAT --to-destination 192.168.1.4
目標連接埠不會改變(且來源連接埠也不應該改變,除非客戶端同時直接連接到伺服器的極少數情況)。
192.168.1.4
沒有什麼可以阻止客戶端手動新增到via的路由10.20.10.4
並直接存取伺服器。如果您不希望這樣做,為了隱藏伺服器的IP,您也可以新增以下規則:
iptables -I FORWARD -s 10.20.10.14 -i ppp0 -d 192.168.1.4 -m conntrack ! --ctstate DNAT -j DROP
這將阻止對未 DNAT 的伺服器的直接存取。
要刪除這些規則,只需使用-D
:
iptables -D FORWARD -s 10.20.10.14 -i ppp0 -d 192.168.1.4 -m conntrack ! --ctstate DNAT -j DROP
iptables -t nat -D PREROUTING -s 10.20.10.14 -i ppp0 -j DNAT --to-destination 192.168.1.4
隨機備註:
- 由於 DNATed 連線被轉發,因此必須在網關上啟用 IP 轉送。最容易做到這一點的是
echo 1 > /proc/sys/net/ipv4/ip_forward
。 - 伺服器當然需要一條到客戶端的路由來接受其連接,例如將 Gateway (
192.168.1.1
) 作為預設網關。 -i ppp0
-d 10.20.10.4
是可選的,可以刪除(或者如果願意,可以在 PREROUTING 規則中替換)。如果不替換為-i ppp+
(+
作為通配符),它可能會導致問題:當出現快速連結故障/重新連接時,ppp1
如果ppp0
之前沒有斷開,則可能會呼叫新的 ppp 介面。 iptables 規則將不再符合。- 當 DNAT 規則被刪除時,已經建立的串流不會受到影響,新的串流將會受到影響(即不會到達伺服器)。