示例80 to 8080


一开始Firewalld配置为
firewall-cmd --add-forward-port=port=80:proto=tcp:toport=8080
本机无法正常转发,外网局域网访问正常。
原因:

firewalld使用iptables nat PREROUTING链来实现转发端口。
该链不用于回送通过接口发送的数据包,因为回送的数据包不应被路由。

而本机产生的数据包由NAT表的OUTPUT链处理。但是,Firewalld转发暂时不支持OUTPUT,目前解决办法为使用--direct规则将规则添加到OUTPUT链

firewall-cmd --permanent --add-forward-port=port=80:proto=tcp:toport=8080
firewall-cmd --permanent --direct --add-rule ipv4 nat OUTPUT 0 -p tcp -o lo --dport 80 -j REDIRECT --to-ports 8080
firewall-cmd --permanent --direct --add-rule ipv6 nat OUTPUT 0 -p tcp -o lo --dport 80 -j REDIRECT --to-ports 8080
firewall-cmd --reload