为多网卡Linux云服务器配置策略路由 (IPv4/IPv6)
操作场景
本文档以CentOS 8.0 64bit为例,指导用户为双网卡Linux云服务器配置策略路由。
- IPv4:操作步骤 (Linux IPv4)
- IPv6:操作步骤 (Linux IPv6)
关于云服务器双网卡的背景知识及组网说明,请参见方案概述。
操作步骤 (Linux IPv4)
- 收集配置策略路由需要的云服务器网卡地址等信息。
具体操作请参见收集云服务器网络信息。
- 登录弹性云服务器。
弹性云服务器有多种登录方法,具体请参见登录弹性云服务器。
- 执行以下命令,检查源端云服务器主网卡和目的端云服务器通信情况。
命令示例:
ping -I 10.0.0.115 10.0.2.12
回显类似如下信息,表示可以正常通信。[root@ecs-resource ~]# ping -I 10.0.0.115 10.0.2.12 PING 10.0.2.12 (10.0.2.12) from 10.0.0.115 : 56(84) bytes of data. 64 bytes from 10.0.2.12: icmp_seq=1 ttl=64 time=0.775 ms 64 bytes from 10.0.2.12: icmp_seq=2 ttl=64 time=0.268 ms 64 bytes from 10.0.2.12: icmp_seq=3 ttl=64 time=0.220 ms 64 bytes from 10.0.2.12: icmp_seq=4 ttl=64 time=0.167 ms ^C --- 10.0.2.12 ping statistics ---
配置多网卡策略路由前,请务必确保源端主网卡和目的端通信正常。
- 执行以下命令,查看云服务器网卡名称。
回显类似如下信息,通过网卡地址查找对应的网卡名称,本示例中:
- 10.0.0.115为主网卡地址,对应的名称为eth0。
- 10.0.1.183为扩展网卡地址,对应的名称为eth1。
[root@ecs-resource ~]# ifconfig eth0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500 inet 10.0.0.115 netmask 255.255.255.0 broadcast 10.0.0.255 inet6 fe80::f816:3eff:fe92:6e0e prefixlen 64 scopeid 0x20<link> ether fa:16:3e:92:6e:0e txqueuelen 1000 (Ethernet) RX packets 432288 bytes 135762012 (129.4 MiB) RX errors 0 dropped 0 overruns 0 frame 1655 TX packets 423744 bytes 106716932 (101.7 MiB) TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0 eth1: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500 inet 10.0.1.183 netmask 255.255.255.0 broadcast 10.0.1.255 inet6 fe80::f816:3eff:febf:5818 prefixlen 64 scopeid 0x20<link> ether fa:16:3e:bf:58:18 txqueuelen 1000 (Ethernet) RX packets 9028 bytes 536972 (524.3 KiB) RX errors 0 dropped 0 overruns 0 frame 1915 TX packets 6290 bytes 272473 (266.0 KiB) TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
- 执行以下步骤,为云服务器配置临时路由。
- 依次执行以下命令,添加主网卡和扩展网卡的策略路由。
- 主网卡
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 路由表名称
命令示例:
- 主网卡
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.115 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.183 table 20
如果云服务器有多张网卡,请依次为所有网卡添加策略路由。
- 主网卡
- 依次执行以下命令,确认策略路由是否添加成功。
ip route show table 主网卡路由表名称
ip route show table 扩展网卡路由表名称
其中,路由表名称为5.a中自定义的名称。
命令示例:
ip rule
ip route show table 10
ip route show table 20
回显类似如下信息,表示策略路由添加成功。[root@ecs-resource ~]# ip rule 0: from all lookup local 32764: from 10.0.1.183 lookup 20 32765: from 10.0.0.115 lookup 10 32766: from all lookup main 32767: from all lookup default [root@ecs-resource ~]# ip route show table 10 default via 10.0.0.1 dev eth0 10.0.0.0/24 dev eth0 scope link [root@ecs-resource ~]# ip route show table 20 default via 10.0.1.1 dev eth1 10.0.1.0/24 dev eth1 scope link
- 执行以下命令,验证源端云服务器和目的端云服务器是否可以正常通信。
ping -I 源端云服务器扩展网卡地址 目的端云服务器地址
命令示例:
ping -I 10.0.0.115 10.0.2.12
ping -I 10.0.1.183 10.0.2.12
回显类似如下信息,两个网卡均可以和目的端正常通信,表示策略路由配置成功。
[root@ecs-resource ~]# ping -I 10.0.0.115 10.0.2.12 PING 10.0.2.12 (10.0.2.12) from 10.0.0.115 : 56(84) bytes of data. 64 bytes from 10.0.2.12: icmp_seq=1 ttl=64 time=0.775 ms 64 bytes from 10.0.2.12: icmp_seq=2 ttl=64 time=0.268 ms 64 bytes from 10.0.2.12: icmp_seq=3 ttl=64 time=0.220 ms 64 bytes from 10.0.2.12: icmp_seq=4 ttl=64 time=0.167 ms ^C --- 10.0.2.12 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 10.0.1.183 10.0.2.12 PING 10.0.2.12 (10.0.2.12) from 10.0.1.183 : 56(84) bytes of data. 64 bytes from 10.0.2.12: icmp_seq=1 ttl=64 time=2.84 ms 64 bytes from 10.0.2.12: icmp_seq=2 ttl=64 time=0.258 ms 64 bytes from 10.0.2.12: icmp_seq=3 ttl=64 time=0.234 ms 64 bytes from 10.0.2.12: icmp_seq=4 ttl=64 time=0.153 ms ^C --- 10.0.2.12 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
- 依次执行以下命令,添加主网卡和扩展网卡的策略路由。
- 执行以下步骤,为云服务器配置永久路由。
- 执行以下命令,打开“/etc/rc.local”文件。
vi /etc/rc.local
- 按i进入编辑模式。
- 在文件末尾添加以下配置。
# wait for nics up sleep 5 # Add v4 routes for eth0 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.115 table 10 # Add v4 routes for eth1 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.183 table 20 # Add v4 routes for cloud-init ip rule add to 169.254.169.254 table main
其中,参数说明如下:
- 按ESC退出,并输入:wq!保存配置。
- 执行以下命令,为“/etc/rc.local”文件添加执行权限。
chmod +x /etc/rc.local
如果您的操作系统为Redhat、EulerOS,执行完6.e后,还需要执行以下命令,权限才会添加成功。
chmod +x /etc/rc.d/rc.local
- 执行以下命令,重启云服务器。
“/etc/rc.local”文件添加中添加的策略路由,需要重启云服务器后才会生效,此处请确保不影响业务再重启云服务器操作。
- 参考5.b~5.c,检查策略路由添加情况,并验证源端和目的通信是否正常。
- 执行以下命令,打开“/etc/rc.local”文件。
操作步骤 (Linux IPv6)
配置IPv6策略路由前,先确认做过IPv6相关的配置只需要确保ECS可以正常获取动态IPv6地址即可。
- 收集配置策略路由需要的云服务器网卡地址等信息。
具体操作请参见收集云服务器网络信息。
- 登录弹性云服务器。
弹性云服务器有多种登录方法,具体请参见登录弹性云服务器。
- 执行以下步骤,确保云服务器已开启IPv6协议栈,并且正常获取到IPv6地址。
对于源端和目的端的IPv6云服务器,均需要执行该操作,确保云服务器已获取到IPv6地址,否则云服务器无法通过IPv6地址进行通信。
本章节云服务使用的操作系统为CentOS 8.0 64bit公共镜像,以下针对该操作系统举例,更多操作系统配置指导,请参见动态获取IPv6地址的“Linux操作系统(手动配置启用IPv6)” 小节。
- 执行以下命令,检查云服务器是否可以获取到IPv6地址。
回显类似如下信息,eth0和eth1为云服务器的网卡,只有一行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
- 执行以下命令,查看云服务器网卡名称。
回显类似如下信息,通过网卡地址查找对应的网卡名称,本示例中:
- 192.168.0.58为主网卡地址,对应的名称为eth0。
- 192.168.1.237为扩展网卡地址,对应的名称为eth1。
[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
- 执行以下步骤,编辑主网卡的ifcfg文件。
- 执行以下命令,打开主网卡的ifcfg文件。
vi /etc/sysconfig/network-scripts/ifcfg-主网卡名称
其中,主网卡名称为3.b中查询到的名称。
命令示例:
vi /etc/sysconfig/network-scripts/ifcfg-eth0
- 按i进入编辑模式。
- 在文件末尾添加以下配置。
IPV6INIT="yes" DHCPV6C="yes"
- 按ESC退出,并输入:wq!保存配置。
- 执行以下命令,打开主网卡的ifcfg文件。
- 执行以下步骤,编辑扩展网卡的ifcfg文件。
- 执行以下命令,打开扩展网卡的ifcfg文件。
vi /etc/sysconfig/network-scripts/ifcfg-扩展网卡名称
其中,扩展网卡名称为3.b中查询到的名称。
命令示例:
vi /etc/sysconfig/network-scripts/ifcfg-eth1
- 按i进入编辑模式。
- 在文件末尾添加以下配置。
IPV6INIT="yes" DHCPV6C="yes"
- 按ESC退出,并输入:wq!保存配置。
- 执行以下命令,打开扩展网卡的ifcfg文件。
- 执行以下步骤,编辑“/etc/sysconfig/network”文件。
- 执行以下命令,打开“/etc/sysconfig/network”文件。
vi /etc/sysconfig/network
- 按i进入编辑模式。
- 在文件末尾添加以下配置。
NETWORKING_IPV6="yes"
- 按ESC退出,并输入:wq!保存配置。
- 执行以下命令,打开“/etc/sysconfig/network”文件。
- 执行以下命令,重启网络服务使配置生效。
- 执行以下命令,检查云服务器是否可以获取到IPv6地址。
回显类似如下信息,eth0和eth1网卡有两行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
- 执行以下命令,检查云服务器是否可以获取到IPv6地址。
- 执行以下命令,检查源端云服务器主网卡和目的端云服务器通信情况。
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
配置多网卡策略路由前,请务必确保源端主网卡和目的端通信正常。
- 执行以下步骤,关闭主网卡的“源/目的检查”开关。
- 登录管理控制台。
- 在管理控制台左上角单击,选择区域和项目。
- 在服务列表,选择 。
- 在弹性云服务器列表中,选择目标弹性云服务器,并单击名称对应的超链接。
- 选择“弹性网卡”页签,单击展开主网卡区域,关闭“源/目的检查”。
对于IPv6场景,不需要在云服务器内配置策略路由,只需要关闭主网卡的“源/目的检查”开关即可。
- 登录弹性云服务器。
弹性云服务器有多种登录方法,具体请参见登录弹性云服务器。
- 执行以下命令,验证源端云服务器和目的端云服务器是否可以正常通信。
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