更新时间:2024-11-26 GMT+08:00
分享

为多网卡Linux云服务器配置IPv4和IPv6策略路由(Ubuntu)

操作场景

本文档以Ubuntu 22.04 server 64bit为例,为指导您为多网卡的云服务器配置策略路由。

关于云服务器双网卡的背景知识及组网说明,请参见方案概述

Linux IPv4操作步骤 (Ubuntu)

  1. 收集配置策略路由需要的云服务器网卡地址等信息。

    具体操作请参见收集云服务器网络信息

    本示例中,云服务器的网络信息如表1所示。

    表1 Linux IPv4场景信息说明(Ubuntu)

    类型

    主网卡

    扩展网卡

    源端

    • 网卡地址:10.0.0.138
    • 子网网段:10.0.0.0/24
    • 子网网关:10.0.0.1
    • 网卡地址:10.0.1.25
    • 子网网段:10.0.1.0/24
    • 子网网关:10.0.1.1

    目的端

    网卡地址:10.0.2.146

    不涉及

  2. 登录源端云服务器。

    ECS有多种登录方法,具体请参见登录弹性云服务器

  3. 执行以下命令,检查源端云服务器主网卡和目的端云服务器通信情况。

    ping -I 源端云服务器主网卡地址 目的端云服务器地址

    命令示例:

    ping -I 10.0.0.138 10.0.2.146

    回显类似如下信息,表示可以正常通信。
    root@ecs-s:~# ping -I 10.0.0.138 10.0.2.146
    PING 10.0.2.146 (10.0.2.146) from 10.0.0.138 : 56(84) bytes of data.
    64 bytes from 10.0.2.146: icmp_seq=1 ttl=64 time=0.247 ms
    64 bytes from 10.0.2.146: icmp_seq=2 ttl=64 time=0.194 ms
    64 bytes from 10.0.2.146: icmp_seq=3 ttl=64 time=0.190 ms
    ^C
    --- 10.0.2.146 ping statistics ---
    3 packets transmitted, 3 received, 0% packet loss, time 2049ms
    rtt min/avg/max/mdev = 0.190/0.210/0.247/0.025 ms

    配置多网卡策略路由前,请务必确保源端主网卡和目的端通信正常。

  4. 执行以下命令,查看云服务器网卡名称。

    ip addr

    回显类似如下信息,通过网卡地址查找对应的网卡名称,本示例中:
    • 10.0.0.138为主网卡地址,对应的名称为eth0。
    • 10.0.1.25为扩展网卡地址,对应的名称为eth1。
    root@ecs-s:~# ip addr
    ...
    2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP group default qlen 1000
        link/ether fa:16:3e:22:22:ac brd ff:ff:ff:ff:ff:ff
        altname enp0s3
        altname ens3
        inet 10.0.0.138/24 brd 10.0.0.255 scope global dynamic noprefixroute eth0
           valid_lft 107999167sec preferred_lft 107999167sec
        inet6 fe80::f816:3eff:fe22:22ac/64 scope link 
           valid_lft forever preferred_lft forever
    3: eth1: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP group default qlen 1000
        link/ether fa:16:3e:22:23:3b brd ff:ff:ff:ff:ff:ff
        altname enp4s1
        inet 10.0.1.25/24 brd 10.0.1.255 scope global dynamic noprefixroute eth1
           valid_lft 107999167sec preferred_lft 107999167sec
        inet6 fe80::f816:3eff:fe22:233b/64 scope link 
           valid_lft forever preferred_lft forever
  5. 执行以下步骤,为云服务器配置临时路由。

    临时路由配置完后立即生效,当云服务器重启后临时路由会丢失,请执行完5配置完临时路由后,继续执行6配置永久路由,避免云服务器重启后网络中断。

    1. 依次执行以下命令,添加主网卡和扩展网卡的策略路由。
      • 主网卡

        ip route add default via 子网网关 dev 网卡名称 table 路由表名称

        ip route add 子网网段 dev 网卡名称 table 路由表名称

        ip rule add from 网卡地址 table 路由表名称

      • 扩展网卡

        ip route add default via 子网网关 dev 网卡名称 table 路由表名称

        ip route add 子网网段 dev 网卡名称 table 路由表名称

        ip rule add from 网卡地址 table 路由表名称

      参数说明如下:
      • 网卡名称:填写4中所查名称。
      • 路由表名称:自定义路由表名称,此处请使用数字命名路由表。
      • 其他网络信息:填写1中收集的地址。

      命令示例:

      • 主网卡

        ip route add default via 10.0.0.1 dev eth0 table 10

        ip route add 10.0.0.0/24 dev eth0 table 10

        ip rule add from 10.0.0.138 table 10

      • 扩展网卡

        ip route add default via 10.0.1.1 dev eth1 table 20

        ip route add 10.0.1.0/24 dev eth1 table 20

        ip rule add from 10.0.1.25 table 20

      如果云服务器有多张网卡,请依次为所有网卡添加策略路由。

    2. 依次执行以下命令,确认策略路由是否添加成功。

      ip rule

      ip route show table 主网卡路由表名称

      ip route show table 扩展网卡路由表名称

      其中,路由表名称为5.a中自定义的名称。

      命令示例:

      ip rule

      ip route show table 10

      ip route show table 20

      回显类似如下信息,表示策略路由添加成功。
      root@ecs-s:~# ip rule
      0:      from all lookup local
      32764:  from 10.0.1.25 lookup 20
      32765:  from 10.0.0.138 lookup 10
      32766:  from all lookup main
      32767:  from all lookup default
      root@ecs-s:~# ip route show table 10
      default via 10.0.0.1 dev eth0 
      10.0.0.0/24 dev eth0 scope link 
      root@ecs-s:~# ip route show table 20
      default via 10.0.1.1 dev eth1 
      10.0.1.0/24 dev eth1 scope link 
    3. 执行以下命令,验证源端云服务器和目的端云服务器是否可以正常通信。

      ping -I 源端云服务器主网卡地址 目的端云服务器地址

      ping -I 源端云服务器扩展网卡地址 目的端云服务器地址

      命令示例:

      ping -I 10.0.0.138 10.0.2.146

      ping -I 10.0.1.25 10.0.2.146

      回显类似如下信息,两个网卡均可以和目的端正常通信,表示策略路由配置成功。
      root@ecs-s:~# ping -I 10.0.0.138 10.0.2.146
      PING 10.0.2.146 (10.0.2.146) from 10.0.0.138 : 56(84) bytes of data.
      64 bytes from 10.0.2.146: icmp_seq=1 ttl=64 time=0.258 ms
      64 bytes from 10.0.2.146: icmp_seq=2 ttl=64 time=0.242 ms
      64 bytes from 10.0.2.146: icmp_seq=3 ttl=64 time=0.165 ms
      ^C
      --- 10.0.2.146 ping statistics ---
      3 packets transmitted, 3 received, 0% packet loss, time 2039ms
      rtt min/avg/max/mdev = 0.165/0.221/0.258/0.040 ms
      root@ecs-s:~# ping -I 10.0.1.25 10.0.2.146
      PING 10.0.2.146 (10.0.2.146) from 10.0.1.25 : 56(84) bytes of data.
      64 bytes from 10.0.2.146: icmp_seq=1 ttl=64 time=0.498 ms
      64 bytes from 10.0.2.146: icmp_seq=2 ttl=64 time=0.427 ms
      64 bytes from 10.0.2.146: icmp_seq=3 ttl=64 time=0.185 ms
      ^C
      --- 10.0.2.146 ping statistics ---
      3 packets transmitted, 3 received, 0% packet loss, time 2031ms
      rtt min/avg/max/mdev = 0.185/0.370/0.498/0.133 ms
  6. 执行以下步骤,为云服务器配置永久路由。
    1. 执行以下命令,为systemd服务创建一个新的“network-routes.service”文件。

      vi /etc/systemd/system/network-routes.service

    2. i进入编辑模式。
    3. 在文件末尾添加以下配置。
      [Unit]
      Description=Network Routes Configuration
      After=network.target
      
      [Service]
      Type=oneshot
      RemainAfterExit=yes
      ExecStart=/bin/bash -c 'for((x=0; x<30; x++)); do [[ $(ping -I eth0 10.0.0.1 -c 1 -W 1 >/dev/null 2>&1 && echo 1) ]] && break; done; ip route flush table 10; ip route add default via  10.0.0.1 dev eth0 table 10; ip route add 10.0.0.0/24 dev eth0 table 10; ip rule add from 10.0.0.138 table 10; for((x=0; x<30; x++)); do [[ $(ping -I eth1 10.0.1.1 -c 1 -W 1 >/dev/null 2>&1 && echo 1) ]] && break; done; ip route flush table 20; ip route add default via 10.0.1.1 dev eth1 table 20; ip route add 10.0.1.0/24 dev eth1 table 20; ip rule add from 10.0.1.25 table 20; ip rule add to 169.254.169.254 table main'
      
      [Install]
      WantedBy=multi-user.target

      其中,参数说明如下:

      • for循环:检查主网卡eth0或者扩展网卡eth1是否启动,通过ping网卡所在子网的IPv4网关来检查,此处10.0.0.1为eth0所在子网的IPv4网关,10.0.1.1为eth1所在子网的IPv4网关,-c 1表示一次发送一个数据包,-W 1表示超时时间为1s,重试次数为30次。
      • ip route flush table 路由表名称:假如路由表有残留路由,使用该命令会清空指定路由表中残留的路由,避免影响本次配置新的路由。
      • 主网卡的策略路由,和5.a配置保持一致。
      • 扩展网卡的策略路由,和5.a配置保持一致。
      • ip rule add to 169.254.169.254 table main:配置cloud-init地址,请和本示例中的配置保持一致,不要修改。
    4. ESC退出,并输入:wq!保存配置。
    5. 执行以下命令,重新加载systemd配置,并启动服务。

      systemctl daemon-reload

      systemctl enable network-routes.service

      回显类似如下信息,表示启动成功。
      root@ecs-s:~# systemctl daemon-reload 
      root@ecs-s:~# systemctl enable network-routes.service
      Created symlink /etc/systemd/system/multi-user.target.wants/network-routes.service → /etc/systemd/system/network-routes.service.
    6. 执行以下命令,重启云服务器。

      reboot

      “network-routes.service”文件添加中添加的策略路由,需要重启云服务器后才会生效,此处请确保不影响业务再重启云服务器操作。

    7. 参考5.b~5.c,检查策略路由添加情况,并验证源端和目的通信是否正常。

