本文介绍如何通过搭建 IPsec 隧道的方式实现多可用区内网互通。

场景示例

客户业务分布在多个可用区,各区域环境信息如下表。本文操作示例以北京 3 区 的 vpc-pek3 作为星形拓扑中心节点,实现 vm1 和 vm2 互通,vm1 和 vm3互通,vm2 和 vm3 互通。

区域 VPC 网络信息

北京 3 区

VPC 名称:vpc-pek3
公网 IP:139.198.27.92
私有网络:192.168.0.0/24
云服务器 vm1:192.168.0.5

上海 1 区

VPC 名称:vpc-sh1
公网IP:139.198.175.48
私有网络:172.16.0.0/24
云服务器 vm2:172.16.0.2

广东 2 区

VPC 名称:vpc-gd2
公网IP:139.198.123.198
私有网络:172.26.0.0/24
云服务器 vm3:172.26.0.2

操作步骤

步骤一: vpc-pek3 配置 2 条隧道

隧道信息如下:

隧道名称 本地网络 目标网络

pek3-sh1

192.168.0.0/24,172.26.0.0/24

172.16.0.0/24

pek3-gd2

192.168.0.0/24,172.16.0.0/24

172.26.0.0/24

隧道 pek3-sh1 配置完成后:

  • 本地网络

    ipsec start topology2
  • 目标网络

    ipsec start topology3

隧道 pek3-gd2 配置完成后:

  • 本地网络

    ipsec start topology4
  • 目标网络

    ipsec start topology5

步骤二: vpc-sh1 配置 1 条隧道

隧道信息如下:

隧道名称 本地网络 目标网络

sh1-pek3

172.16.0.0/24

192.168.0.0/24,172.26.0.0/24

隧道 sh1-pek3 配置完成后:

  • 本地网络

    ipsec start topology6
  • 目标网络

    ipsec start topology7

步骤三: vpc-gd2 配置 1 条隧道

隧道信息如下:

隧道名称 本地网络 目标网络

gd2-pek3

172.26.0.0/24

192.168.0.0/24,172.26.0.0/24

验证结果

隧道配置完成后,按照以下步骤进行验证。

  1. 在云服务器 vm1 上分别 ping vm2 及 vm3,均可 ping 通。

    [root@i-ojv17nyb ~]# ifconfig
    eth0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
            inet 192.168.0.5  netmask 255.255.255.0  broadcast 192.168.0.255
            inet6 2402:e7c0:0:1800:ffff:ffff:fffe:fffc  prefixlen 128  scopeid 0x0<global>
            inet6 fe80::5054:9eff:fe5c:d5ed  prefixlen 64  scopeid 0x20<link>
            ether 52:54:9e:5c:d5:ed  txqueuelen 1000  (Ethernet)
            RX packets 2674  bytes 329567 (321.8 KiB)
            RX errors 0  dropped 0  overruns 0  frame 0
            TX packets 2397  bytes 392917 (383.7 KiB)
            TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0
    
    [root@i-ojv17nyb ~]# ping 172.16.0.2
    PING 172.16.0.2 (172.16.0.2) 56(84) bytes of data.
    64 bytes from 172.16.0.2: icmp_seq=1 ttl=60 time=29.5 ms
    64 bytes from 172.16.0.2: icmp_seq=2 ttl=60 time=29.6 ms
    64 bytes from 172.16.0.2: icmp_seq=3 ttl=60 time=29.8 ms
    64 bytes from 172.16.0.2: icmp_seq=4 ttl=60 time=29.8 ms
    
    [root@i-ojv17nyb ~]# ping 172.26.0.2
    PING 172.26.0.2 (172.26.0.2) 56(84) bytes of data.
    64 bytes from 172.26.0.2: icmp_seq=1 ttl=60 time=32.5 ms
    64 bytes from 172.26.0.2: icmp_seq=2 ttl=60 time=34.7 ms
    64 bytes from 172.26.0.2: icmp_seq=3 ttl=60 time=32.4 ms
    64 bytes from 172.26.0.2: icmp_seq=4 ttl=60 time=32.5 ms
  2. 在云服务器 vm2 上 ping vm3,可 ping 通。

    [root@i-cog1yjbd ~]# ifconfig
    eth0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
            inet 172.16.0.2  netmask 255.255.255.0  broadcast 172.16.0.255
            inet6 fe80::5054:99ff:feb8:6636  prefixlen 64  scopeid 0x20<link>
            ether 52:54:99:b8:66:36  txqueuelen 1000  (Ethernet)
            RX packets 327  bytes 26244 (25.6 KiB)
            RX errors 0  dropped 0  overruns 0  frame 0
            TX packets 294  bytes 23177 (22.6 KiB)
            TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0
    
    [root@i-cog1yjbd ~]# ping 172.26.0.2
    PING 172.26.0.2 (172.26.0.2) 56(84) bytes of data.
    64 bytes from 172.26.0.2: icmp_seq=1 ttl=59 time=61.1 ms
    64 bytes from 172.26.0.2: icmp_seq=2 ttl=59 time=61.3 ms
    64 bytes from 172.26.0.2: icmp_seq=3 ttl=59 time=61.4 ms
    64 bytes from 172.26.0.2: icmp_seq=4 ttl=59 time=61.6 ms

    至此,表示以上可用区已通过 IPsec 隧道实现内网互通。