linux中配置gre隧道的静态路由核心是先建隧道接口再添加静态路由:需用ip tunnel add指定源/目的公网ip并up接口,再用ip route add将目标内网网段指向dev gre1,确保隧道up且防火墙放行gre协议(ip proto 47)。

Linux中配置GRE隧道的静态路由,核心是两步:先建好GRE隧道接口,再用ip route把目标网段的流量“指”过去。它不依赖动态协议,适合总部-分支、云主机互通等固定拓扑场景。
创建GRE隧道接口
GRE隧道在Linux里是通过ip tunnel命令建立的逻辑接口,必须明确源IP和目的IP(即公网可达地址):
- 源IP必须是本机实际存在的公网或可路由地址(不能是127.0.0.1或内网NAT后地址)
- 目的IP必须能被本机ping通,否则隧道状态会卡在DOWN
- 建议加上
ttl 64避免TTL耗尽,加key增强基础识别(非加密)
示例(假设本机公网IP为203.0.113.10,对端为203.0.113.20):
ip tunnel add gre1 mode gre remote 203.0.113.20 local 203.0.113.10 ttl 64 key 12345ip link set gre1 up
为隧道分配IP并启用通信
隧道接口默认无IP,需手动配一个独立子网地址(两端不能冲突),这是后续路由和协议的基础:
Linux 性能分析与调优专家,覆盖 CPU、内存、磁盘 I/O、网络、内核参数、编译优化、容器/K8s。适用场景:系统卡顿/高负载、内存不足/OOM/Swap 高、CPU 异常/iowait 高。
- 常用做法:两端各配一个/30或/31网段(如192.168.100.1/30 ↔ 192.168.100.2/30)
- 也可借用物理接口IP(用
ip unnumbered),但仅限简单测试,不推荐生产环境 - 若只做纯路由转发(不跑OSPF/BGP),此步可省略,但必须确保隧道UP
示例:
ip addr add 192.168.100.1/30 dev gre1添加指向隧道的静态路由
这是关键一步——告诉系统“去哪个网段的数据包,必须走gre1”:
- 目标网段是对方内网(如10.10.20.0/24),不是对端公网IP
- 出接口必须写
dev gre1,不能只写via 192.168.100.2(后者是下一跳,适用于直连网络) - 若对端也配了回程路由,双向通信即可打通
示例(将对方内网10.10.20.0/24的流量全部送入gre1):
ip route add 10.10.20.0/24 dev gre1验证与排错要点
配置完别急着测业务,先确认三层基础是否就绪:
- 用
ip link show gre1看状态是否为UP,LOWER_UP - 用
ip route get 10.10.20.1确认查表结果是否命中dev gre1 - 在对端执行
tcpdump -i gre1 icmp,本端ping对方内网地址,看是否有ICMP进隧道 - 常见失败原因:防火墙拦截GRE协议(IP proto 47)、源/目IP不可达、MTU过大导致分片丢弃