Linux IPv6操作步骤 (Ubuntu)

  1. 收集配置策略路由需要的云服务器网卡地址等信息。

    具体操作请参见收集云服务器网络信息

    本示例中,云服务器的网络信息如表2所示。

    表2 Linux IPv6场景信息说明(Ubuntu)

    类型

    主网卡

    扩展网卡

    源端

    • IPv4网卡地址:10.0.0.138
    • IPv6网卡地址:2407:c080:1200:1dd8:1473:49db:22d7:13c7
    • 子网IPv6网段:2407:c080:1200:1dd8::/64
    • 子网IPv6网关:2407:c080:1200:1dd8::1
    • IPv4网卡地址:10.0.1.25
    • IPv6网卡地址:2407:c080:1200:1a9c:691e:fffe:7e22:12c4
    • 子网IPv6网段:2407:c080:1200:1a9c::/64
    • 子网IPv6网关:2407:c080:1200:1a9c::1

    目的端

    • IPv4网卡地址:10.0.2.146
    • IPv6网卡地址:2407:c080:1200:1dd9:f5e1:94d1:2822:dede

    不涉及

  2. 登录源端云服务器。

    ECS有多种登录方法,具体请参见登录弹性云服务器

  3. 执行以下步骤,确保云服务器已开启IPv6协议栈,并且正常获取到IPv6地址。

    对于源端和目的端的IPv6云服务器,均需要执行该操作,确保云服务器已获取到IPv6地址,否则云服务器无法通过IPv6地址进行通信。

    本章节云服务器使用的操作系统为Ubuntu 22.04 server 64bit公共镜像,以下针对该操作系统举例,更多操作系统配置指导,请参见动态获取IPv6地址的“Linux操作系统(手动配置启用IPv6)” 小节。

    1. 执行以下命令,检查云服务器是否可以获取到IPv6地址。

      ip addr

      回显类似如下信息,eth0和eth1为云服务器的网卡,只有一行inet6地址,为fe80开头,表示该云服务器已开启IPv6协议栈,但是未获取到IPv6地址,需要继续执行3.b~3.h,获取IPv6地址。
      root@ecs-s:~# ip addr
      ...
      2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP group default qlen 1000
          link/ether fa:16:3e:22:22:ac brd ff:ff:ff:ff:ff:ff
          altname enp0s3
          altname ens3
          inet 10.0.0.138/24 brd 10.0.0.255 scope global dynamic noprefixroute eth0
             valid_lft 107999781sec preferred_lft 107999781sec
          inet6 fe80::f816:3eff:fe22:22ac/64 scope link 
             valid_lft forever preferred_lft forever
      3: eth1: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP group default qlen 1000
          link/ether fa:16:3e:22:23:3b brd ff:ff:ff:ff:ff:ff
          altname enp4s1
          inet 10.0.1.25/24 brd 10.0.1.255 scope global dynamic noprefixroute eth1
             valid_lft 107999781sec preferred_lft 107999781sec
          inet6 fe80::f816:3eff:fe22:233b/64 scope link 
             valid_lft forever preferred_lft forever
    2. 执行以下命令,查看云服务器网卡名称。

      ifconfig

      回显类似如下信息,通过网卡地址查找对应的网卡名称,本示例中:
      • 10.0.0.138为主网卡地址,对应的名称为eth0。
      • 10.0.1.25为扩展网卡地址,对应的名称为eth1。
      root@ecs-s:~# ifconfig
      eth0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
              inet 10.0.0.138  netmask 255.255.255.0  broadcast 10.0.0.255
              inet6 fe80::f816:3eff:fe22:22ac  prefixlen 64  scopeid 0x20<link>
              ether fa:16:3e:22:22:ac  txqueuelen 1000  (Ethernet)
              RX packets 863  bytes 269089 (269.0 KB)
              RX errors 0  dropped 0  overruns 0  frame 0
              TX packets 1117  bytes 359807 (359.8 KB)
              TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0
      
      eth1: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
              inet 10.0.1.25  netmask 255.255.255.0  broadcast 10.0.1.255
              inet6 fe80::f816:3eff:fe22:233b  prefixlen 64  scopeid 0x20<link>
              ether fa:16:3e:22:23:3b  txqueuelen 1000  (Ethernet)
              RX packets 10  bytes 1358 (1.3 KB)
              RX errors 0  dropped 0  overruns 0  frame 0
              TX packets 10  bytes 973 (973.0 B)
              TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0
      ...
    3. 执行以下步骤,配置“01-netcfg.yaml”文件。
      1. 执行以下命令,进入“/etc/netplan/”目录。

        cd /etc/netplan

      2. 执行以下命令,打开“01-netcfg.yaml”文件。

        vi 01-netcfg.yaml

      3. i进入编辑模式。
      4. 按照以下示例,分别在待配置的网卡下添加内容dhcp6: true,注意新添加内容和已有内容格式保持统一。
        本示例中,3.b中查询到的主网卡名称为eth0、扩展网卡名称为eth1。
        network:
            version: 2
            renderer: NetworkManager
            ethernets:
                eth0:
                    dhcp4: true
                    dhcp6: true
                eth1:
                    dhcp4: true
                    dhcp6: true
                eth2:
                    dhcp4: true
                eth3:
                    dhcp4: true
                eth4:
                    dhcp4: true
      5. ESC退出,并输入:wq!保存配置。
    4. 执行以下命令,修改“01-netcfg.yaml”文件权限,确保只有文件所有者拥有读写的权限。

      chmod 600 /etc/netplan/01-netcfg.yaml

      chown root:root /etc/netplan/01-netcfg.yaml

    5. 执行以下命令,使配置修改生效。

      netplan apply

    6. 执行以下步骤,配置“NetworkManager.conf”文件。
      1. 执行以下命令,打开“NetworkManager.conf”文件。

        vi /etc/NetworkManager/NetworkManager.conf

      2. i进入编辑模式。
      3. 按照以下示例,在文件中添加内容dhcp=dhclient,注意新添加内容和已有内容格式保持统一。
        [main]
        plugins=ifupdown,keyfile
        dhcp=dhclient
        
        [ifupdown]
        managed=true
        
        [device]
        wifi.scan-rand-mac-address=no
      4. ESC退出,并输入:wq!保存配置。
    7. 执行以下命令,重启网络服务使配置生效。

      systemctl restart NetworkManager

    8. 执行以下命令,检查云服务器是否可以获取到IPv6地址。

      ip addr

      回显类似如下信息,eth0和eth1网卡有两行inet6地址,新增一行2407开头的地址,表示配置成功。
      root@ecs-s:/etc/netplan# ip addr
      ...
      2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP group default qlen 1000
          link/ether fa:16:3e:22:22:ac brd ff:ff:ff:ff:ff:ff
          altname enp0s3
          altname ens3
          inet 10.0.0.138/24 brd 10.0.0.255 scope global dynamic noprefixroute eth0
             valid_lft 107999982sec preferred_lft 107999982sec
          inet6 2407:c080:1200:1dd8:1473:49db:22d7:13c7/128 scope global dynamic noprefixroute 
             valid_lft 7182sec preferred_lft 7182sec
          inet6 fe80::f816:3eff:fe22:22ac/64 scope link noprefixroute 
             valid_lft forever preferred_lft forever
      3: eth1: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP group default qlen 1000
          link/ether fa:16:3e:22:23:3b brd ff:ff:ff:ff:ff:ff
          altname enp4s1
          inet 10.0.1.25/24 brd 10.0.1.255 scope global dynamic noprefixroute eth1
             valid_lft 107999982sec preferred_lft 107999982sec
          inet6 2407:c080:1200:1a9c:691e:fffe:7e22:12c4/128 scope global dynamic noprefixroute 
             valid_lft 7182sec preferred_lft 7182sec
          inet6 fe80::f816:3eff:fe22:233b/64 scope link noprefixroute 
             valid_lft forever preferred_lft forever
    9. 登录目的端云服务器,参考3.a~3.h,配置目的云服务器获取IPv6地址。
      回显类似如下信息,eth0有两行inet6地址,新增一行2407开头的地址,表示目的云服务器已成功获取IPv6地址。
      root@ecs-d:/etc/netplan# ip addr
      ...
      2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP group default qlen 1000
          link/ether fa:16:3e:22:24:b4 brd ff:ff:ff:ff:ff:ff
          altname enp0s3
          altname ens3
          inet 10.0.2.146/24 brd 10.0.2.255 scope global dynamic noprefixroute eth0
             valid_lft 107999994sec preferred_lft 107999994sec
          inet6 2407:c080:1200:1dd9:f5e1:94d1:2822:dede/128 scope global dynamic noprefixroute 
             valid_lft 7195sec preferred_lft 7195sec
          inet6 fe80::f816:3eff:fe22:24b4/64 scope link noprefixroute 
             valid_lft forever preferred_lft forever
  4. 登录源端云服务器,执行以下命令,检查源端云服务器主网卡和目的端云服务器通信情况。

    ping6 -I 源端云服务器主网卡地址 目的端云服务器地址

    命令示例:

    ping6 -I 2407:c080:1200:1dd8:1473:49db:22d7:13c7 2407:c080:1200:1dd9:f5e1:94d1:2822:dede

    回显类似如下信息,表示可以正常通信。
    root@ecs-s:/etc/netplan# ping6 -I 2407:c080:1200:1dd8:1473:49db:22d7:13c7 2407:c080:1200:1dd9:f5e1:94d1:2822:dede
    PING 2407:c080:1200:1dd9:f5e1:94d1:2822:dede(2407:c080:1200:1dd9:f5e1:94d1:2822:dede) from 2407:c080:1200:1dd8:1473:49db:22d7:13c7 : 56 data bytes
    64 bytes from 2407:c080:1200:1dd9:f5e1:94d1:2822:dede: icmp_seq=1 ttl=64 time=0.244 ms
    64 bytes from 2407:c080:1200:1dd9:f5e1:94d1:2822:dede: icmp_seq=2 ttl=64 time=0.212 ms
    64 bytes from 2407:c080:1200:1dd9:f5e1:94d1:2822:dede: icmp_seq=3 ttl=64 time=0.169 ms
    ^C
    --- 2407:c080:1200:1dd9:f5e1:94d1:2822:dede ping statistics ---
    3 packets transmitted, 3 received, 0% packet loss, time 2033ms
    rtt min/avg/max/mdev = 0.169/0.208/0.244/0.030 ms

    配置多网卡策略路由前,请务必确保源端主网卡和目的端通信正常。

  5. 登录源端云服务器,执行以下步骤,为云服务器配置临时路由。

    临时路由配置完后立即生效,当云服务器重启后临时路由会丢失,请执行5配置完临时路由后,继续执行6配置永久路由,避免云服务器重启后网络中断。

    1. 依次执行以下命令,添加主网卡和扩展网卡的策略路由。
      • 主网卡

        ip -6 route add default via 子网网关 dev 网卡名称 table 路由表名称

        ip -6 route add 子网网段 dev 网卡名称 table 路由表名称

        ip -6 rule add from 网卡地址 table 路由表名称

      • 扩展网卡

        ip -6 route add default via 子网网关 dev 网卡名称 table 路由表名称

        ip -6 route add 子网网段 dev 网卡名称 table 路由表名称

        ip -6 rule add from 网卡地址 table 路由表名称

      参数说明如下:
      • 网卡名称:填写3.b中所查名称。
      • 路由表名称:自定义路由表名称,此处请使用数字命名路由表。
      • 其他网络信息:填写1中收集的地址。

      命令示例:

      • 主网卡

        ip -6 route add default via 2407:c080:1200:1dd8::1 dev eth0 table 10

        ip -6 route add 2407:c080:1200:1dd8::/64 dev eth0 table 10

        ip -6 rule add from 2407:c080:1200:1dd8:1473:49db:22d7:13c7 table 10

      • 扩展网卡

        ip -6 route add default via 2407:c080:1200:1a9c::1 dev eth1 table 20

        ip -6 route add 2407:c080:1200:1a9c::/64 dev eth1 table 20

        ip -6 rule add from 2407:c080:1200:1a9c:691e:fffe:7e22:12c4 table 20

      如果云服务器有多张网卡,请依次为所有网卡添加策略路由。

    2. 依次执行以下命令,确认策略路由是否添加成功。

      ip -6 rule

      ip -6 route show table 主网卡路由表名称

      ip -6 route show table 扩展网卡路由表名称

      其中,路由表名称为5.a中自定义的名称。

      命令示例:

      ip -6 rule

      ip -6 route show table 10

      ip -6 route show table 20

      回显类似如下信息,表示策略路由添加成功。
      root@ecs-s:/etc/netplan# ip -6 rule
      0:      from all lookup local
      32764:  from 2407:c080:1200:1a9c:691e:fffe:7e22:12c4 lookup 20
      32765:  from 2407:c080:1200:1dd8:1473:49db:22d7:13c7 lookup 10
      32766:  from all lookup main
      root@ecs-s:/etc/netplan# ip -6 route show table 10
      2407:c080:1200:1dd8::/64 dev eth0 metric 1024 pref medium
      default via 2407:c080:1200:1dd8::1 dev eth0 metric 1024 pref medium
      root@ecs-s:/etc/netplan# ip -6 route show table 20
      2407:c080:1200:1a9c::/64 dev eth1 metric 1024 pref medium
      default via 2407:c080:1200:1a9c::1 dev eth1 metric 1024 pref medium
    3. 执行以下命令,验证源端云服务器和目的端云服务器是否可以正常通信。

      ping -6 -I 源端云服务器主网卡地址 目的端云服务器地址

      ping -6 -I 源端云服务器扩展网卡地址 目的端云服务器地址

      命令示例:

      ping6 -I 2407:c080:1200:1dd8:1473:49db:22d7:13c7 2407:c080:1200:1dd9:f5e1:94d1:2822:dede

      ping6 -I 2407:c080:1200:1a9c:691e:fffe:7e22:12c4 2407:c080:1200:1dd9:f5e1:94d1:2822:dede

      回显类似如下信息,两个网卡均可以和目的端正常通信,表示策略路由配置成功。
      root@ecs-s:/etc/netplan# ping6 -I 2407:c080:1200:1dd8:1473:49db:22d7:13c7 2407:c080:1200:1dd9:f5e1:94d1:2822:dede
      PING 2407:c080:1200:1dd9:f5e1:94d1:2822:dede(2407:c080:1200:1dd9:f5e1:94d1:2822:dede) from 2407:c080:1200:1dd8:1473:49db:22d7:13c7 : 56 data bytes
      64 bytes from 2407:c080:1200:1dd9:f5e1:94d1:2822:dede: icmp_seq=1 ttl=64 time=0.260 ms
      64 bytes from 2407:c080:1200:1dd9:f5e1:94d1:2822:dede: icmp_seq=2 ttl=64 time=0.248 ms
      64 bytes from 2407:c080:1200:1dd9:f5e1:94d1:2822:dede: icmp_seq=3 ttl=64 time=0.165 ms
      ^C
      --- 2407:c080:1200:1dd9:f5e1:94d1:2822:dede ping statistics ---
      3 packets transmitted, 3 received, 0% packet loss, time 2043ms
      rtt min/avg/max/mdev = 0.165/0.224/0.260/0.042 ms
      root@ecs-s:/etc/netplan# ping6 -I 2407:c080:1200:1a9c:691e:fffe:7e22:12c4 2407:c080:1200:1dd9:f5e1:94d1:2822:dede
      PING 2407:c080:1200:1dd9:f5e1:94d1:2822:dede(2407:c080:1200:1dd9:f5e1:94d1:2822:dede) from 2407:c080:1200:1a9c:691e:fffe:7e22:12c4 : 56 data bytes
      64 bytes from 2407:c080:1200:1dd9:f5e1:94d1:2822:dede: icmp_seq=1 ttl=64 time=0.592 ms
      64 bytes from 2407:c080:1200:1dd9:f5e1:94d1:2822:dede: icmp_seq=2 ttl=64 time=0.208 ms
      64 bytes from 2407:c080:1200:1dd9:f5e1:94d1:2822:dede: icmp_seq=3 ttl=64 time=0.162 ms
      ^C
      --- 2407:c080:1200:1dd9:f5e1:94d1:2822:dede ping statistics ---
      3 packets transmitted, 3 received, 0% packet loss, time 2031ms
      rtt min/avg/max/mdev = 0.162/0.320/0.592/0.192 ms
  6. 执行以下步骤,为云服务器配置永久路由。
    1. 执行以下命令,为systemd服务创建一个新的文件“network-routes6.service”。

      vi /etc/systemd/system/network-routes6.service

    2. i进入编辑模式。
    3. 在文件末尾添加以下配置。
      [Unit]
      Description=Network Routes Configuration
      After=network.target
      
      [Service]
      Type=oneshot
      RemainAfterExit=yes
      
      ExecStart=/bin/bash -c 'for((x=0; x<30; x++)); do [[ $(ping6 -I eth0 2407:c080:1200:1dd8::1 -c 1 -W 1 >/dev/null 2>&1 && echo 1) ]] && break; done; ip route flush table 10; ip -6 route add default via 2407:c080:1200:1dd8::1 dev eth0 table 10; ip -6 route add 2407:c080:1200:1dd8::/64 dev eth0 table 10; ip -6 rule add from 2407:c080:1200:1dd8:859c:e5d5:8b3d:a2d9 table 10; for((x=0; x<30; x++)); do [[ $(ping6 -I eth1 2407:c080:1200:1a9c::1 -c 1 -W 1 >/dev/null 2>&1 && echo 1) ]] && break; done; ip route flush table 20; ip -6 route add default via 2407:c080:1200:1a9c::1 dev eth1 table 20; ip -6 route add 2407:c080:1200:1a9c::/64 dev eth1 table 20; ip -6 rule add from 2407:c080:1200:1a9c:7cc0:63b5:8e65:4dd8 table 20'
      
      [Install]
      WantedBy=multi-user.target

      其中,参数说明如下:

      • for循环:检查主网卡eth0或者扩展网卡eth1是否启动,通过ping网卡所在子网的IPv6网关来检查,此处2407:c080:1200:1dd8::1为eth0所在子网的IPv6网关,2407:c080:1200:1a9c::1为eth1所在子网的IPv6网关,-c 1表示一次发送一个数据包,-W 1表示超时时间为1s,重试次数为30次。
      • ip route flush table 路由表名称:假如路由表有残留路由,假如路由表有残留路由,使用该命令会清空指定路由表中残留的路由,避免影响本次配置新的路由。
      • 主网卡的策略路由,和5.a配置保持一致。
      • 扩展网卡的策略路由,和5.a配置保持一致。
    4. ESC退出,并输入:wq!保存配置。
    5. 执行以下命令,重新加载systemd配置,并启动服务。

      systemctl daemon-reload

      systemctl enable network-routes6.service

      回显类似如下信息,表示启动成功。
      root@ecs-s:/etc/netplan# systemctl daemon-reload
      root@ecs-s:/etc/netplan# systemctl enable network-routes6.service
      Created symlink /etc/systemd/system/multi-user.target.wants/network-routes6.service → /etc/systemd/system/network-routes6.service.
    6. 执行以下命令,重启云服务器。

      reboot

      “network-routes6.service”文件添加中添加的策略路由,需要重启云服务器后才会生效,此处请确保不影响业务再重启云服务器操作。

    7. 参考5.b~5.c,检查策略路由添加情况,并验证源端和目的通信是否正常。

相关文档