Cola Life long learning

通过GRE隧道建立多地集群


1. 规划IP地址

为每对隧道分配独立的/30子网(避免冲突):

  • A ↔ B隧道10.0.0.0/30

    • A端IP:10.0.0.1
    • B端IP:10.0.0.2
  • A ↔ C隧道10.0.1.0/30

    • A端IP:10.0.1.1
    • C端IP:10.0.1.2
  • B ↔ C隧道10.0.2.0/30

    • B端IP:10.0.2.1
    • C端IP:10.0.2.2

2. 配置GRE隧道

服务器A配置

# 创建A到B的隧道
ip tunnel add gre-ab mode gre local A公网IP remote B公网IP
ip addr add 10.0.0.1/30 dev gre-ab
ip link set gre-ab up

# 创建A到C的隧道
ip tunnel add gre-ac mode gre local A公网IP remote C公网IP
ip addr add 10.0.1.1/30 dev gre-ac
ip link set gre-ac up

服务器B配置

# 创建B到A的隧道
ip tunnel add gre-ba mode gre local B公网IP remote A公网IP
ip addr add 10.0.0.2/30 dev gre-ba
ip link set gre-ba up

# 创建B到C的隧道
ip tunnel add gre-bc mode gre local B公网IP remote C公网IP
ip addr add 10.0.2.1/30 dev gre-bc
ip link set gre-bc up

服务器C配置

# 创建C到A的隧道
ip tunnel add gre-ca mode gre local C公网IP remote A公网IP
ip addr add 10.0.1.2/30 dev gre-ca
ip link set gre-ca up

# 创建C到B的隧道
ip tunnel add gre-cb mode gre local C公网IP remote B公网IP
ip addr add 10.0.2.2/30 dev gre-cb
ip link set gre-cb up

3. 路由配置(可选)

若需通过隧道路由其他网络,添加静态路由。例如,在A上添加路由到B和C的私有网络:

# 假设B的私有网络为192.168.1.0/24,C的为192.168.2.0/24
ip route add 192.168.1.0/24 via 10.0.0.2 dev gre-ab
ip route add 192.168.2.0/24 via 10.0.1.2 dev gre-ac

4. 防火墙设置

允许GRE协议(IP协议号47)和ICMP:

# 使用iptables(所有服务器执行)
iptables -A INPUT -p gre -j ACCEPT
iptables -A OUTPUT -p gre -j ACCEPT
iptables -A INPUT -p icmp -j ACCEPT
iptables -A OUTPUT -p icmp -j ACCEPT

5. 测试连通性

  • 在A上测试

    ping 10.0.0.2  # 应收到B的回复
    ping 10.0.1.2  # 应收到C的回复
  • 在B上测试

    ping 10.0.0.1  # A
    ping 10.0.2.2  # C
  • 在C上测试

    ping 10.0.1.1  # A
    ping 10.0.2.1  # B

6. 持久化配置(可选)

将配置写入网络配置文件(如/etc/network/interfaces或systemd-networkd),确保重启后生效。


注意事项

  • MTU调整:GRE头部增加24字节,建议设置隧道接口MTU为1476(ip link set dev gre-ab mtu 1476)。
  • NAT穿透:若服务器位于NAT后,需确保GRE流量被正确转发(可能需配置NAT规则)。
  • 密钥验证:为增强安全,可使用GRE的key参数(需双方一致)。
^