使用GRE协议可在Linux主机间建立三层隧道,需依次完成:加载ip_gre内核模块、两端配置镜像隧道接口并分配IP、添加静态路由指向对端网段、最后验证连通性及GRE封装。

如果您希望在两个Linux主机之间建立点对点的三层隧道以实现跨网络通信,则可以使用GRE(Generic Routing Encapsulation)协议进行封装。以下是完成GRE隧道配置的具体步骤:
一、确认内核支持并加载GRE模块
Linux内核需具备GRE协议支持,多数现代发行版默认启用,但需验证模块是否已加载。若未加载,需手动插入内核模块以启用GRE功能。
1、执行命令检查gre模块是否已加载:lsmod | grep gre
2、若无输出,运行以下命令加载模块:sudo modprobe ip_gre
3、为确保重启后自动加载,将模块名写入配置文件:echo "ip_gre" | sudo tee -a /etc/modules
二、配置本地GRE隧道接口
需在两端主机分别创建并配置gre0(或自定义名称)隧道接口,指定远程地址、本地地址及TTL等关键参数,使内核能正确封装与解封装IP数据包。
1、创建名为gre1的隧道接口:sudo ip tunnel add gre1 mode gre remote 203.0.113.2 local 198.51.100.1 ttl 255
2、为该隧道分配IPv4地址:sudo ip addr add 10.0.0.1/30 dev gre1
3、启用隧道接口:sudo ip link set gre1 up
三、配置对端主机隧道参数
对端主机必须配置镜像参数:其remote地址应为本端local地址,其local地址应为本端remote地址,子网地址也需对应,否则隧道无法双向通信。
1、在对端主机执行隧道创建命令:sudo ip tunnel add gre1 mode gre remote 198.51.100.1 local 203.0.113.2 ttl 255
2、分配对端隧道IP:sudo ip addr add 10.0.0.2/30 dev gre1
3、启用对端隧道接口:sudo ip link set gre1 up
四、添加路由使流量经隧道转发
仅启用隧道接口不足以让业务流量自动进入隧道,必须通过静态路由明确指定目标网络经gre1出口,否则数据包仍走默认路径。
1、在本端添加指向对端私有网段的路由:sudo ip route add 172.16.10.0/24 via 10.0.0.2 dev gre1
2、在对端添加回程路由:sudo ip route add 192.168.5.0/24 via 10.0.0.1 dev gre1
3、验证路由表是否生效:ip route show | grep gre1
五、验证隧道连通性与数据封装
隧道配置完成后,需验证两端能否互通,并确认ICMP或业务报文实际经GRE封装传输,而非走底层物理路径。
1、从本端ping对端隧道地址:ping -c 4 10.0.0.2
2、抓包确认GRE头部存在:sudo tcpdump -i any proto 47 -nn -c 2
3、测试穿透隧道访问对端内网主机:ping -c 4 172.16.10.10










