firewalld的masquerade本质是IPv4下的源NAT,需将外网接口加入external区域、启用masquerade并reload,同时开启内核IP转发、配置内网接口区域及客户端网关。

firewalld 的地址伪装(masquerade)本质是 IPv4 下的源地址 NAT,让内网主机通过防火墙出口共享一个公网 IP 上网。它不依赖具体 IP 段,而是作用于整个区域的出向流量,启用后所有匹配该区域的转发流量都会自动做 SNAT。
确认区域与网络接口归属
地址伪装必须在明确分配了外网接口(如 ens38、eth0)的区域上启用,通常用 external 区域 —— 它默认已开启伪装,但需确认实际配置:
- 查看当前活跃区域及对应接口:
firewall-cmd --get-active-zones - 检查 external 区域是否真有外网接口:
firewall-cmd --zone=external --list-interfaces - 若外网接口不在 external,先将其加入:
firewall-cmd --zone=external --add-interface=ens38
启用与持久化地址伪装
临时启用(重启 firewalld 后失效):firewall-cmd --zone=external --add-masquerade
Linux 性能分析与调优专家,覆盖 CPU、内存、磁盘 I/O、网络、内核参数、编译优化、容器/K8s。适用场景:系统卡顿/高负载、内存不足/OOM/Swap 高、CPU 异常/iowait 高。
永久启用(写入配置,推荐):firewall-cmd --permanent --zone=external --add-masquerade
执行后必须重载规则:firewall-cmd --reload
- 验证是否生效:
firewall-cmd --zone=external --query-masquerade(返回yes即成功) - 如需限时启用(例如测试),可加
--timeout=300(单位秒) - 注意:仅对 IPv4 生效;IPv6 不支持 masquerade,需用其他机制如 NDP 或静态路由
确保内核转发与区域间信任关系
地址伪装只是“改源地址”,真正转发还需系统允许 IP 转发,且流量要能进入 external 区域:
- 开启内核转发:
echo 'net.ipv4.ip_forward = 1' >> /etc/sysctl.conf && sysctl -p - 内网接口(如 ens33)应分配到 trusted 或 internal 区域,这些区域默认允许转发进 external
- 若内网在 public 区域,需显式放行转发:
firewall-cmd --permanent --zone=public --add-masquerade(不推荐,安全性较低)
常见问题排查要点
伪装配置正确但内网仍无法上网,重点查:
- 外网接口是否确实在 external 区域(
firewall-cmd --zone=external --list-all) - 内核转发是否开启(
sysctl net.ipv4.ip_forward返回 1) - 内网主机默认网关是否指向防火墙内网 IP(如 192.168.1.1)
- 是否有其他防火墙(如 iptables 规则或云平台安全组)拦截了回程流量

















