GRE在Linux中被识别为IP协议号4,需用-p 4匹配;iptables用-I INPUT -p 4放行,firewalld需--add-protocol=gre并重载;云安全组须手动设协议号4,不可选“GRE”选项。

确认GRE协议在Linux防火墙中的识别方式
Linux内核将GRE识别为IP协议号4,不是TCP或UDP端口,iptables/firewalld不会按“端口号”匹配它,必须用-p 4显式指定协议类型。
这一步不能跳过:若误以为GRE走UDP 47端口(实际是老式Cisco GRE over UDP封装,Linux原生GRE不走端口),配置将完全失效。
iptables放行GRE流量(传统方案)
方法一:直接允许协议号4的入向流量
执行:sudo iptables -I INPUT -p 4 -j ACCEPT
注意:-I参数确保规则插入最前,避免被后续DROP规则拦截;若用-A则可能因策略顺序导致丢包。
方法二:限制来源IP增强安全性
执行:sudo iptables -I INPUT -p 4 -s 192.168.91.130 -j ACCEPT
替换192.168.91.130为对端隧道公网IP;此写法可防止非隧道节点伪造GRE报文冲击本机。
保存规则(CentOS 6/7):sudo service iptables save 或 sudo iptables-save > /etc/sysconfig/iptables
firewalld放行GRE(RHEL/CentOS 8+、Fedora主流方案)
第一步:检查当前默认区域
sudo firewall-cmd --get-default-zone
第二步:向默认区域永久添加GRE协议支持
sudo firewall-cmd --permanent --add-protocol=gre
【必须加--permanent参数】否则重启firewalld服务后规则丢失。
第三步:重载配置生效
sudo firewall-cmd --reload
验证是否成功:sudo firewall-cmd --list-all | grep gre,输出应含protocols: gre
云服务器额外检查项:安全组同步放行
阿里云/腾讯云/AWS等平台中,即使Linux防火墙已放行,云平台安全组仍会拦截GRE流量。
登录控制台 → 找到对应ECS实例 → 进入安全组 → 编辑入方向规则 → 添加新规则:
类型选“自定义协议”,协议类型填4,源IP填对端公网IP/网段,端口范围留空(GRE无端口概念)。
⚠️ 常见错误:在安全组里选择“GRE”下拉选项——多数云厂商未提供该选项,必须手动输入协议号4。











