为多网卡弹性云主机配置策略路由

背景

当弹性云主机拥有多张网卡时,主网卡默认可以和外部正常通信,辅助网卡无法和外部正常通信,当需要辅助网卡与外部通信时,需要在云主机内部为辅助网卡配置策略路由。

本文档以配置双网卡弹性云主机的策略路由为例,具体说明如下:

收集弹性云主机网络信息

操作场景

为多网卡弹性云主机配置策略路由之前,您需要收集云主机的网络信息,请根据云主机操作系统及IP类型参考对应的指导,具体说明如下,表格中的云主机信息仅为示例:

1.      IPv4场景

类型

主网卡

辅助网卡

源端

网卡地址:172.16.0.55

子网网段:172.16.0.0/20

子网网关:172.16.0.1

网卡地址:172.25.0.3

子网网段:172.25.0.0/25

子网网关:172.25.0.1

目的端

网卡地址:172.18.0.16

不涉及

 

类型

主网卡

辅助网卡

源端

网卡地址:172.16.0.55

子网网关:172.16.0.1

网卡地址:172.25.0.3

子网网关:172.25.0.1

目的端

网卡地址:172.18.0.16

不涉及

 

2.      IPv6场景

类型

主网卡

辅助网卡

源端

IPV4网卡地址:172.25.0.2

IPV6网卡地址:2408:80e0:4100:51:99:0061::2

IPV4网卡地址:172.18.0.2

IPV6网卡地址:2408:80e0:4100:51:99:0062::2

目的端

IPV6网卡地址:2408:80e0:4100:51:99:0056::2

不涉及

 

类型

主网卡

辅助网卡

源端

网卡地址:2408:80e0:4100:51:99:0061::2

网卡地址:2408:80e0:4100:51:99:0062::2

目的端

网卡地址:2408:80e0:4100:51:99:0056::2

不涉及

获取网卡地址

  1. 登录用户控制台。

  1. 在用户控制台左上角单击 ,选择区域。

  1. 依次选择左侧导航栏中的“产品与服务 > 计算 > 弹性云主机”。

  1. 在弹性云主机列表中,选择目标弹性云主机,并单击名称对应的超链接。进入弹性云主机“基本配置”页签。

  1. 选择“弹性网卡”页签,查看云主机主网卡和辅助网卡对应IP地址。支持查看IPv4IPv6地址。

获取子网网段和网关地址

  1. 登录用户控制台。

  1. 在用户控制台左上角单击 ,选择区域。

  1. 依次选择左侧导航栏中的“产品与服务 > 网络 > 虚拟专有云”。

  1. 在虚拟专有云列表中,选择目标弹性云主机所在虚拟专有云,并单击名称对应的超链接。

  1. 进入虚拟机专有云“基本信息”页签,选择子网页签,在子网列表中,查看目标子网对应的网段及网关地址。支持查看IPv4IPv6地址。

为多网卡Linux弹性云主机配置策略路由

本文档以CentOS 8.0 64bit为例,指导用户为双网卡Linux弹性云主机配置策略路由。

