需配置双gre隧道、策略路由、心跳探测与路由切换脚本实现秒级容灾:在机房a/b分别基于ens3-ens3和ens4-ens4建立tun1/tun2,分配独立隧道ip;通过table 100/101策略路由设定主备优先级;每2秒ping对端隧道地址,连续3次失败则删除主路由规则并启用备用规则,恢复后切回;同时开启ipv4转发、加载ip_gre模块、关闭rp_filter、设置mtu为1476、放行gre协议(ip proto 47)及icmp。

要在两栋物理机房的 Linux 服务器之间用两对物理网卡构建两条独立 GRE 隧道,并通过静态路由实现秒级链路自动容灾,核心不是靠“动态协议”而是靠双隧道 + 双静态路由 + 策略路由 + 心跳探测 + 路由切换脚本的组合。Linux 原生不支持 GRE 隧道状态自动感知,必须主动监控并触发路由变更。
两条 GRE 隧道需物理隔离且独立配置
假设机房 A(192.168.10.10)和机房 B(192.168.20.10)各有两块物理网卡:
- 机房 A:ens3(192.168.10.10/24,连专线链路1)、ens4(192.168.11.10/24,连专线链路2)
- 机房 B:ens3(192.168.20.10/24,连专线链路1)、ens4(192.168.21.10/24,连专线链路2)
分别建立 tunnel1(走 ens3-ens3)和 tunnel2(走 ens4-ens4),互不干扰:
PyCharm 2026.2.0.1 Linux版提供 JetBrains 官方 2026.2.0.1 版本安装包,适合需要指定 PyCharm 版本进行 Python 项目开发、运行和调试的用户。
- 机房 A 执行:
ip tunnel add tun1 mode gre local 192.168.10.10 remote 192.168.20.10 ttl 64 dev ens3
ip addr add 172.16.1.1/30 peer 172.16.1.2/30 dev tun1
ip link set tun1 up - 机房 A 同时执行:
ip tunnel add tun2 mode gre local 192.168.11.10 remote 192.168.21.10 ttl 64 dev ens4
ip addr add 172.16.2.1/30 peer 172.16.2.2/30 dev tun2
ip link set tun2 up - 机房 B 对应配置 tun1(peer 172.16.1.2)、tun2(peer 172.16.2.2),方向相反
主备静态路由 + 策略路由区分优先级
仅靠普通静态路由无法自动倒换——Linux 默认只选最长匹配+管理距离最小的一条,不会因接口 down 自动切。必须引入策略路由(policy-based routing)配合探测:
- 为 tunnel1 设置高优先级路由表(如 table 100):
ip route add 10.100.0.0/16 via 172.16.1.2 dev tun1 src 172.16.1.1 table 100
ip rule add to 10.100.0.0/16 table 100 - 为 tunnel2 设置低优先级路由表(如 table 101):
ip route add 10.100.0.0/16 via 172.16.2.2 dev tun2 src 172.16.2.1 table 101
ip rule add to 10.100.0.0/16 table 101 pref 1000 - 默认主路径走 table 100;table 101 作为备用,pref 值更高(数值越大优先级越低)
心跳探测与秒级自动切换
靠内核自动识别隧道中断不可靠(GRE 无 keepalive)。需用轻量级探测机制,例如:
- 在机房 A 上每 2 秒 ping 机房 B 的 tunnel1 对端地址:
ping -c 1 -W 1 172.16.1.2 && echo ok || echo fail - 若连续 3 次失败,执行:
ip rule del to 10.100.0.0/16 table 100
ip rule add to 10.100.0.0/16 table 101 pref 100 - 恢复时反向操作(检测 tunnel1 回通后切回)
- 建议用 systemd timer 或 cron + flock 防重入,避免并发冲突
关键加固项不能遗漏
否则容灾会失效或引发环路:
- 开启 IPv4 转发:echo 1 > /proc/sys/net/ipv4/ip_forward,并写入 /etc/sysctl.conf
- 加载 GRE 模块:modprobe ip_gre;检查 lsmod | grep ip_gre
- 禁用反向路径过滤(RPF):sysctl -w net.ipv4.conf.all.rp_filter=0,否则回程包可能被丢弃
-
隧道 MTU 设为 1476(标准以太网 MTU 1500 − GRE 头 24 字节),避免分片:
ip link set tun1 mtu 1476 - 防火墙放行 GRE 协议(IP proto 47)及探测用的 ICMP










