自动为多网卡Linux云服务器配置IPv4和IPv6策略路由(HCE 2.0/CentOS 8.0及以上)
操作场景
本文档指导用户使用自动化脚本为双网卡Linux云服务器配置策略路由,自动化脚本支持的操作系统包括Huawei Cloud EulerOS 2.0、CentOS 8.0及以上版本。
- IPv4:若需实现多网卡云服务器间的IPv4通信,需要配置IPv4路由,请执行Linux IPv4操作步骤。
- IPv6:若需实现多网卡云服务器间的IPv6通信,需要配置IPv6路由,请执行Linux IPv6操作步骤。
- IPv4/IPv6双栈:若需实现多网卡间的IPv4和IPv6通信,需要同时配置IPv4和IPv6路由,请依次执行Linux IPv4/IPv6双栈操作步骤。
关于云服务器双网卡的背景知识及组网说明,请参见方案概述。
Linux IPv4操作步骤
- 收集配置策略路由需要的云服务器IPv4网卡地址等信息。
具体操作请参见收集云服务器网络信息。
本示例中,云服务器的网络信息如表1所示。
- 登录源端云服务器。
ECS有多种登录方法,具体请参见登录弹性云服务器。
- 执行以下命令,检查源端云服务器主网卡和目的端云服务器IPv4网络通信情况。
配置多网卡策略路由前,请务必确保源端主网卡和目的端通信正常。
ping -I 源端云服务器主网卡IPv4地址 目的端云服务器网卡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为主网卡IPv4地址,对应的名称为eth0。
- 10.0.1.183为扩展网卡IPv4地址,对应的名称为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
- 执行以下步骤,创建自动化脚本配置IPv4路由。
- 执行以下命令,创建自动化配置脚本文件15-policy-route.sh。
vi /etc/NetworkManager/dispatcher.d/15-policy-route.sh
- 按i进入编辑模式。
- 在文件中添加自动化脚本配置文件。
#!/bin/bash if [ "$2" != "up" ]; then exit 0 fi interface=$1 check_route_table() { local route_table_id=$1 local ip_version=$2 local max_attempts=100 local attempts=0 while [ $attempts -lt $max_attempts ]; do output=$(ip -$ip_version route show table $route_table_id &>/dev/null) if [ $? -ne 0 ] || [ -z "$output" ]; then break else route_table_id=$((route_table_id + 1)) attempts=$((attempts + 1)) fi done echo $route_table_id } add_ipv4_route_table() { local DEFAULT_IPV4_ROUTE_TABLE_ID=1000 v4_route_table_id=$(ip route show table all | grep -F "default via $gateway dev $interface table" | awk '{print $NF}') if [ -z $v4_route_table_id ]; then interface_number=$(echo $interface | grep -o '[0-9]*$') if [ -z "$interface_number" ]; then v4_route_table_id="$DEFAULT_IPV4_ROUTE_TABLE_ID" else v4_route_table_id=$((DEFAULT_IPV4_ROUTE_TABLE_ID + interface_number)) fi v4_route_table_id=$(check_route_table $v4_route_table_id 4) echo "add policy route for dev: $interface table: $v4_route_table_id subnet: $subnet gateway: $gateway" ip route add default via $gateway dev $interface table $v4_route_table_id ip route add $subnet dev $interface table $v4_route_table_id fi } generate_ipv4_policy_route() { subnet=$(nmcli device show $interface | grep -F 'IP4.ROUTE' | grep -F 'nh = 0.0.0.0' | cut -d'=' -f2 | cut -d',' -f1 | tr -d ' ' | head -n 1) gateway=$(ipcalc -i $subnet | awk '/HostMin/ {print $2}') add_ipv4_route_table nmcli device show $interface | grep -F 'IP4.ADDRESS' | while read -r line; do IP=$(echo $line | awk '{print $2}' | cut -d'/' -f1) if ip rule list | grep -F "$v4_route_table_id" | grep -q "$IP"; then echo "ip rule already exists for $IP with table $v4_route_table_id" continue fi echo "Adding rule for $IP on $interface with table $v4_route_table_id" ip rule add from $IP table $v4_route_table_id done } generate_ipv4_policy_route
- 按ESC退出,并输入:wq!保存配置。
- 执行以下命令,查看自动化配置脚本文件15-policy-route.sh的权限。
ll /etc/NetworkManager/dispatcher.d/
回显类似如下信息,15-policy-route.sh权限为-rw-r--r--,和其他系统文件(比如10-ifcfg-rh-routes.sh)的权限(-rwxr-xr-x)不一样。[root@ecs-resource ~]# ll /etc/NetworkManager/dispatcher.d/ total 36 -rwxr-xr-x. 1 root root 3840 Feb 26 17:45 10-ifcfg-rh-routes.sh -rwxr-xr-x. 1 root root 1062 Feb 26 17:45 11-dhclient -rw-r--r-- 1 root root 2019 Jun 18 12:21 15-policy-route.sh -rwxr-xr-x. 1 root root 1412 Feb 26 17:45 20-chrony-dhcp -rwxr-xr-x. 1 root root 455 Feb 26 17:45 20-chrony-onoffline -rwxrwxr-x 1 root root 719 May 10 2019 hook-network-manager drwxr-xr-x. 2 root root 4096 Apr 18 17:12 no-wait.d drwxr-xr-x. 2 root root 4096 Feb 26 17:45 pre-down.d drwxr-xr-x. 2 root root 4096 Apr 18 17:12 pre-up.d
- 执行以下命令,为自动化配置脚本文件15-policy-route.sh添加权限。
sudo chown root:root /etc/NetworkManager/dispatcher.d/15-policy-route.sh
sudo chmod 755 /etc/NetworkManager/dispatcher.d/15-policy-route.sh
- 执行以下命令,再次查看自动化配置脚本文件15-policy-route.sh的权限。
ll /etc/NetworkManager/dispatcher.d/
回显类似如下信息,15-policy-route.sh权限为-rwxr-xr-x。[root@ecs-resource ~]# ll /etc/NetworkManager/dispatcher.d/ total 36 -rwxr-xr-x. 1 root root 3840 Feb 26 17:45 10-ifcfg-rh-routes.sh -rwxr-xr-x. 1 root root 1062 Feb 26 17:45 11-dhclient -rwxr-xr-x 1 root root 2019 Jun 18 12:21 15-policy-route.sh -rwxr-xr-x. 1 root root 1412 Feb 26 17:45 20-chrony-dhcp -rwxr-xr-x. 1 root root 455 Feb 26 17:45 20-chrony-onoffline -rwxrwxr-x 1 root root 719 May 10 2019 hook-network-manager drwxr-xr-x. 2 root root 4096 Apr 18 17:12 no-wait.d drwxr-xr-x. 2 root root 4096 Feb 26 17:45 pre-down.d drwxr-xr-x. 2 root root 4096 Apr 18 17:12 pre-up.d
- 执行以下命令,重启网络服务以触发脚本15-policy-route.sh运行。
systemctl restart NetworkManager
重启网络服务时,此处请确保不影响业务再重启。
- 执行以下命令,创建自动化配置脚本文件15-policy-route.sh。
- 依次执行以下命令,确认网卡IPv4策略路由是否添加成功。
ip route show table 1000
ip route show table 1001
其中,table 1000为主网卡的路由表名称,table 1001为扩展网卡的路由表名称。
回显类似如下信息,表示IPv4策略路由添加成功。[root@ecs-resource ~]# ip rule 0: from all lookup local 32764: from 10.0.1.183 lookup 1001 32765: from 10.0.0.115 lookup 1000 32766: from all lookup main 32767: from all lookup default [root@ecs-resource ~]# ip route show table 1000 default via 10.0.0.1 dev eth0 10.0.0.0/24 dev eth0 scope link [root@ecs-resource ~]# ip route show table 1001 default via 10.0.1.1 dev eth1 10.0.1.0/24 dev eth1 scope link
- 执行以下命令,验证源端云服务器和目的端云服务器是否可以通过IPv4地址正常通信。
ping -I 源端云服务器主网卡IPv4地址 目的端云服务器网卡IPv4地址
ping -I 源端云服务器扩展网卡IPv4地址 目的端云服务器网卡IPv4地址
命令示例:
ping -I 10.0.0.115 10.0.2.12
ping -I 10.0.1.183 10.0.2.12
回显类似如下信息,源端两个IPv4地址均可以和目的端正常通信,表示IPv4策略路由配置成功。[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.231 ms 64 bytes from 10.0.2.12: icmp_seq=2 ttl=64 time=0.195 ms ^C --- 10.0.2.12 ping statistics --- 2 packets transmitted, 2 received, 0% packet loss, time 1043ms rtt min/avg/max/mdev = 0.195/0.213/0.231/0.018 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=0.274 ms 64 bytes from 10.0.2.12: icmp_seq=2 ttl=64 time=0.196 ms 64 bytes from 10.0.2.12: icmp_seq=3 ttl=64 time=0.125 ms ^C --- 10.0.2.12 ping statistics --- 3 packets transmitted, 3 received, 0% packet loss, time 2042ms rtt min/avg/max/mdev = 0.125/0.198/0.274/0.060 ms
Linux IPv6操作步骤
- 收集配置策略路由需要的云服务器网卡IPv4和IPv6地址等信息。
具体操作请参见收集云服务器网络信息。
本示例中,云服务器的网络信息如表2所示。
表2 Linux IPv4和IPv6信息说明 类型
主网卡
扩展网卡
源端
- 网卡IPv4地址:10.0.0.133
- 网卡IPv6地址:2407:c080:802:1f85:918b:9039:41b2:24a8
- 子网IPv6网段:2407:c080:802:1f85::/64
- 子网IPv6网关:2407:c080:802:1f85::1
- 网卡IPv4地址:10.0.1.120
- 网卡IPv6地址:2407:c080:802:2107:ab85:4a27:d20:2119
- 子网IPv6网段:2407:c080:802:2107::/64
- 子网IPv6网关:2407:c080:802:2107::1
目的端
- 网卡IPv4地址:10.0.2.3
- 网卡IPv6地址:2407:c080:802:2108:96ec:3c49:391a:5ebc
不涉及
- 登录源端云服务器。
ECS有多种登录方法,具体请参见登录弹性云服务器。
- 执行以下步骤,确保云服务器已开启IPv6协议栈,并且正常获取到IPv6地址。
对于源端和目的端的IPv6云服务器,均需要执行该操作,确保云服务器已获取到IPv6地址,否则云服务器无法通过IPv6地址进行通信。
本章节云服务器使用的操作系统适用于CentOS 8.0 64bit和Huawei Cloud EulerOS 2.0 标准版 64位公共镜像,以下针对该操作系统举例,更多操作系统配置指导,请参见动态获取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 mq state UP group default qlen 1000 link/ether fa:16:3e:72:72:f7 brd ff:ff:ff:ff:ff:ff inet 10.0.0.133/24 brd 10.0.0.255 scope global dynamic noprefixroute eth0 valid_lft 315359994sec preferred_lft 315359994sec inet6 fe80::f816:3eff:fe72:72f7/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:72:73:ea brd ff:ff:ff:ff:ff:ff inet 10.0.1.120/24 brd 10.0.1.255 scope global dynamic noprefixroute eth1 valid_lft 315359994sec preferred_lft 315359994sec inet6 fe80::f816:3eff:fe72:73ea/64 scope link noprefixroute valid_lft forever preferred_lft forever
- 执行以下命令,查看云服务器网卡名称。
回显类似如下信息,通过网卡地址查找对应的网卡名称,本示例中:
- 10.0.0.133为主网卡IPv4地址,对应的名称为eth0。
- 10.0.1.120为扩展网卡IPv4地址,对应的名称为eth1。
[root@ecs-resource ~]# ifconfig eth0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500 inet 10.0.0.133 netmask 255.255.255.0 broadcast 10.0.0.255 inet6 fe80::f816:3eff:fe72:72f7 prefixlen 64 scopeid 0x20<link> ether fa:16:3e:72:72:f7 txqueuelen 1000 (Ethernet) RX packets 50917 bytes 71068144 (67.7 MiB) RX errors 0 dropped 0 overruns 0 frame 0 TX packets 4969 bytes 1123356 (1.0 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.120 netmask 255.255.255.0 broadcast 10.0.1.255 inet6 fe80::f816:3eff:fe72:73ea prefixlen 64 scopeid 0x20<link> ether fa:16:3e:72:73:ea txqueuelen 1000 (Ethernet) RX packets 21 bytes 3190 (3.1 KiB) RX errors 0 dropped 0 overruns 0 frame 0 TX packets 26 bytes 2934 (2.8 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 mq state UP group default qlen 1000 link/ether fa:16:3e:72:72:f7 brd ff:ff:ff:ff:ff:ff inet 10.0.0.133/24 brd 10.0.0.255 scope global dynamic noprefixroute eth0 valid_lft 315359994sec preferred_lft 315359994sec inet6 2407:c080:802:1f85:918b:9039:41b2:24a8/128 scope global dynamic noprefixroute valid_lft 7194sec preferred_lft 7194sec inet6 fe80::f816:3eff:fe72:72f7/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:72:73:ea brd ff:ff:ff:ff:ff:ff inet 10.0.1.120/24 brd 10.0.1.255 scope global dynamic noprefixroute eth1 valid_lft 315359994sec preferred_lft 315359994sec inet6 2407:c080:802:2107:ab85:4a27:d20:2119/128 scope global dynamic noprefixroute valid_lft 7195sec preferred_lft 7195sec inet6 fe80::f816:3eff:fe72:73ea/64 scope link noprefixroute valid_lft forever preferred_lft forever
- 登录目的端云服务器,参考3.a~3.g,配置目的云服务器获取IPv6地址。
- 执行以下命令,检查云服务器是否可以获取到IPv6地址。
- 登录源端云服务器,执行以下命令,检查源端云服务器主网卡和目的端云服务器通信情况。
配置多网卡策略路由前,请务必确保源端主网卡和目的端通信正常。
ping6 -I 源端云服务器主网卡IPv6地址 目的端云服务器网卡IPv6地址
命令示例:
ping6 -I 2407:c080:802:1f85:918b:9039:41b2:24a8 2407:c080:802:2108:96ec:3c49:391a:5ebc
回显类似如下信息,表示可以正常通信。[root@ecs-resource ~]# ping6 -I 2407:c080:802:1f85:918b:9039:41b2:24a8 2407:c080:802:2108:96ec:3c49:391a:5ebc PING 2407:c080:802:2108:96ec:3c49:391a:5ebc(2407:c080:802:2108:96ec:3c49:391a:5ebc) from 2407:c080:802:1f85:918b:9039:41b2:24a8 : 56 data bytes 64 bytes from 2407:c080:802:2108:96ec:3c49:391a:5ebc: icmp_seq=1 ttl=64 time=0.283 ms 64 bytes from 2407:c080:802:2108:96ec:3c49:391a:5ebc: icmp_seq=2 ttl=64 time=0.212 ms 64 bytes from 2407:c080:802:2108:96ec:3c49:391a:5ebc: icmp_seq=3 ttl=64 time=0.122 ms ^C --- 2407:c080:802:2108:96ec:3c49:391a:5ebc ping statistics --- 3 packets transmitted, 3 received, 0% packet loss, time 2050ms rtt min/avg/max/mdev = 0.122/0.205/0.283/0.065 ms
- 执行以下步骤,创建自动化脚本配置IPv6路由。
- 执行以下命令,创建自动化配置脚本文件15-policy-route.sh。
vi /etc/NetworkManager/dispatcher.d/15-policy-route.sh
- 按i进入编辑模式。
- 在文件中添加自动化脚本配置文件。
#!/bin/bash if [ "$2" != "up" ]; then exit 0 fi interface=$1 check_route_table() { local route_table_id=$1 local ip_version=$2 local max_attempts=100 local attempts=0 while [ $attempts -lt $max_attempts ]; do output=$(ip -$ip_version route show table $route_table_id &>/dev/null) if [ $? -ne 0 ] || [ -z "$output" ]; then break else route_table_id=$((route_table_id + 1)) attempts=$((attempts + 1)) fi done echo $route_table_id } add_ipv6_route_table() { local DEFAULT_IPV6_ROUTE_TABLE_ID=1100 v6_route_table_id=$(ip -6 route show table all | grep -F "default via $v6_gateway dev $interface table" | grep -oP "table \K\d+") if [ -z $v6_route_table_id ]; then interface_number=$(echo $interface | grep -o '[0-9]*$') if [ -z "$interface_number" ]; then v6_route_table_id=$DEFAULT_IPV6_ROUTE_TABLE_ID else v6_route_table_id=$((DEFAULT_IPV6_ROUTE_TABLE_ID + interface_number)) fi v6_route_table_id=$(check_route_table $v6_route_table_id 6) echo "add policy route for dev: $interface table: $v6_route_table_id v6_subnet: $v6_subnet v6_gateway: $v6_gateway" ip -6 route add default via $v6_gateway dev $interface table $v6_route_table_id ip -6 route add $v6_subnet dev $interface table $v6_route_table_id fi } generate_ipv6_policy_route() { IPV6INIT=$(awk -F= '/^IPV6INIT=/{gsub(/"/, ""); print $2}' "/etc/sysconfig/network-scripts/ifcfg-$interface" | tr -d ' ' | tail -n 1) if [ "$IPV6INIT" != "yes" ]; then echo "$interface IPV6INIT is not set to yes, skip IPv6 policy route configurate." return 0 fi for ((x=0; x<10; x++)); do if (ip address show $interface | grep -F "inet6" | grep -F "dynamic"); then v6_subnet=$(nmcli device show $interface | grep -F 'IP6.ROUTE' | grep -F 'nh = ::'| grep -v 'dst = fe80' | grep -v '/128' | cut -d'=' -f2 | cut -d',' -f1 | tr -d ' ' | head -n 1) v6_gateway=$(ipcalc -6 -i $v6_subnet | awk '/HostMin/ {print $2}')1 add_ipv6_route_table nmcli device show $interface | grep -F 'IP6.ADDRESS' | grep -v "/64" | while read -r line; do IP=$(echo $line | awk '{print $2}' | cut -d'/' -f1) if ip -6 rule list | grep -F "$v6_route_table_id" | grep -q "$IP"; then echo "ip rule already exists for $IP with table $v6_route_table_id" continue fi echo "Adding rule for $IP on $interface with table $v6_route_table_id" ip -6 rule add from $IP table $v6_route_table_id done break fi sleep 1 done } generate_ipv6_policy_route
- 按ESC退出,并输入:wq!保存配置。
- 执行以下命令,查看自动化配置脚本文件15-policy-route.sh的权限。
ll /etc/NetworkManager/dispatcher.d/
回显类似如下信息,15-policy-route.sh权限为-rw-r--r--,和其他系统文件(比如10-ifcfg-rh-routes.sh)的权限(-rwxr-xr-x)不一样。[root@ecs-resource ~]# ll /etc/NetworkManager/dispatcher.d/ total 36 -rwxr-xr-x. 1 root root 3840 Feb 26 17:45 10-ifcfg-rh-routes.sh -rwxr-xr-x. 1 root root 1062 Feb 26 17:45 11-dhclient -rw-r--r-- 1 root root 2515 Jun 18 15:13 15-policy-route.sh -rwxr-xr-x. 1 root root 1412 Feb 26 17:45 20-chrony-dhcp -rwxr-xr-x. 1 root root 455 Feb 26 17:45 20-chrony-onoffline -rwxrwxr-x 1 root root 719 May 10 2019 hook-network-manager drwxr-xr-x. 2 root root 4096 Apr 18 17:12 no-wait.d drwxr-xr-x. 2 root root 4096 Feb 26 17:45 pre-down.d drwxr-xr-x. 2 root root 4096 Apr 18 17:12 pre-up.d
- 执行以下命令,为自动化配置脚本文件15-policy-route.sh添加权限。
sudo chown root:root /etc/NetworkManager/dispatcher.d/15-policy-route.sh
sudo chmod 755 /etc/NetworkManager/dispatcher.d/15-policy-route.sh
- 执行以下命令,再次查看自动化配置脚本文件15-policy-route.sh的权限。
ll /etc/NetworkManager/dispatcher.d/
回显类似如下信息,15-policy-route.sh权限为-rwxr-xr-x。[root@ecs-resource ~]# ll /etc/NetworkManager/dispatcher.d/ total 36 -rwxr-xr-x. 1 root root 3840 Feb 26 17:45 10-ifcfg-rh-routes.sh -rwxr-xr-x. 1 root root 1062 Feb 26 17:45 11-dhclient -rwxr-xr-x 1 root root 2019 Jun 18 12:21 15-policy-route.sh -rwxr-xr-x. 1 root root 1412 Feb 26 17:45 20-chrony-dhcp -rwxr-xr-x. 1 root root 455 Feb 26 17:45 20-chrony-onoffline -rwxrwxr-x 1 root root 719 May 10 2019 hook-network-manager drwxr-xr-x. 2 root root 4096 Apr 18 17:12 no-wait.d drwxr-xr-x. 2 root root 4096 Feb 26 17:45 pre-down.d drwxr-xr-x. 2 root root 4096 Apr 18 17:12 pre-up.d
- 执行以下命令,重启网络服务以触发脚本15-policy-route.sh运行。
systemctl restart NetworkManager
重启网络服务时,此处请确保不影响业务再重启。
- 执行以下命令,创建自动化配置脚本文件15-policy-route.sh。
-
ip -6 rule
ip -6 route show table 1100
ip -6 route show table 1101
其中,table 1100为主网卡的路由表名称,table 1101为扩展网卡的路由表名称。
回显类似如下信息,表示IPv6策略路由添加成功。[root@ecs-resource ~]# ip -6 rule 0: from all lookup local 32764: from 2407:c080:802:2107:ab85:4a27:d20:2119 lookup 1101 32765: from 2407:c080:802:1f85:918b:9039:41b2:24a8 lookup 1100 32766: from all lookup main [root@ecs-resource ~]# ip -6 route show table 1100 2407:c080:802:1f85::/64 dev eth0 metric 1024 pref medium default via 2407:c080:802:1f85::1 dev eth0 metric 1024 pref medium [root@ecs-resource ~]# ip -6 route show table 1101 2407:c080:802:2107::/64 dev eth1 metric 1024 pref medium default via 2407:c080:802:2107::1 dev eth1 metric 1024 pref medium
- 执行以下命令,验证源端云服务器和目的端云服务器可以通过IPv6地址正常通信。
ping -6 -I 源端云服务器主网卡IPv6地址 目的端云服务器网卡IPv6地址
ping -6 -I 源端云服务器扩展网卡IPv6地址 目的端云服务器网卡IPv6地址
命令示例:
ping -6 -I 2407:c080:802:1f85:918b:9039:41b2:24a8 2407:c080:802:2108:96ec:3c49:391a:5ebc
ping -6 -I 2407:c080:802:2107:ab85:4a27:d20:2119 2407:c080:802:2108:96ec:3c49:391a:5ebc
回显类似如下信息,源端两个IPv6地址均可以和目的端正常通信,表示IPv6策略路由配置成功。[root@ecs-resource ~]# ping -6 -I 2407:c080:802:1f85:918b:9039:41b2:24a8 2407:c080:802:2108:96ec:3c49:391a:5ebc PING 2407:c080:802:2108:96ec:3c49:391a:5ebc(2407:c080:802:2108:96ec:3c49:391a:5ebc) from 2407:c080:802:1f85:918b:9039:41b2:24a8 : 56 data bytes 64 bytes from 2407:c080:802:2108:96ec:3c49:391a:5ebc: icmp_seq=1 ttl=64 time=0.328 ms 64 bytes from 2407:c080:802:2108:96ec:3c49:391a:5ebc: icmp_seq=2 ttl=64 time=0.209 ms ^C --- 2407:c080:802:2108:96ec:3c49:391a:5ebc ping statistics --- 2 packets transmitted, 2 received, 0% packet loss, time 1016ms rtt min/avg/max/mdev = 0.209/0.268/0.328/0.059 ms [root@ecs-resource ~]# ping -6 -I 2407:c080:802:2107:ab85:4a27:d20:2119 2407:c080:802:2108:96ec:3c49:391a:5ebc PING 2407:c080:802:2108:96ec:3c49:391a:5ebc(2407:c080:802:2108:96ec:3c49:391a:5ebc) from 2407:c080:802:2107:ab85:4a27:d20:2119 : 56 data bytes 64 bytes from 2407:c080:802:2108:96ec:3c49:391a:5ebc: icmp_seq=1 ttl=64 time=0.345 ms 64 bytes from 2407:c080:802:2108:96ec:3c49:391a:5ebc: icmp_seq=2 ttl=64 time=0.203 ms ^C --- 2407:c080:802:2108:96ec:3c49:391a:5ebc ping statistics --- 2 packets transmitted, 2 received, 0% packet loss, time 1051ms rtt min/avg/max/mdev = 0.203/0.274/0.345/0.071 ms
Linux IPv4/IPv6双栈操作步骤
- 收集配置策略路由需要的云服务器网卡IPv4和IPv6地址等信息。
具体操作请参见收集云服务器网络信息。
本示例中,云服务器的网络信息如表3所示。
表3 Linux IPv4和IPv6信息说明 类型
主网卡
扩展网卡
源端
- 网卡IPv4地址:10.0.0.133
- 网卡IPv6地址:2407:c080:802:1f85:918b:9039:41b2:24a8
- 子网IPv6网段:2407:c080:802:1f85::/64
- 子网IPv6网关:2407:c080:802:1f85::1
- 网卡IPv4地址:10.0.1.120
- 网卡IPv6地址:2407:c080:802:2107:ab85:4a27:d20:2119
- 子网IPv6网段:2407:c080:802:2107::/64
- 子网IPv6网关:2407:c080:802:2107::1
目的端
- 网卡IPv4地址:10.0.2.3
- 网卡IPv6地址:2407:c080:802:2108:96ec:3c49:391a:5ebc
不涉及
- 登录源端云服务器。
ECS有多种登录方法,具体请参见登录弹性云服务器。
- 执行以下命令,检查源端云服务器主网卡和目的端云服务器IPv4网络通信情况。
配置多网卡策略路由前,请务必确保源端主网卡和目的端通信正常。
ping -I 源端云服务器主网卡IPv4地址 目的端云服务器IPv4地址
命令示例:
ping -I 10.0.0.115 10.0.2.12
回显类似如下信息,表示可以正常通信。[root@ecs-resource ~]# ping -I 10.0.0.133 10.0.2.3 PING 10.0.2.3 (10.0.2.3) from 10.0.0.133 : 56(84) bytes of data. 64 bytes from 10.0.2.3: icmp_seq=1 ttl=64 time=0.261 ms 64 bytes from 10.0.2.3: icmp_seq=2 ttl=64 time=0.219 ms ^C --- 10.0.2.3 ping statistics --- 2 packets transmitted, 2 received, 0% packet loss, time 1032ms rtt min/avg/max/mdev = 0.219/0.240/0.261/0.021 ms
- 执行以下步骤,确保云服务器已开启IPv6协议栈,并且正常获取到IPv6地址。
对于源端和目的端的IPv6云服务器,均需要执行该操作,确保云服务器已获取到IPv6地址,否则云服务器无法通过IPv6地址进行通信。
本章节云服务器使用的操作系统适用于CentOS 8.0 64bit和Huawei Cloud EulerOS 2.0 标准版 64位公共镜像,以下针对该操作系统举例,更多操作系统配置指导,请参见动态获取IPv6地址的“Linux操作系统(手动配置启用IPv6)” 小节。
- 执行以下命令,检查云服务器是否可以获取到IPv6地址。
回显类似如下信息,eth0和eth1为云服务器的网卡,只有一行inet6地址,为fe80开头,表示该云服务器已开启IPv6协议栈,但是未获取到IPv6地址,需要继续执行4.b~4.g,获取IPv6地址。
[root@ecs-resource ~]# ip addr ... 2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP group default qlen 1000 link/ether fa:16:3e:72:72:f7 brd ff:ff:ff:ff:ff:ff inet 10.0.0.133/24 brd 10.0.0.255 scope global dynamic noprefixroute eth0 valid_lft 315359994sec preferred_lft 315359994sec inet6 fe80::f816:3eff:fe72:72f7/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:72:73:ea brd ff:ff:ff:ff:ff:ff inet 10.0.1.120/24 brd 10.0.1.255 scope global dynamic noprefixroute eth1 valid_lft 315359994sec preferred_lft 315359994sec inet6 fe80::f816:3eff:fe72:73ea/64 scope link noprefixroute valid_lft forever preferred_lft forever
- 执行以下命令,查看云服务器网卡名称。
回显类似如下信息,通过网卡地址查找对应的网卡名称,本示例中:
- 10.0.0.133为主网卡IPv4地址,对应的名称为eth0。
- 10.0.1.120为扩展网卡IPv4地址,对应的名称为eth1。
[root@ecs-resource ~]# ifconfig eth0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500 inet 10.0.0.133 netmask 255.255.255.0 broadcast 10.0.0.255 inet6 fe80::f816:3eff:fe72:72f7 prefixlen 64 scopeid 0x20<link> ether fa:16:3e:72:72:f7 txqueuelen 1000 (Ethernet) RX packets 50917 bytes 71068144 (67.7 MiB) RX errors 0 dropped 0 overruns 0 frame 0 TX packets 4969 bytes 1123356 (1.0 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.120 netmask 255.255.255.0 broadcast 10.0.1.255 inet6 fe80::f816:3eff:fe72:73ea prefixlen 64 scopeid 0x20<link> ether fa:16:3e:72:73:ea txqueuelen 1000 (Ethernet) RX packets 21 bytes 3190 (3.1 KiB) RX errors 0 dropped 0 overruns 0 frame 0 TX packets 26 bytes 2934 (2.8 KiB) TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0 ...
- 执行以下步骤,编辑主网卡的ifcfg文件。
- 执行以下命令,打开主网卡的ifcfg文件。
vi /etc/sysconfig/network-scripts/ifcfg-主网卡名称
其中,主网卡名称为4.b中查询到的名称。
命令示例:
vi /etc/sysconfig/network-scripts/ifcfg-eth0
- 按i进入编辑模式。
- 在文件末尾添加以下配置。
IPV6INIT="yes" DHCPV6C="yes"
- 按ESC退出,并输入:wq!保存配置。
- 执行以下命令,打开主网卡的ifcfg文件。
- 执行以下步骤,编辑扩展网卡的ifcfg文件。
- 执行以下命令,打开扩展网卡的ifcfg文件。
vi /etc/sysconfig/network-scripts/ifcfg-扩展网卡名称
其中,扩展网卡名称为4.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 mq state UP group default qlen 1000 link/ether fa:16:3e:72:72:f7 brd ff:ff:ff:ff:ff:ff inet 10.0.0.133/24 brd 10.0.0.255 scope global dynamic noprefixroute eth0 valid_lft 315359994sec preferred_lft 315359994sec inet6 2407:c080:802:1f85:918b:9039:41b2:24a8/128 scope global dynamic noprefixroute valid_lft 7194sec preferred_lft 7194sec inet6 fe80::f816:3eff:fe72:72f7/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:72:73:ea brd ff:ff:ff:ff:ff:ff inet 10.0.1.120/24 brd 10.0.1.255 scope global dynamic noprefixroute eth1 valid_lft 315359994sec preferred_lft 315359994sec inet6 2407:c080:802:2107:ab85:4a27:d20:2119/128 scope global dynamic noprefixroute valid_lft 7195sec preferred_lft 7195sec inet6 fe80::f816:3eff:fe72:73ea/64 scope link noprefixroute valid_lft forever preferred_lft forever
- 登录目的端云服务器,参考4.a~4.g,配置目的云服务器获取IPv6地址。
- 执行以下命令,检查云服务器是否可以获取到IPv6地址。
- 登录源端云服务器,执行以下命令,检查源端云服务器主网卡和目的端云服务器通信情况。
配置多网卡策略路由前,请务必确保源端主网卡和目的端通信正常。
ping6 -I 源端云服务器主网卡IPv6地址 目的端云服务器网卡IPv6地址
命令示例:
ping6 -I 2407:c080:802:1f85:918b:9039:41b2:24a8 2407:c080:802:2108:96ec:3c49:391a:5ebc
回显类似如下信息,表示可以正常通信。[root@ecs-resource ~]# ping6 -I 2407:c080:802:1f85:918b:9039:41b2:24a8 2407:c080:802:2108:96ec:3c49:391a:5ebc PING 2407:c080:802:2108:96ec:3c49:391a:5ebc(2407:c080:802:2108:96ec:3c49:391a:5ebc) from 2407:c080:802:1f85:918b:9039:41b2:24a8 : 56 data bytes 64 bytes from 2407:c080:802:2108:96ec:3c49:391a:5ebc: icmp_seq=1 ttl=64 time=0.283 ms 64 bytes from 2407:c080:802:2108:96ec:3c49:391a:5ebc: icmp_seq=2 ttl=64 time=0.212 ms 64 bytes from 2407:c080:802:2108:96ec:3c49:391a:5ebc: icmp_seq=3 ttl=64 time=0.122 ms ^C --- 2407:c080:802:2108:96ec:3c49:391a:5ebc ping statistics --- 3 packets transmitted, 3 received, 0% packet loss, time 2050ms rtt min/avg/max/mdev = 0.122/0.205/0.283/0.065 ms
- 执行以下步骤,创建自动化脚本配置IPv4和IPv6路由。
- 执行以下命令,创建自动化配置脚本文件15-policy-route.sh。
vi /etc/NetworkManager/dispatcher.d/15-policy-route.sh
- 按i进入编辑模式。
- 在文件中添加自动化脚本配置文件。
#!/bin/bash if [ "$2" != "up" ]; then exit 0 fi interface=$1 check_route_table() { local route_table_id=$1 local ip_version=$2 local max_attempts=100 local attempts=0 while [ $attempts -lt $max_attempts ]; do output=$(ip -$ip_version route show table $route_table_id &>/dev/null) if [ $? -ne 0 ] || [ -z "$output" ]; then break else route_table_id=$((route_table_id + 1)) attempts=$((attempts + 1)) fi done echo $route_table_id } add_ipv4_route_table() { local DEFAULT_IPV4_ROUTE_TABLE_ID=1000 v4_route_table_id=$(ip route show table all | grep -F "default via $gateway dev $interface table" | awk '{print $NF}') if [ -z $v4_route_table_id ]; then interface_number=$(echo $interface | grep -o '[0-9]*$') if [ -z "$interface_number" ]; then v4_route_table_id="$DEFAULT_IPV4_ROUTE_TABLE_ID" else v4_route_table_id=$((DEFAULT_IPV4_ROUTE_TABLE_ID + interface_number)) fi v4_route_table_id=$(check_route_table $v4_route_table_id 4) echo "add policy route for dev: $interface table: $v4_route_table_id subnet: $subnet gateway: $gateway" ip route add default via $gateway dev $interface table $v4_route_table_id ip route add $subnet dev $interface table $v4_route_table_id fi } generate_ipv4_policy_route() { subnet=$(nmcli device show $interface | grep -F 'IP4.ROUTE' | grep -F 'nh = 0.0.0.0' | cut -d'=' -f2 | cut -d',' -f1 | tr -d ' ' | head -n 1) gateway=$(ipcalc -i $subnet | awk '/HostMin/ {print $2}') add_ipv4_route_table nmcli device show $interface | grep -F 'IP4.ADDRESS' | while read -r line; do IP=$(echo $line | awk '{print $2}' | cut -d'/' -f1) if ip rule list | grep -F "$v4_route_table_id" | grep -q "$IP"; then echo "ip rule already exists for $IP with table $v4_route_table_id" continue fi echo "Adding rule for $IP on $interface with table $v4_route_table_id" ip rule add from $IP table $v4_route_table_id done } generate_ipv4_policy_route add_ipv6_route_table() { local DEFAULT_IPV6_ROUTE_TABLE_ID=1100 v6_route_table_id=$(ip -6 route show table all | grep -F "default via $v6_gateway dev $interface table" | grep -oP "table \K\d+") if [ -z $v6_route_table_id ]; then interface_number=$(echo $interface | grep -o '[0-9]*$') if [ -z "$interface_number" ]; then v6_route_table_id=$DEFAULT_IPV6_ROUTE_TABLE_ID else v6_route_table_id=$((DEFAULT_IPV6_ROUTE_TABLE_ID + interface_number)) fi v6_route_table_id=$(check_route_table $v6_route_table_id 6) echo "add policy route for dev: $interface table: $v6_route_table_id v6_subnet: $v6_subnet v6_gateway: $v6_gateway" ip -6 route add default via $v6_gateway dev $interface table $v6_route_table_id ip -6 route add $v6_subnet dev $interface table $v6_route_table_id fi } generate_ipv6_policy_route() { IPV6INIT=$(awk -F= '/^IPV6INIT=/{gsub(/"/, ""); print $2}' "/etc/sysconfig/network-scripts/ifcfg-$interface" | tr -d ' ' | tail -n 1) if [ "$IPV6INIT" != "yes" ]; then echo "$interface IPV6INIT is not set to yes, skip IPv6 policy route configurate." return 0 fi for ((x=0; x<10; x++)); do if (ip address show $interface | grep -F "inet6" | grep -F "dynamic"); then v6_subnet=$(nmcli device show $interface | grep -F 'IP6.ROUTE' | grep -F 'nh = ::'| grep -v 'dst = fe80' | grep -v '/128' | cut -d'=' -f2 | cut -d',' -f1 | tr -d ' ' | head -n 1) v6_gateway=$(ipcalc -6 -i $v6_subnet | awk '/HostMin/ {print $2}')1 add_ipv6_route_table nmcli device show $interface | grep -F 'IP6.ADDRESS' | grep -v "/64" | while read -r line; do IP=$(echo $line | awk '{print $2}' | cut -d'/' -f1) if ip -6 rule list | grep -F "$v6_route_table_id" | grep -q "$IP"; then echo "ip rule already exists for $IP with table $v6_route_table_id" continue fi echo "Adding rule for $IP on $interface with table $v6_route_table_id" ip -6 rule add from $IP table $v6_route_table_id done break fi sleep 1 done } generate_ipv6_policy_route
- 按ESC退出,并输入:wq!保存配置。
- 执行以下命令,查看自动化配置脚本文件15-policy-route.sh的权限。
ll /etc/NetworkManager/dispatcher.d/
回显类似如下信息,15-policy-route.sh权限为-rw-r--r--,和其他系统文件(比如10-ifcfg-rh-routes.sh)的权限(-rwxr-xr-x)不一样。[root@ecs-resource ~]# ll /etc/NetworkManager/dispatcher.d/ total 36 -rwxr-xr-x. 1 root root 3840 Feb 26 17:45 10-ifcfg-rh-routes.sh -rwxr-xr-x. 1 root root 1062 Feb 26 17:45 11-dhclient -rw-r--r-- 1 root root 2515 Jun 18 15:13 15-policy-route.sh -rwxr-xr-x. 1 root root 1412 Feb 26 17:45 20-chrony-dhcp -rwxr-xr-x. 1 root root 455 Feb 26 17:45 20-chrony-onoffline -rwxrwxr-x 1 root root 719 May 10 2019 hook-network-manager drwxr-xr-x. 2 root root 4096 Apr 18 17:12 no-wait.d drwxr-xr-x. 2 root root 4096 Feb 26 17:45 pre-down.d drwxr-xr-x. 2 root root 4096 Apr 18 17:12 pre-up.d
- 执行以下命令,为自动化配置脚本文件15-policy-route.sh添加权限。
sudo chown root:root /etc/NetworkManager/dispatcher.d/15-policy-route.sh
sudo chmod 755 /etc/NetworkManager/dispatcher.d/15-policy-route.sh
- 执行以下命令,再次查看自动化配置脚本文件15-policy-route.sh的权限。
ll /etc/NetworkManager/dispatcher.d/
回显类似如下信息,15-policy-route.sh权限为-rwxr-xr-x。[root@ecs-resource ~]# ll /etc/NetworkManager/dispatcher.d/ total 36 -rwxr-xr-x. 1 root root 3840 Feb 26 17:45 10-ifcfg-rh-routes.sh -rwxr-xr-x. 1 root root 1062 Feb 26 17:45 11-dhclient -rwxr-xr-x 1 root root 2019 Jun 18 12:21 15-policy-route.sh -rwxr-xr-x. 1 root root 1412 Feb 26 17:45 20-chrony-dhcp -rwxr-xr-x. 1 root root 455 Feb 26 17:45 20-chrony-onoffline -rwxrwxr-x 1 root root 719 May 10 2019 hook-network-manager drwxr-xr-x. 2 root root 4096 Apr 18 17:12 no-wait.d drwxr-xr-x. 2 root root 4096 Feb 26 17:45 pre-down.d drwxr-xr-x. 2 root root 4096 Apr 18 17:12 pre-up.d
- 执行以下命令,重启网络服务以触发脚本15-policy-route.sh运行。
systemctl restart NetworkManager
重启网络服务时,此处请确保不影响业务再重启。
- 执行以下命令,创建自动化配置脚本文件15-policy-route.sh。
- 依次执行以下命令,确认IPv4策略路由是否添加成功。
ip route show table 1000
ip route show table 1001
其中,table 1000为主网卡的路由表名称,table 1001为扩展网卡的路由表名称。
回显类似如下信息,表示IPv4策略路由添加成功。[root@ecs-resource ~]# ip rule 0: from all lookup local 32764: from 10.0.1.120 lookup 1001 32765: from 10.0.0.133 lookup 1000 32766: from all lookup main 32767: from all lookup default [root@ecs-resource ~]# ip route show table 1000 default via 10.0.0.1 dev eth0 10.0.0.0/24 dev eth0 scope link [root@ecs-resource ~]# ip route show table 1001 default via 10.0.1.1 dev eth1 10.0.1.0/24 dev eth1 scope link
- 执行以下命令,验证源端云服务器和目的端云服务器是否可以通过IPv4地址正常通信。
ping -I 源端云服务器主网卡IPv4地址 目的端云服务器网卡IPv4地址
ping -I 源端云服务器扩展网卡IPv4地址 目的端云服务器网卡IPv4地址
命令示例:
ping -I 10.0.0.133 10.0.2.3
ping -I 10.0.1.120 10.0.2.3
回显类似如下信息,源端两个IPv4地址均可以和目的端正常通信,表示IPv4策略路由配置成功。[root@ecs-resource ~]# ping -I 10.0.0.133 10.0.2.3 PING 10.0.2.3 (10.0.2.3) from 10.0.0.133 : 56(84) bytes of data. 64 bytes from 10.0.2.3: icmp_seq=1 ttl=64 time=0.241 ms 64 bytes from 10.0.2.3: icmp_seq=2 ttl=64 time=0.198 ms ^C --- 10.0.2.3 ping statistics --- 2 packets transmitted, 2 received, 0% packet loss, time 1064ms rtt min/avg/max/mdev = 0.198/0.219/0.241/0.021 ms [root@ecs-resource ~]# ping -I 10.0.1.120 10.0.2.3 PING 10.0.2.3 (10.0.2.3) from 10.0.1.120 : 56(84) bytes of data. 64 bytes from 10.0.2.3: icmp_seq=1 ttl=64 time=0.242 ms 64 bytes from 10.0.2.3: icmp_seq=2 ttl=64 time=0.184 ms ^C --- 10.0.2.3 ping statistics --- 2 packets transmitted, 2 received, 0% packet loss, time 1062ms rtt min/avg/max/mdev = 0.184/0.213/0.242/0.029 ms
-
ip -6 rule
ip -6 route show table 1100
ip -6 route show table 1101
其中,table 1100为主网卡的路由表名称,table 1101为扩展网卡的路由表名称。
回显类似如下信息,表示IPv6策略路由添加成功。[root@ecs-resource ~]# ip -6 rule 0: from all lookup local 32764: from 2407:c080:802:2107:ab85:4a27:d20:2119 lookup 1101 32765: from 2407:c080:802:1f85:918b:9039:41b2:24a8 lookup 1100 32766: from all lookup main [root@ecs-resource ~]# ip -6 route show table 1100 2407:c080:802:1f85::/64 dev eth0 metric 1024 pref medium default via 2407:c080:802:1f85::1 dev eth0 metric 1024 pref medium [root@ecs-resource ~]# ip -6 route show table 1101 2407:c080:802:2107::/64 dev eth1 metric 1024 pref medium default via 2407:c080:802:2107::1 dev eth1 metric 1024 pref medium
- 执行以下命令,验证源端云服务器和目的端云服务器是否可以通过IPv6地址正常通信。
ping -6 -I 源端云服务器主网卡IPv6地址 目的端云服务器网卡IPv6地址
ping -6 -I 源端云服务器扩展网卡IPv6地址 目的端云服务器网卡IPv6地址
命令示例:
ping -6 -I 2407:c080:802:1f85:918b:9039:41b2:24a8 2407:c080:802:2108:96ec:3c49:391a:5ebc
ping -6 -I 2407:c080:802:2107:ab85:4a27:d20:2119 2407:c080:802:2108:96ec:3c49:391a:5ebc
回显类似如下信息,源端两个IPv6地址均可以和目的端正常通信,表示IPv6策略路由配置成功。[root@ecs-resource ~]# ping -6 -I 2407:c080:802:1f85:918b:9039:41b2:24a8 2407:c080:802:2108:96ec:3c49:391a:5ebc PING 2407:c080:802:2108:96ec:3c49:391a:5ebc(2407:c080:802:2108:96ec:3c49:391a:5ebc) from 2407:c080:802:1f85:918b:9039:41b2:24a8 : 56 data bytes 64 bytes from 2407:c080:802:2108:96ec:3c49:391a:5ebc: icmp_seq=1 ttl=64 time=0.328 ms 64 bytes from 2407:c080:802:2108:96ec:3c49:391a:5ebc: icmp_seq=2 ttl=64 time=0.209 ms ^C --- 2407:c080:802:2108:96ec:3c49:391a:5ebc ping statistics --- 2 packets transmitted, 2 received, 0% packet loss, time 1016ms rtt min/avg/max/mdev = 0.209/0.268/0.328/0.059 ms [root@ecs-resource ~]# ping -6 -I 2407:c080:802:2107:ab85:4a27:d20:2119 2407:c080:802:2108:96ec:3c49:391a:5ebc PING 2407:c080:802:2108:96ec:3c49:391a:5ebc(2407:c080:802:2108:96ec:3c49:391a:5ebc) from 2407:c080:802:2107:ab85:4a27:d20:2119 : 56 data bytes 64 bytes from 2407:c080:802:2108:96ec:3c49:391a:5ebc: icmp_seq=1 ttl=64 time=0.345 ms 64 bytes from 2407:c080:802:2108:96ec:3c49:391a:5ebc: icmp_seq=2 ttl=64 time=0.203 ms ^C --- 2407:c080:802:2108:96ec:3c49:391a:5ebc ping statistics --- 2 packets transmitted, 2 received, 0% packet loss, time 1051ms rtt min/avg/max/mdev = 0.203/0.274/0.345/0.071 ms