排查路由转发需同时满足:内核ip_forward=1、FORWARD链规则匹配实际in/out接口、云平台安全组及默认策略放行——三者缺一不可。

排查防火墙拦截路由转发,关键不是看 INPUT 或 OUTPUT 链,而是聚焦 FORWARD 链是否放行、内核转发是否开启、规则是否匹配实际路径——三者缺一不可。
确认内核 IP 转发已启用
Linux 默认关闭 IP 转发,即使防火墙规则全开,转发也会静默失败:
- 运行 sysctl net.ipv4.ip_forward,返回 1 才表示开启;返回 0 就是根本没转发能力
- 临时启用:echo 1 > /proc/sys/net/ipv4/ip_forward
- 永久生效:在 /etc/sysctl.conf 中添加 net.ipv4.ip_forward = 1,再执行 sysctl -p
检查 FORWARD 链规则是否匹配流量方向
多网卡环境下,FORWARD 规则必须明确指定 in-interface 和 out-interface,不能只靠源目地址:
- 查当前规则:sudo iptables -L FORWARD -n -v --line-numbers(看包计数是否增长)
- firewalld 用户运行:firewall-cmd --list-all --zone=external(若用 external 区域做网关),重点看 forward 和 masquerade 是否启用
- 常见错误:只写了 -s 192.168.10.0/24 -j ACCEPT,但没限定 -i eth1 -o eth2,导致规则不命中
验证流量是否真正进入 FORWARD 链
用 tcpdump 和 conntrack 交叉判断数据包是否到达并被丢弃:
- 在接收网卡抓包:sudo tcpdump -i eth1 -nn port 80,确认客户端 SYN 已到达本机
- 在发出网卡抓包:sudo tcpdump -i eth2 -nn port 80,若无任何包,说明 FORWARD 链未放行或被 DROP
- 查连接跟踪:sudo conntrack -L | grep "src=192.168.10.5" | head -5,若状态为 [UNREPLIED] 且无后续,大概率被 FORWARD 链静默丢弃
排除云平台与默认策略干扰
云服务器需同步检查两层防护,本地规则还受默认策略制约:
- 阿里云/腾讯云控制台中,确认安全组已放行对应端口的 入方向 和 出方向(转发场景两者都要)
- iptables 中查看 FORWARD 默认策略:sudo iptables -S FORWARD,若显示 -P FORWARD DROP,而你又没加 ACCEPT 规则,所有转发都会被拦
- firewalld 中 public 区域的 target 默认是 default(等效 DROP),不是 ACCEPT;建议为转发专用区域设 target=ACCEPT



















