2017年2月

本文采用知识共享 署名-相同方式共享 4.0 国际 许可协议进行许可。
访问 https://creativecommons.org/licenses/by-sa/4.0/ 查看该许可协议。

示例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
Title - Artist
0:00