Linux

如何使用 iptables 使用兩個介面進行埠轉發?

  • February 15, 2020

我有一個帶有兩個介面 wan 和 lan(192.168.0.1) 的 debian 盒子。在 lan:80 我有一個必須從本地網路訪問的站點。我還需要從 wan:777 訪問這個站點。這是我的 iptables 規則:

iptables -A INPUT -i $LAN -p tcp --dport 80 -j ACCEPT
iptables -t nat -A PREROUTING -p tcp -i $WAN --dport 777 -j DNAT --to-destination 192.168.0.1:80
iptables -A FORWARD -p tcp -d 192.168.0.1 --dport 80 -m state --state NEW,ESTABLISHED,RELATED -j ACCEPT

但是,它不起作用。僅當我從-i $LANINPUT 中刪除時它才有效。我的意思是這樣:

iptables -A INPUT -p tcp --dport 80 -j ACCEPT
iptables -t nat -A PREROUTING -p tcp -i $WAN --dport 777 -j DNAT --to-destination 192.168.0.1:80
iptables -A FORWARD -p tcp -d 192.168.0.1 --dport 80 -m state --state NEW,ESTABLISHED,RELATED -j ACCEPT

但是,這是一個不好的方法,因為站點現在也在 wan:80 上,這不是我想要的。我的錯誤是什麼?

你可以試試 iptables -A INPUT -d 192.168.0.1 -p tcp --dport 80 -j ACCEPT

這是錯誤的使用方式 iptables -A INPUT -i $LAN -p tcp --dport 80 -j ACCEPT

如果網路伺服器正在偵聽埠 80,那麼您需要在 INPUT 鏈上啟用該埠。如果不允許到達目標埠,NAT 是不夠的,這就是如果您不限制源介面它可以工作的原因。

由於目的地相同,您不能在 WAN:777 埠上定義另一個虛擬主機嗎?

引用自:https://unix.stackexchange.com/questions/566251