要在 linux 上用 firewalld 实现端口转发,必须依次完成四步:开启 ipv4 转发、启用 ip 伪装、添加 forward-port 规则、放行入口及目标端口。

要在 Linux 上用 firewalld 把外网或本机收到的流量转发到内网其他机器,核心不是“开个端口”,而是打通一条完整的网络路径:数据能进来、能改目标、能发出去、还能顺利回包。
必须开启 IPv4 转发
这是底层前提。没有它,包进得来但回不去,连接会卡在 SYN_RECV 或直接超时。
- 临时生效:sudo sysctl -w net.ipv4.ip_forward=1
- 永久生效:往 /etc/sysctl.conf 追加 net.ipv4.ip_forward = 1,再运行 sudo sysctl -p
- 验证:执行 sysctl net.ipv4.ip_forward,返回 1 表示成功
为对应区域启用 IP 伪装(Masquerade)
让内网机器回包时,源地址变成防火墙本机 IP,否则外网客户端收不到响应。
Linux AI 服务器 — 将 Linux 服务器转换为本地 AI 推理集群。使用 systemd、NVIDIA CUDA 实现无头 Linux AI,零 GUI 开销。
- 查当前活跃 zone:sudo firewall-cmd --get-active-zones(常见是 public)
- 启用伪装:sudo firewall-cmd --permanent --zone=public --add-masquerade
- 确认已启用:sudo firewall-cmd --query-masquerade --zone=public 应返回 yes
添加带目标地址的转发规则
指定从哪来、走什么协议、转到哪台机器的哪个端口。
- 把公网服务器的 8080 端口 TCP 流量,转给内网机器 192.168.10.5 的 8081 端口:
sudo firewall-cmd --permanent --zone=public --add-forward-port=port=8080:proto=tcp:toport=8081:toaddr=192.168.10.5 - 如需同时支持 UDP:
sudo firewall-cmd --permanent --zone=public --add-forward-port=port=8080:proto=udp:toport=8081:toaddr=192.168.10.5 - 注意:toaddr 必须是真实可达的内网 IP,不能写 127.0.0.1 或 localhost
别忘了放行入口端口和检查目标机器
firewalld 只管转发,不自动放行流量;内网机器自身也得允许该端口通信。
- 在公网服务器上放行外网入口端口(比如 8080):
sudo firewall-cmd --permanent --add-port=8080/tcp - 确保内网目标机器(如 192.168.10.5)的防火墙(firewalld/ufw)已放行对应端口(如 8081/tcp)
- 最后重载配置:sudo firewall-cmd --reload
- 验证规则是否生效:sudo firewall-cmd --list-all --zone=public,查看 forward-ports: 下是否有你加的条目










