firewalld的masquerade本质是IPv4源地址转换(SNAT),用于内网共享外网IP上网:需启用内核IP转发、外网接口加入external zone、执行permanent添加masquerade并reload,同时放行FORWARD链相关流量。

firewalld 的 masquerade 功能本质是 IPv4 源地址转换(SNAT),用于让内网主机通过 Linux 网关共享一个外网 IP 上网。它自动替换数据包源地址,无需手动写 iptables 规则,但必须满足几个关键前提才能生效。
确保内核 IP 转发已启用
这是最常被忽略的一步——没有它,所有 NAT 配置都无效。
- 临时开启:
echo 1 > /proc/sys/net/ipv4/ip_forward - 永久生效:编辑
/etc/sysctl.conf,添加或取消注释这一行:net.ipv4.ip_forward = 1,然后运行sysctl -p
正确分配网络接口到对应 zone
firewalld 的 masquerade 行为与 zone 绑定,不是全局开关。
Linux系统管理专家,覆盖12大模块:用户权限、SSH、存储、网络、systemd、防火墙、日志监控、备份恢复、TLS证书、Ansible、容器、IaC。提供配置、验证、加固、监控、备份、自动化、故障排查、回滚闭环。关键词:useradd、sudo、sshd_config、chmod、SEL...
- 外网接口(如
ens36)必须加入 external zone ——只有这个 zone 默认允许 masquerade
命令:firewall-cmd --permanent --zone=external --add-interface=ens36 - 内网接口(如
ens160)推荐加入 internal zone ——它默认放行来自内网的入向连接,比 trusted 更安全
命令:firewall-cmd --permanent --zone=internal --add-interface=ens160 - 验证接口归属:
firewall-cmd --get-zone-of-interface=ens36
在 external zone 中启用 masquerade 并重载配置
只执行 --add-masquerade 不加 --permanent 是临时操作,重启或 reload 后失效。
- 启用伪装:
firewall-cmd --permanent --zone=external --add-masquerade - 重载使配置生效:
firewall-cmd --reload - 确认是否成功:
firewall-cmd --zone=external --query-masquerade应返回yes
补充必要规则:放行 FORWARD 链
即使 masquerade 开启,如果 filter 表的 FORWARD 链默认拒绝,流量仍会被拦住。
- 放行内网→外网流量:
firewall-cmd --permanent --direct --add-rule ipv4 filter FORWARD 0 -i ens160 -o ens36 -j ACCEPT - 放行外网→内网响应流量(状态跟踪):
firewall-cmd --permanent --direct --add-rule ipv4 filter FORWARD 1 -i ens36 -o ens160 -m state --state RELATED,ESTABLISHED -j ACCEPT - 执行后同样需
firewall-cmd --reload
配置完成后,内网主机需将网关设为该 Linux 服务器的内网 IP,并确保 DNS 可用。只要外网接口能通、IP 转发开启、zone 和 masquerade 匹配、FORWARD 放行,NAT 就能正常工作。

















