
問題
如果我在 iptable 規則上使用以下條件,會產生什麼效果?這和指定任何針對我自己的連接一樣嗎?
! -d 127.0.0.0/8 -p tcp -m addrtype --dst-type LOCAL
背景
具體來說,我使用它將主機上的連接埠(具有公共 IP,例如 150.200.30.40)重定向到我的 LXC 容器之一(具有 IP 10.0.3.202)。在我看來,這些規則對於在我的主機的公共 IP 位址上尋址的流量是等效的。
## IPTABLE RULE FOR INCOMING CONNECTIONS??
iptables -t nat -A PREROUTING ! -d 127.0.0.0/8 -m addrtype --dst-type LOCAL -p tcp --dport 2222 -j DNAT --to-destination 10.0.3.202:22
## EQUIVALENT RULE?? (for connections directed at 150.200.30.40)
iptables -t nat -A PREROUTING -d 150.200.30.40 -p tcp --dport 2222 -j DNAT --to-destination 10.0.3.202:22
答案1
在某些情況下,這兩者不相同。這就是原因(我不在這裡討論協定和連接埠等其他匹配):
- 當封包發送到本地位址(不包括 127.0.0.0 範圍)時,第一個規則會相符。
- 當封包發送到特定 IP 位址(如您提到的分配給這台機器)時,第二條規則會相符。
如果只有一個位址分配給這台機器,即 150.200.30.40,它們將是相同的。兩者都將匹配發送到不匹配 127.0.0.0 範圍的本地位址的資料包。
當至少有一個位址分配給除上述公用 IP 之外的任何介面(當然不包括特殊的私有範圍 127.0.0.0)時,它們將會有所不同。
如果提到的公共IP不是分配給本機的,那麼它們肯定是不同的。