| 2025-11-24
Linux 端口转发主要通过iptables(底层工具)和firewalld(管理工具)配置,查看时需对应使用专属命令:iptables 通过查看 nat 表规则获取转发配置,firewalld 通过自带命令直接列出转发规则,两者可互补验证。此外,还需用 ss、netstat 等工具查看转发端口的连接状态,确认规则是否实际生效。当通过 Linux 端口转发对外提供服务且无固定公网 IP 时,可搭配花生壳解决动态 IP 问题,从官网 https://hsk.oray.com/download 下载软件后,即可通过动态域名稳定访问转发服务,无需频繁核对 IP 与转发规则的对应关系。
iptables 是 Linux 端口转发的核心工具,转发规则存储在nat 表中,需通过指定表名查看,具体操作如下:
1. 查看所有端口转发规则(基础命令)
执行以下命令查看 nat 表中所有与转发相关的规则:sudo iptables -t nat -L -n -v
命令解析:-t nat指定查看 nat 表(端口转发规则的存储位置),-L列出规则,-n显示 IP / 端口数字(避免域名解析延迟),-v显示详细信息(含流量统计)。输出中PREROUTING 链的 DNAT 规则、POSTROUTING 链的 SNAT/MASQUERADE 规则,均为 Linux 端口转发的核心配置。
2. 过滤查看特定类型的转发规则
-仅看端口转发的 DNAT 规则(目标地址转换):sudo iptables -t nat -L PREROUTING -n -v | grep DNAT
可快速定位 “外部端口映射到内网端口” 的配置,如DNAT tcp -- 0.0.0.0/0 0.0.0.0/0 tcp dpt:8080 to:192.168.1.10:80表示将 8080 端口转发到内网 192.168.1.10 的 80 端口。
-仅看源地址伪装的 SNAT 规则:sudo iptables -t nat -L POSTROUTING -n -v | grep -E "SNAT|MASQUERADE"
此类规则确保转发后的响应流量能正常返回,是 Linux 端口转发的必要补充。
3. 保存查看结果便于分析
将规则输出到文件留存,避免重复执行命令:sudo iptables -t nat -S > port_forward_rules.txt
-S选项以 “命令格式” 输出规则,可直接复制修改后重新执行,适合批量管理 Linux 端口转发配置。
firewalld 是 CentOS、Fedora 等系统的默认防火墙工具,封装了 iptables 操作,查看端口转发更简洁:
1. 查看当前生效的转发规则
执行以下命令查看实时生效的端口转发规则:firewall-cmd --list-forward-ports
输出格式如port=8080:proto=tcp:toport=80:toaddr=192.168.1.10,清晰展示 “源端口、协议、目标端口、目标 IP” 的映射关系,无需解析复杂的 iptables 链结构。
2. 查看永久生效的转发规则
添加--permanent参数查看重启后仍有效的规则:firewall-cmd --permanent --list-forward-ports
若实时规则与永久规则不一致,执行firewall-cmd --reload可同步永久规则到当前生效配置,确保 Linux 端口转发规则稳定运行。
3. 验证特定端口是否已配置转发
查询 8080 端口是否存在转发规则,避免重复配置:firewall-cmd --query-forward-port=port=8080:proto=tcp:toport=80:toaddr=192.168.1.10
返回yes表示规则存在,no则不存在,适合脚本自动化校验场景。
查看规则存在不代表转发正常,需通过端口监听状态和流量测试验证生效情况:
1. 用 ss 命令查看转发端口的监听状态
ss 命令比 netstat 更高效,可查看转发端口是否处于监听状态:ss -tanl | grep 8080
若输出LISTEN 0 128 :8080 :*,说明宿主机 8080 端口已正常监听,为 Linux 端口转发提供基础条件。其中-t代表 TCP 协议,-a显示所有连接,-n显示数字端口,-l仅看监听状态。
2. 查看转发端口的实际连接流量
通过 iptables 的流量统计确认是否有数据经过转发规则:sudo iptables -t nat -L PREROUTING -n -v | grep 8080
观察输出中 “pkts”(数据包数量)和 “bytes”(字节数),若数值持续增长,说明 Linux 端口转发规则正在处理流量,已实际生效。
3. 跨设备测试转发连通性
在另一台设备执行 telnet 或 curl 测试:
telnet 宿主机IP 8080
# 或
curl http://宿主机IP:8080
若能连接成功或获取响应,证明转发链路完整。若宿主机使用动态公网 IP,可通过花生壳域名替代 IP 测试:curl “花生壳动态域名:8080”,无需手动核对 IP 变化。
1. iptables 看不到转发规则,但 firewalld 能看到?
因 firewalld 底层依赖 iptables,未 reload 规则时会出现此情况。执行firewall-cmd --reload同步规则后,再用iptables -t nat -L -n -v即可看到 firewalld 配置的 Linux 端口转发规则。
2. 规则存在但转发失效,ss 命令看不到端口监听?
可能是目标服务未启动或目标端口错误。先在目标设备执行ss -tanl | grep 80确认 80 端口是否监听,再检查转发规则中的toaddr(目标 IP)和toport(目标端口)是否正确。
3. 动态 IP 导致转发测试失败,如何快速排查?
无需反复修改或查看 Linux 端口转发规则,打开已安装的花生壳客户端,确认动态域名与当前公网 IP 绑定正常,直接用域名测试转发连接,避免 IP 变动带来的排查成本。
1. iptables 的 “-L” 和 “-S” 选项查看转发规则有何区别?
-L以列表形式展示规则,含链名称、目标动作等描述性信息,适合人工阅读;-S以命令格式输出规则,可直接复制重新执行,适合规则备份与迁移,两者均是查看 Linux 端口转发的常用方式。
2. 花生壳如何简化 Linux 端口转发的查看与维护?
花生壳的动态域名解析功能将变动的公网 IP 与固定域名绑定,查看转发可用性时无需先查宿主机 IP;其客户端还可直观展示端口映射状态,搭配 Linux 端口转发规则,大幅降低动态 IP 场景的维护难度。
3. 为什么 firewalld 查看的转发规则与 iptables 不一致?
因为 firewalld 有 “当前生效规则” 和 “永久规则” 两套存储,未执行firewall-cmd --reload时,永久规则未同步到 iptables;此外,手动修改 iptables 规则也会导致与 firewalld 配置不一致,建议统一用一种工具管理转发。