Iptables

iptables DNAT 路由:指具有多個 IP 地址的目標主機

  • April 15, 2018

我希望將所有發往埠 3389 上的主機的 TCP 和 UDP 數據包路由到網路上的不同地址。主機是託管這些 iptables 的電腦。

從這個開始,看起來並沒有那麼糟糕,不過,將 TCP 和 UDP 合併到一個規則中會很好:

*nat
-A PREROUTING -i ens1 -d 10.58.0.1 -p tcp -m tcp --dport 3389 -j DNAT --to-destination 172.20.0.201
-A PREROUTING -i ens1 -d 10.58.0.1 -p udp -m udp --dport 3389 -j DNAT --to-destination 172.20.0.201
COMMIT

但是,大約有 5 個介面需要被允許執行此操作,而其他幾個則不需要。好的,那麼,讓我們開始工作:

*nat
-A PREROUTING -i ens1 -d 10.58.0.1 -p tcp -m tcp --dport 3389 -j DNAT --to-destination 172.20.0.201
-A PREROUTING -i ens1 -d 10.58.0.1 -p udp -m udp --dport 3389 -j DNAT --to-destination 172.20.0.201
-A PREROUTING -i tun0 -d 10.58.0.1 -p tcp -m tcp --dport 3389 -j DNAT --to-destination 172.20.0.201
-A PREROUTING -i tun0 -d 10.58.0.1 -p udp -m udp --dport 3389 -j DNAT --to-destination 172.20.0.201
-A PREROUTING -i tun1 -d 10.58.0.1 -p tcp -m tcp --dport 3389 -j DNAT --to-destination 172.20.0.201
-A PREROUTING -i tun1 -d 10.58.0.1 -p udp -m udp --dport 3389 -j DNAT --to-destination 172.20.0.201
-A PREROUTING -i tun2 -d 10.58.0.1 -p tcp -m tcp --dport 3389 -j DNAT --to-destination 172.20.0.201
-A PREROUTING -i tun2 -d 10.58.0.1 -p udp -m udp --dport 3389 -j DNAT --to-destination 172.20.0.201
-A PREROUTING -i tun3 -d 10.58.0.1 -p tcp -m tcp --dport 3389 -j DNAT --to-destination 172.20.0.201
-A PREROUTING -i tun3 -d 10.58.0.1 -p udp -m udp --dport 3389 -j DNAT --to-destination 172.20.0.201
COMMIT

哦,但是等等,主機有 6 個不同的可能 IP 地址,所以現在我必須用不同的目標重複該規則塊 6 次,這些目標實際上都指向同一個主機。這將總共需要 60 個脆性條目。肯定有更好的辦法。

問題:如何通用引用主機?而不是說:

-d <ip address>

…並無數次重複那句話,我寧願說:

-d <catch-all for anything destined to this computer>

在我看來,將此 DNAT 規則應用於 INPUT 鏈更有意義,但由於我無法理解的原因,INPUT 鏈似乎只接受 SNAT 規則。所以,除非有人知道得更好,否則我會被困在 NAT PREROUTING 中。

謝謝並恭祝安康

似乎有一種方法可以引用我不知道的所有本地事物,直到我不小心在其他地方遇到它。

-A PREROUTING -m addrtype --dst-type LOCAL -j DEST-LOCAL

上面的規則將重定向顯然注定要輸入 INPUT 鏈的所有內容,這正是我正在尋找的內容。這些數據包現在可以根據它們被發送到的新鏈重定向到其他地方。本質上,在那個 DEST-LOCAL 鏈中,只有來自允許的介面的數據包才會被接受。

如果您不需要通過傳入介面名稱限制流量,那麼您可以使用

-A PREROUTING -d 10.58.0.1 -p tcp -m tcp --dport 3389 -j DNAT --to-destination 172.20.0.201
-A PREROUTING -d 10.58.0.1 -p udp -m udp --dport 3389 -j DNAT --to-destination 172.20.0.201

然後將此與ipset功能結合起來,您只有兩行。iptables 多個源 IP具有有關該ipset功能的資訊。

引用自:https://serverfault.com/questions/905187