如何使用 iptables 对两个接口进行端口转发?

如何使用 iptables 对两个接口进行端口转发?

我有一个带有两个接口 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 $LAN从 INPUT 中删除时它才起作用。我的意思是这样:

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 上,这不是我想要的。我的错误是什么?

答案1

我得到了答案俄罗斯Linux论坛

iptables -t mangle -A PREROUTING -i $WAN -p tcp --dport 777 -j MARK --set-mark 0x1234
iptables -t nat -A PREROUTING -p tcp -i $WAN --dport 777 -j DNAT --to-destination 192.168.0.1:80
iptables -A INPUT -m mark --mark 0x1234 -j ACCEPT

相关内容