Iptables
如何將 DNAT 限制為僅一個公共 IP?
在單個網路介面上具有多個公共 IP的管理程序上,有兩組虛擬機。
- A 組成員通過主機介面(通過設置路由的網橋)直接將其公共 IP 路由給他們。$$ 1 $$
- B 組成員位於具有 NAT 配置的網橋上,因此他們獲得私有 IP,並且他們的連接通過一個特定的公共 IP 進行 NAT。我們稱之為共享地址
IPb
。$$ 2 $$對於
IPb
某些埠上的傳入連接,將轉發給某些 B 組成員。我遇到的問題是 DNAT(埠轉發)規則不僅適用於傳入的數據包IPb
,而且來自任何其他公共 IP。如何將 DNAT 規則限制為特定於僅定向到的數據包
IPb
?我嘗試
-dst
*IPb
*了PREROUTING
規則,但這實際上導致規則根本沒有被觸發(埠轉發停止)。$$ 3 $$ 謝謝
[1] auto eth0 iface eth0 inet static address <eth0-main-ip>/32 gateway <gateway-ip> pointopoint <gateway-ip> #GroupA Bridge: auto vmbr12 iface vmbr12 inet static address <eth0-main-ip>/32 bridge-ports none bridge-stp off bridge-fd 0 up ip route add <Public-IPa>/32 via <eth0-main-ip> dev vmbr12 down ip route del <Public-IPa>/32 via <eth0-main-ip> dev vmbr12 . . .
[2] #GroupB Bridge: auto vmbr4 iface vmbr4 inet static address 10.0.0.1/16 bridge-ports none bridge-stp off bridge-fd 0 post-up echo 1 > /proc/sys/net/ipv4/ip_forward post-up iptables -t nat -A POSTROUTING -s '10.0.0.0/16' -o eth0 -j MASQUERADE post-up iptables -A PREROUTING -t nat -i eth0 -p tcp --dport 22 -j DNAT --to 10.0.101.1:22 post-up iptables -A FORWARD -p tcp -d 10.0.101.1 --dport 22 -j ACCEPT post-down iptables -t nat -D POSTROUTING -s '10.0.0.0/16' -o eth0 -j MASQUERADE post-down iptables -D PREROUTING -t nat -i eth0 -p tcp --dport 22 -j DNAT --to 10.0.101.1:22 post-down iptables -D FORWARD -p tcp -d 10.0.101.1 --dport 22 -j ACCEPT . . .
[3] #Using IPb in PREROUTING rule <snip> post-up iptables -t nat -A POSTROUTING -s '10.0.0.0/16' -o eth0 -j MASQUERADE post-up iptables -A PREROUTING -t nat -i eth0 -p tcp -dst IPb --dport 22 -j DNAT --to 10.0.101.1:22 post-up iptables -A FORWARD -p tcp -d 10.0.101.1 --dport 22 -j ACCEPT post-down iptables -t nat -D POSTROUTING -s '10.0.0.0/16' -o eth0 -j MASQUERADE post-down iptables -D PREROUTING -t nat -i eth0 -p tcp -dst IPb --dport 22 -j DNAT --to 10.0.101.1:22 post-down iptables -D FORWARD -p tcp -d 10.0.101.1 --dport 22 -j ACCEPT </snip>
我在 PREROUTING 規則中嘗試了 -dst IPb,但這實際上導致該規則根本沒有被觸發(埠轉發停止)。
$$ 3 $$
原來這是正確的方法,但是:條目
IPb
必須包含子網長度。在這種情況下,我只是使用IPb/32
它,它應該可以正常工作。