Linux弹性云主机配置策略路由(IPv4

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

  • 临时路由配置完成后立即生效,当云主机重启后临时路由会丢失,请完成临时路由配置后,继续完成永久路由的配置,避免云主机重启后网络中断。

  • 如果弹性云主机有多张网卡,请依次为所有网卡添加策略路由。

  • /etc/rc.local”文件中添加策略路由需要重启云主机后才能生效,请确认重启不影响业务再重启云主机。

  • 如果您的操作系统为Redhat,在为“/etc/rc.local”文件添加执行权限时,还需要执行“chmod +x /etc/rc.d/rc.local”命令,权限才会添加成功。

 

  1. 登录弹性云主机。

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

ping I 源端云主机主网卡地址 目的端云主机地址

  1. 执行以下命令,查看云主机网卡名称。

ifconfig

  1. 为云主机配置临时路由。

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

ip route add default via 子网网关 dev 网卡名称 table 路由表名称      //网卡名称请填写步骤3中查询出的名称。

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 路由表名称

# 主网卡

ip route add default via 172.16.0.1 dev eth0 table 10

ip route add 172.16.0.0/20 dev eth0 table 10

ip rule add from 172.16.0.55 table 10

# 辅助网卡

ip route add default via 172.25.0.1 dev eth1 table 20

ip route add 172.25.0.0/25 dev eth1 table 20

ip rule add from 172.25.0.3 table 20

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

ip rule

ip route show table 主网卡路由表名称       //路由表名称为自定义的名称

ip route show table 辅助网卡路由表名称

ip rule

ip route show table 10

ip route show table 20

# 回显显示类似如下信息,表示策略路由添加成功。

[root@ecs1 ~]# ip rule

0:      from all lookup local

32764:  from 172.25.0.3 lookup 20

32765:  from 172.16.0.55 lookup 10

32766:  from all lookup main

32767:  from all lookup default

[root@ecs1 ~]# ip route show table 10

default via 172.16.0.1  dev eth0

1172.16.0.0/20 dev eth0 scope link

[root@ecs1 ~]# ip route show table 20

default via 172.25.0.1 dev eth1

172.25.0.0/25 dev eth1 scope link

 

  1. 执行以下命令,验证源端云主机和目的端云主机是否可以正常通信。

ping I 源端云主机主网卡地址 目的端云主机地址

ping I 源端云主机辅助网卡地址 目的端云主机地址

ping -I 172.16.0.55 172.18.0.16

ping -I 172.25.0.3 172.18.0.16

# 回显显示类似如下信息,两个网卡均可以和目的端正常通信,表示策略路由配置成功。

[root@ecs1 ~]# ping -I 172.16.0.55 172.18.0.16

PING 172.18.0.16 (172.18.0.16) from 172.16.0.55 : 56(84) bytes of data.

64 bytes from 172.18.0.16: icmp_seq=1 ttl=64 time=0.775 ms

64 bytes from 172.18.0.16: icmp_seq=2 ttl=64 time=0.268 ms

64 bytes from 172.18.0.16: icmp_seq=3 ttl=64 time=0.220 ms

64 bytes from 172.18.0.16: icmp_seq=4 ttl=64 time=0.167 ms

^C

--- 172.18.0.16 ping statistics ---

4 packets transmitted, 4 received, 0% packet loss, time 102ms

rtt min/avg/max/mdev = 0.167/0.357/0.775/0.244 ms

[root@ecs-resource ~]# ping -I 172.25.0.3 172.18.0.16

PING 172.18.0.16 (172.18.0.16) from 172.25.0.3 : 56(84) bytes of data.

64 bytes from 172.18.0.16: icmp_seq=1 ttl=64 time=2.84 ms

64 bytes from 172.18.0.16: icmp_seq=2 ttl=64 time=0.258 ms

64 bytes from 172.18.0.16: icmp_seq=3 ttl=64 time=0.234 ms

64 bytes from 172.18.0.16: icmp_seq=4 ttl=64 time=0.153 ms

^C

--- 172.18.0.16 ping statistics ---

4 packets transmitted, 4 received, 0% packet loss, time 92ms

rtt min/avg/max/mdev = 0.153/0.871/2.840/1.137 ms

 

  1. 为云主机配置永久路由。

  1. 执行以下命令,打开“/etc/rc.local”文件。

vi /etc/rc.local

  1. i进入编辑模式。

  1. 在文件末尾添加以下配置。

# wait for nics up

sleep 5

# Add v4 routes for eth0

ip route flush table 10

ip route add default via 172.16.0.1 dev eth0 table 10

ip route add 172.16.0.0/20 dev eth0 table 10

ip rule add from 172.16.0.55 table 10

# Add v4 routes for eth1

ip route flush table 20

ip route add default via 172.25.0.1 dev eth1 table 20

ip route add 172.25.0.0/25 dev eth1 table 20

ip rule add from 172.25.0.3 table 20

# Add v4 routes for cloud-init

ip rule add to 169.254.169.254 table main

参数说明如下:

  1. ESC退出,并输入:wq!保存配置。

  1. 执行以下命令,为“/etc/rc.local”文件添加执行权限。

chmod +x /etc/rc.local

  1. 执行以下命令,重启云主机。

reboot

  1. 请参考步骤4,检查永久策略路由添加情况,并验证源端和目的通信是否正常。

Linux弹性云主机配置策略路由(IPv6

配置IPv6策略路由前,先确认做过IPv6相关的配置只需要确保ECS可以正常获取动态IPv6地址即可。

  • 配置策略路由前,请收集需要的云服务器网卡地址等信息。

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

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

  • 对于IPv6场景,不需要在云服务器内配置策略路由。

 

  1. 登录弹性云服务器。

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

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

ip addr

回显类似如下信息,eth0eth1为云服务器的网卡,只有一行inet6地址,为fe80开头,表示该云服务器已开启IPv6协议栈,但是未获取到IPv6地址,需要继续执行3.b~3.g,获取IPv6地址。

[root@ecs-resource ~]# ip addr

...

2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP group default qlen 1000

    link/ether fa:16:3e:4f:92:d2 brd ff:ff:ff:ff:ff:ff

    inet 192.168.0.226/24 brd 192.168.0.255 scope global dynamic noprefixroute eth0

       valid_lft 31535994sec preferred_lft 31535994sec

    inet6 fe80::f816:3eff:fe4f:92d2/64 scope link noprefixroute

       valid_lft forever preferred_lft forever

3: eth1: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP group default qlen 1000

    link/ether fa:16:3e:d2:61:ef brd ff:ff:ff:ff:ff:ff

    inet 192.168.1.6/24 brd 192.168.1.255 scope global dynamic noprefixroute eth1

       valid_lft 31535994sec preferred_lft 31535994sec

    inet6 fe80::f816:3eff:fed2:61ef/64 scope link noprefixroute

       valid_lft forever preferred_lft forever

 

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

ifconfig

回显类似如下信息,通过网卡地址查找对应的网卡名称,本示例中:

[root@ecs-resource ~]# ifconfig

eth0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500

        inet 192.168.0.58  netmask 255.255.255.0  broadcast 192.168.0.255

        inet6 fe80::f816:3eff:feca:2330  prefixlen 64  scopeid 0x20<link>

        ether fa:16:3e:ca:23:30  txqueuelen 1000  (Ethernet)

        RX packets 528  bytes 119212 (116.4 KiB)

        RX errors 0  dropped 0  overruns 0  frame 0

        TX packets 623  bytes 98235 (95.9 KiB)

        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

 

eth1: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500

        inet 192.168.1.237 netmask 255.255.255.0  broadcast 192.168.1.255

        inet6 fe80::f816:3eff:feee:2d00  prefixlen 64  scopeid 0x20<link>

        ether fa:16:3e:ee:2d:00  txqueuelen 1000  (Ethernet)

        RX packets 16  bytes 2066 (2.0 KiB)

        RX errors 0  dropped 0  overruns 0  frame 0

        TX packets 12  bytes 1332 (1.3 KiB)

        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

 

  1. 执行以下步骤,编辑主网卡的ifcfg文件。

1.执行以下命令,打开主网卡的ifcfg文件。

vi /etc/sysconfig/network-scripts/ifcfg-主网卡名称

其中,主网卡名称为3.b中查询到的名称。

命令示例:

vi /etc/sysconfig/network-scripts/ifcfg-eth0

2.i进入编辑模式。

3.在文件末尾添加以下配置。

IPV6INIT="yes"

DHCPV6C="yes"

4.ESC退出,并输入:wq!保存配置。

  1. 执行以下步骤,编辑扩展网卡的ifcfg文件。

1.执行以下命令,打开扩展网卡的ifcfg文件。

vi /etc/sysconfig/network-scripts/ifcfg-扩展网卡名称

其中,扩展网卡名称为3.b中查询到的名称。

命令示例:

vi /etc/sysconfig/network-scripts/ifcfg-eth1

2.i进入编辑模式。

3.在文件末尾添加以下配置。

IPV6INIT="yes"

DHCPV6C="yes"

4.ESC退出,并输入:wq!保存配置。

  1. 执行以下步骤,编辑“/etc/sysconfig/network”文件。

1.执行以下命令,打开“/etc/sysconfig/network”文件。

vi /etc/sysconfig/network

2.i进入编辑模式。

3.在文件末尾添加以下配置。

NETWORKING_IPV6="yes"

4.ESC退出,并输入:wq!保存配置。

  1. 执行以下命令,重启网络服务使配置生效。

systemctl restart NetworkManager

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

ip addr

回显类似如下信息,eth0eth1网卡有两行inet6地址,新增一行2407开头的地址,表示配置成功。

[root@ecs-resource ~]# ip addr

...

2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP group default qlen 1000

    link/ether fa:16:3e:4f:92:d2 brd ff:ff:ff:ff:ff:ff

    inet 192.168.0.226/24 brd 192.168.0.255 scope global dynamic noprefixroute eth0

       valid_lft 31535994sec preferred_lft 31535994sec

    inet6 2407:c080:802:aba:fe7f:f7fb:b3d1:ed68/128 scope global dynamic noprefixroute

       valid_lft 31535994sec preferred_lft 31535994sec

    inet6 fe80::f816:3eff:fe4f:92d2/64 scope link noprefixroute

       valid_lft forever preferred_lft forever

3: eth1: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP group default qlen 1000

    link/ether fa:16:3e:d2:61:ef brd ff:ff:ff:ff:ff:ff

    inet 192.168.1.6/24 brd 192.168.1.255 scope global dynamic noprefixroute eth1

       valid_lft 31535994sec preferred_lft 31535994sec

    inet6 2407:c080:802:be6:235a:7186:c7b5:6191/128 scope global dynamic noprefixroute

       valid_lft 31535994sec preferred_lft 31535994sec

    inet6 fe80::f816:3eff:fed2:61ef/64 scope link noprefixroute

       valid_lft forever preferred_lft forever

 

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

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

命令示例:

ping6 -I 2407:c080:802:aba:ac57:214e:125d:ab3e 2407:c080:802:be7:60ab:e557:c60c:6b7d

回显类似如下信息,表示可以正常通信。

[root@ecs-resource ~]# ping6 -I 2407:c080:802:aba:ac57:214e:125d:ab3e 2407:c080:802:be7:60ab:e557:c60c:6b7d

PING 2407:c080:802:be7:60ab:e557:c60c:6b7d(2407:c080:802:be7:60ab:e557:c60c:6b7d) from 2407:c080:802:aba:ac57:214e:125d:ab3e : 56 data bytes

64 bytes from 2407:c080:802:be7:60ab:e557:c60c:6b7d: icmp_seq=1 ttl=64 time=0.656 ms

64 bytes from 2407:c080:802:be7:60ab:e557:c60c:6b7d: icmp_seq=2 ttl=64 time=0.246 ms

64 bytes from 2407:c080:802:be7:60ab:e557:c60c:6b7d: icmp_seq=3 ttl=64 time=0.231 ms

64 bytes from 2407:c080:802:be7:60ab:e557:c60c:6b7d: icmp_seq=4 ttl=64 time=0.168 ms

^C

--- 2407:c080:802:be7:60ab:e557:c60c:6b7d ping statistics ---

4 packets transmitted, 4 received, 0% packet loss, time 67ms

rtt min/avg/max/mdev = 0.168/0.325/0.656/0.193 ms

 

  1. 执行以下命令,验证源端云服务器和目的端云服务器是否可以正常通信。

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

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

命令示例:

ping6 -I 2407:c080:802:aba:ac57:214e:125d:ab3e 2407:c080:802:be7:60ab:e557:c60c:6b7d

ping6 -I 2407:c080:802:be6:c741:db0f:4dbb:21db 2407:c080:802:be7:60ab:e557:c60c:6b7d

回显类似如下信息,两个网卡均可以和目的端正常通信,表示策略路由配置成功。

[root@ecs-resource ~]# ping6 -I 2407:c080:802:aba:ac57:214e:125d:ab3e 2407:c080:802:be7:60ab:e557:c60c:6b7d

PING 2407:c080:802:be7:60ab:e557:c60c:6b7d(2407:c080:802:be7:60ab:e557:c60c:6b7d) from 2407:c080:802:aba:ac57:214e:125d:ab3e : 56 data bytes

64 bytes from 2407:c080:802:be7:60ab:e557:c60c:6b7d: icmp_seq=1 ttl=64 time=0.656 ms

64 bytes from 2407:c080:802:be7:60ab:e557:c60c:6b7d: icmp_seq=2 ttl=64 time=0.246 ms

64 bytes from 2407:c080:802:be7:60ab:e557:c60c:6b7d: icmp_seq=3 ttl=64 time=0.231 ms

64 bytes from 2407:c080:802:be7:60ab:e557:c60c:6b7d: icmp_seq=4 ttl=64 time=0.168 ms

^C

--- 2407:c080:802:be7:60ab:e557:c60c:6b7d ping statistics ---

4 packets transmitted, 4 received, 0% packet loss, time 67ms

rtt min/avg/max/mdev = 0.168/0.325/0.656/0.193 ms

[root@ecs-resource ~]# ping6 -I 2407:c080:802:be6:c741:db0f:4dbb:21db 2407:c080:802:be7:60ab:e557:c60c:6b7d

PING 2407:c080:802:be7:60ab:e557:c60c:6b7d(2407:c080:802:be7:60ab:e557:c60c:6b7d) from 2407:c080:802:be6:c741:db0f:4dbb:21db : 56 data bytes

64 bytes from 2407:c080:802:be7:60ab:e557:c60c:6b7d: icmp_seq=1 ttl=64 time=0.630 ms

64 bytes from 2407:c080:802:be7:60ab:e557:c60c:6b7d: icmp_seq=2 ttl=64 time=0.237 ms

64 bytes from 2407:c080:802:be7:60ab:e557:c60c:6b7d: icmp_seq=3 ttl=64 time=0.238 ms

64 bytes from 2407:c080:802:be7:60ab:e557:c60c:6b7d: icmp_seq=4 ttl=64 time=0.207 ms

^C

--- 2407:c080:802:be7:60ab:e557:c60c:6b7d ping statistics ---

4 packets transmitted, 4 received, 0% packet loss, time 105ms

rtt min/avg/max/mdev = 0.207/0.328/0.630/0.174 ms

为多网卡Windows弹性云主机配置策略路由

本文档以Windows 2012 64bit为例,指导用户为双网卡Windows云主机配置策略路由。

Windows弹性云主机配置策略路由(IPv4

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

  • 系统已存在主网卡策略路由,不需要再添加。

  • 如果云主机有多张辅助网卡,请依次为所有辅助网卡添加策略路由。

 

  1. 登录弹性云主机。

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

ping S 源端云主机主网卡地址 目的端云主机地址

  1. 执行以下命令,添加辅助网卡的策略路由。

route add -p 0.0.0.0 mask 0.0.0.0 辅助网卡子网网关 metric 路由优先级

参数说明如下:

# 0.0.0.0/0:默认路由,请不要修改。

# 辅助网卡子网网关:填写“收集弹性云主机网络信息”章节收集的地址。

# 路由优先级:辅助网卡优先级必须小于主网卡,数字越大优先级越低。

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

route print

  1. 执行以下命令,验证源端云主机和目的端云主机是否可以正常通信。

ping S 源端云主机主网卡地址 目的端云主机地址

ping S 源端云主机辅助网卡地址 目的端云主机地址

Windows弹性云主机配置策略路由(IPv6

  • 配置策略路由前,请收集需要的云服务器网卡地址等信息。

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

  • 本章节云服务器使用的操作系统为Windows 2012 64bit公共镜像,无需额外配置,云服务器可自动获取获取到IPv6地址。如果您的云服务器无法自动获取到IPv6地址,请参见相关文档进行配置。

  • 本章节示例中,云服务器使用Windows 2012 64bit公共镜像,对于IPv6场景,不需要在云服务器内配置策略路由,双网卡可正常通信。

 

  1. 登录弹性云服务器。

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

ipconfig

回显类似如下信息,每个网卡可以查看到IPv6地址,为2407开头的地址,表示可以自动获取到IPv6地址,不用进行配置。

  1. 执行以下命令,验证源端云服务器和目的端云服务器是否可以正常通信。

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

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

命令示例:

ping -6 -S 2407:c080:802:aba:8999:5e61:e19:cf7e 2407:c080:802:be7:c2e6:d99c:b685:c6c8

ping -6 -S 2407:c080:802:be6:ec23:ec4:c886:cc1 2407:c080:802:be7:c2e6:d99c:b685:c6c8

回显类似如下信息,两个网卡均可以和目的端正常通信,表示策略路由配置成功。