在Rocky Linux 9中通过firewalld配置端口映射(DNAT)需遵循以下实战经验:
-
基础准备
- 确认firewalld状态:
systemctl status firewalld
- 启用IP伪装(NAT前置条件):
firewall-cmd --permanent --zone=public --add-masquerade
- 确认firewalld状态:
-
端口映射(示例将外部80映射到192.168.10.20:8080)
firewall-cmd --permanent --zone=public \ --add-rich-rule='rule family=ipv4 forward-port port=80 protocol=tcp to-port=8080 to-addr=192.168.10.20'
-
重载配置:
firewall-cmd --reload
常见挑战及解决方案:
- 转发失败:检查
net.ipv4.ip_forward=1
(/etc/sysctl.conf) - 规则不持久化:必须使用--permanent参数并reload
- SELinux拦截:临时
setsebool -P zebra_write_config 1
- 物理/虚拟交换机限制:检查网桥设备的firewalld zone绑定
- 多网卡路由:推荐配合策略路由工具(iproute2)使用
验证方法:
- 抓包验证:
tcpdump -ni [接口名] port 80
- 外部测试:
curl -I http://公网IP
- 规则检查:
firewall-cmd --list-rich-rules