Linux使用firewall-cmd端口转发需同时满足三个条件:开启IPv4转发(echo 1 > /proc/sys/net/ipv4/ip_forward并持久化)、启用masquerade(firewall-cmd --add-masquerade --permanent)、添加--add-forward-port规则(如port=80:proto=tcp:toaddr=192.168.0.100:toport=80),三者缺一不可。

在 Linux 系统中,使用 firewall-cmd 配置端口的直接转发(即端口转发),需要同时满足三个基础条件:开启内核 IP 转发、启用防火墙伪装(masquerade)、添加正确的转发规则。缺一不可,否则流量无法成功转发。
确认并开启 IPv4 转发
端口转发依赖内核的网络层转发能力,必须显式启用:
- 临时生效(重启失效):
echo 1 > /proc/sys/net/ipv4/ip_forward - 永久生效:向
/etc/sysctl.conf追加配置并重载echo "net.ipv4.ip_forward = 1" >> /etc/sysctl.conf && sysctl -p
启用伪装(Masquerade)
转发到非本机地址(尤其是跨网段或外部主机)时,必须开启伪装,否则响应包无法正确返回:
在无 root/sudo 权限的环境(云容器、VPS、隔离主机)中安装并配置 OpenClaw 浏览器工具的 headless Chrome。适用场景:...
- 检查是否已启用:
firewall-cmd --query-masquerade - 启用(默认 zone 为 public,如需指定 zone 请加
--zone=xxx):firewall-cmd --add-masquerade --permanent - 重载使永久规则生效:
firewall-cmd --reload
添加端口转发规则
使用 --add-forward-port 添加转发策略,注意区分三种常见场景:
-
本机端口映射(如 80 → 8080):
firewall-cmd --add-forward-port=port=80:proto=tcp:toport=8080 --permanent -
转发到另一台内网主机(如 80 → 192.168.0.100:80):
firewall-cmd --add-forward-port=port=80:proto=tcp:toaddr=192.168.0.100:toport=80 --permanent -
仅指定目标 IP,不指定端口(复用源端口):
firewall-cmd --add-forward-port=port=2222:proto=tcp:toaddr=192.168.0.100 --permanent
所有规则务必加 --permanent 保存为持久化配置,并执行 firewall-cmd --reload 生效。
验证与排错要点
转发失败时,按顺序检查以下几项:
- 目标服务是否真实监听对应端口?用
ss -tlnp | grep :端口号确认 - 源端口和目标端口是否已在防火墙放行?例如转发 80→8080,需确保 80 和 8080 均开放(或至少目标端口开放)
- 是否遗漏
--permanent?临时添加的转发规则重启后会丢失 - 是否在正确 zone 下操作?可显式指定
--zone=public避免误用默认 zone - 云服务器还需检查安全组(如阿里云、AWS)是否放行源端口

















