两台Ubuntu 20.04服务器GRE隧道无法连通的问题排查及数据包追踪求助
你好,看了你在两台全新Ubuntu 20.04 VPS上配置GRE隧道后无法互通的情况,已经确认IP转发开启、本地防火墙关闭,配置步骤看起来也没问题,咱们一步步来排查可能的坑,同时教你怎么追踪数据包找到丢包点。
首先排查基础配置的正确性
1. 确认GRE内核模块是否正确加载
虽然你执行了modprobe ip_gre,但还是可以再验证一下:
- 在两台服务器上分别执行:
如果输出里没有lsmod | grep greip_gre的相关信息,说明模块加载失败,可以尝试重新执行sudo modprobe ip_gre,部分系统可能需要用sudo modprobe gre,试试不同的命令。
2. 检查GRE隧道接口状态
- 查看接口是否正常UP:
确认输出里有ip link show gre1UP状态标记,没有错误提示。 - 验证隧道地址配置:
确认ServerA上ip addr show gre110.0.0.1/30、ServerB上10.0.0.2/30的地址已经正确绑定到gre1接口。
3. 检查路由表是否存在隧道路由
配置完隧道地址后,系统应该自动生成针对10.0.0.0/30网段的路由,执行ip route查看,如果找不到这条路由,手动添加:
- ServerA上:
sudo ip route add 10.0.0.0/30 dev gre1 - ServerB上:
sudo ip route add 10.0.0.0/30 dev gre1
4. 重点排查VPS服务商的外部安全组
这是绝大多数GRE隧道失败的核心原因!虽然你关闭了本地防火墙,但很多VPS服务商(比如DigitalOcean、AWS、阿里云等)默认会通过外部安全组/防火墙屏蔽GRE协议(对应IP协议号47)。
- 登录到VPS服务商的控制面板,找到安全组规则,确保添加两条规则:
- 允许**IP协议47(GRE)**的入站、出站流量
- 允许
10.0.0.0/30网段的ICMP(ping)入站、出站流量
数据包追踪方法:定位丢包位置
如果上面的排查都没问题,就用工具追踪数据包的走向:
方法1:用tcpdump抓包验证GRE包传输
步骤1:在ServerA上抓公网接口的GRE流量
先通过ip addr确认你的公网接口名称(一般是eth0、ens3之类),然后执行:
sudo tcpdump -i eth0 proto gre
接着在ServerA上执行ping 10.0.0.2,看看tcpdump有没有输出GRE包:
- 如果没有输出:说明ServerA根本没发出GRE包,检查本地隧道配置或内核模块
- 如果有输出:切换到ServerB,用同样的命令抓公网接口的GRE流量,看是否能收到包
- 若ServerB没收到:问题出在公网层面,要么是服务商安全组屏蔽,要么是中间路由丢包
- 若ServerB收到了,但ping还是不通:再在ServerB上抓gre1接口的ICMP流量:
看是否有来自sudo tcpdump -i gre1 icmp10.0.0.1的ICMP请求包:- 有包但没回包:检查ServerB的IP转发或本地路由
- 没包:说明GRE包没被正确解封装到gre1接口,可能是隧道配置的本地/远程IP写错了
方法2:用mtr或traceroute追踪隧道内路径
mtr比tracert更直观,先安装(如果没装的话):
sudo apt install mtr
然后在ServerA上执行:
sudo mtr -i gre1 10.0.0.2
隧道内理论上只有一跳,如果显示100%丢包,说明数据包根本没进入隧道传输。
方法3:检查IP转发的全局配置
除了/proc/sys/net/ipv4/ip_forward,还要确认其他转发相关的参数:
sysctl -a | grep forwarding
确保net.ipv4.conf.all.forwarding和net.ipv4.conf.gre1.forwarding的值都是1,如果不是,临时设置:
sudo sysctl -w net.ipv4.conf.all.forwarding=1 sudo sysctl -w net.ipv4.conf.gre1.forwarding=1
另外提个小细节:Ubuntu 20.04里推荐用ip tunnel(注意空格)替代旧的iptunnel命令,虽然旧命令也能工作,但可以试试换成新命令重新配置隧道,比如ServerA上:
sudo ip tunnel add gre1 mode gre local 2.2.2.2 remote 3.3.3.3 ttl 255
优先排查服务商安全组的问题,这个是最常见的诱因!
备注:内容来源于stack exchange,提问作者PouJa




