手动为多网卡Linux云服务器配置IPv4和IPv6策略路由(SUSE)
操作场景
本文档以SUSE Linux Enterprise Server 15 SP5 64bit为例,为指导您为多网卡的云服务器配置策略路由。
- IPv4:若需实现多网卡云服务器间的IPv4通信,需要配置IPv4路由,请执行Linux IPv4操作步骤 (SUSE)。
- IPv6:若需实现多网卡云服务器间的IPv6通信,需要配置IPv6路由,请执行Linux IPv6操作步骤 (SUSE)。
- IPv4/IPv6双栈:若需实现多网卡间的IPv4和IPv6通信,需要同时配置IPv4和IPv6路由,请依次执行Linux IPv4操作步骤 (SUSE)和Linux IPv6操作步骤 (SUSE)。
关于云服务器双网卡的背景知识及组网说明,请参见方案概述。
Linux IPv4操作步骤 (SUSE)
- 收集配置策略路由需要的云服务器网卡地址等信息。
具体操作请参见收集云服务器网络信息。
本示例中,云服务器的网络信息如表1所示。
- 登录源端云服务器。
ECS有多种登录方法,具体请参见登录弹性云服务器。
- 执行以下命令,检查源端云服务器主网卡和目的端云服务器通信情况。
配置多网卡策略路由前,请务必确保源端主网卡和目的端通信正常。
ping -I 源端云服务器主网卡地址 目的端云服务器地址
命令示例:
ping -I 10.0.0.139 10.0.2.169
回显类似如下信息,表示可以正常通信。ecs-suse-s~ # ping -I 10.0.0.139 10.0.2.169 PING 10.0.2.169 (10.0.2.169) from 10.0.0.139 : 56(84) bytes of data. 64 bytes from 10.0.2.169: icmp_seq=1 ttl=64 time=3.20 ms 64 bytes from 10.0.2.169: icmp_seq=2 ttl=64 time=0.096 ms 64 bytes from 10.0.2.169: icmp_seq=3 ttl=64 time=0.103 ms ^C -- 10.0.2.169 ping statistics --- 3 packets transmitted, 3 received, 0% packet loss, time 2006ms rtt min/avg/max/mdev = 0.096/1.132/3.199/1.461 ms
- 执行以下命令,查看云服务器网卡名称。
回显类似如下信息,通过网卡地址查找对应的网卡名称,本示例中:
- 10.0.0.139为主网卡地址,对应的名称为eth0。
- 10.0.1.39为扩展网卡地址,对应的名称为eth1。
ecs-suse-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:30:30:bb brd ff:ff:ff:ff:ff:ff altname enpos3 altname ens3 inet 10.0.0.139/24 brd 10.0.0.255 scope global eth0 valid_lft forever preferred_lft forever inet6 2407:c080:1880:9ba:1195:6337:d98d:66c6/64 scope global dynamic noprefixroute valid_lft 6931sec preferred_lft 6931sec inet6 fe80::f816:3eff:fe30:30bb/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:30:31:57 brd ff:ff:ff:ff:ff:ff altname enp4s4 inet 10.0.1.39/24 brd 10.0.1.255 scope global eth1 valid_lft forever preferred_lft forever inet6 2407:c080:1880:9bb:6c7b:6fc7:d78e:2dce/64 scope global dynamic noprefixroute valid_lft 6931sec preferred_lft 6931sec inet6 fe80::f816:3eff:fe30:3157/64 scope link valid_lft forever preferred_lft forever - 执行以下步骤,为云服务器配置临时路由。
- 依次执行以下命令,添加主网卡和扩展网卡的策略路由。
- 主网卡
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.139 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.39 table 20
如果云服务器有多张网卡,请依次为所有网卡添加策略路由。
- 主网卡
- 依次执行以下命令,确认策略路由是否添加成功。
ip route show table 主网卡路由表名称
ip route show table 扩展网卡路由表名称
其中,路由表名称为5.a中自定义的名称。
命令示例:
ip rule
ip route show table 10
ip route show table 20
回显类似如下信息,表示策略路由添加成功。ecs-suse-s:~ # ip rule 0: from all lookup local 32764: from 10.0.1.39 lookup 20 32765: from 10.0.0.139 lookup 10 32766: from all lookup main 32767: from all lookup default ecs-suse-s:~ # ip route show table 10 default via 10.0.0.1 dev eth0 10.0.0.0/24 dev eth0 scope link ecs-suse-s:~ # 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.139 10.0.2.169
ping -I 10.0.1.39 10.0.2.169
回显类似如下信息,两个网卡均可以和目的端正常通信,表示策略路由配置成功。ecs-suse-s~ # ping -I 10.0.0.139 10.0.2.169 PING 10.0.2.169 (10.0.2.169) from 10.0.0.139 : 56(84) bytes of data. 64 bytes from 10.0.2.169: icmp_seq=1 ttl=64 time=0.168 ms 64 bytes from 10.0.2.169: icmp_seq=2 ttl=64 time=0.124 ms 64 bytes from 10.0.2.169: icmp_seq=3 ttl=64 time=o.075 ms ^C --- 10.0.2.169 ping statistics --- 3 packets transmitted, 3 received, 0% packet loss, time 2056ms rtt min/avg/max/mdev = 0.075/0.122/0.168/0.037 ms ecs-suse-s~ # ping -I 10.0.1.39 10.0.2.169 PING 10.0.2.169 (10.0.2.169) from 10.0.1.39 : 56(84) bytes of data. 64 bytes from 10.0.2.169: icmp_seq=1 ttl=64 time=0.568 ms 64 bytes from 10.0.2.169: icmp_seq=2 ttl=64 time=o.104 ms 64 bytes from 10.0.2.169: icmp_seq=3 ttl=64 time=0.088 ms ^C -- 10.0.2.169 ping statistics --- 3 packets transmitted, 3 received, 0% packet loss, time 2032ms rtt min/avg/max/mdev = 0.088/0.253/0.568/0.222 ms
- 依次执行以下命令,添加主网卡和扩展网卡的策略路由。
- 执行以下步骤,为云服务器配置永久路由。
- 执行以下命令,为systemd服务创建一个新的“network-routes.service”文件。
vi /etc/systemd/system/network-routes.service
- 按i进入编辑模式。
- 在文件末尾添加以下配置。
[Unit] Description=Network Routes Configuration After=network.target [Service] Type=oneshot RemainAfterExit=yes ExecStart=/bin/bash -c 'for((x=0; x<10; x++)); do [[ $(ip addr show eth0 | grep -w 10.0.0.139 >/dev/null 2>&1 && echo 1) ]] && break; sleep 1; 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.139 table 10; for((x=0; x<10; x++)); do [[ $(ip addr show eth1 | grep -w 10.0.1.39 >/dev/null 2>&1 && echo 1) ]] && break; sleep 1; 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.39 table 20; ip rule add to 169.254.169.254 table main' [Install] WantedBy=multi-user.target
其中,参数说明如下:
- 按ESC退出,并输入:wq!保存配置。
- 执行以下命令,重新加载systemd配置,并启动服务。
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.
- 执行以下命令,重启云服务器。
“network-routes.service”文件中添加的策略路由,需要重启云服务器后才会生效,此处请确保不影响业务再重启云服务器操作。
- 参考5.b~5.c,检查策略路由添加情况,并验证源端和目的通信是否正常。
- 执行以下命令,为systemd服务创建一个新的“network-routes.service”文件。
Linux IPv6操作步骤 (SUSE)
- 收集配置策略路由需要的云服务器网卡地址等信息。
具体操作请参见收集云服务器网络信息。
本示例中,云服务器的网络信息如表2所示。
表2 Linux IPv6信息说明(SUSE) 类型
主网卡
扩展网卡
源端
- 网卡IPv4地址:10.0.0.139
- 网卡IPv6地址:2407:c080:1880:9ba:1195:6337:d98d:66c6
- 子网IPv6网段:2407:c080:1880:9ba::/64
- 子网IPv6网关:2407:c080:1880:9ba::1
- 网卡IPv4地址:10.0.1.39
- 网卡IPv6地址:2407:c080:1880:9bb:6c7b:6fc7:d78e:2dce
- 子网IPv6网段:2407:c080:1880:9bb::/64
- 子网IPv6网关:2407:c080:1880:9bb::1
目的端
- 网卡IPv4地址:10.0.2.169
- 网卡IPv6地址:2407:c080:1880:9bc:4ea7:ba3d:be05:e7f5
不涉及
- 登录源端云服务器。
ECS有多种登录方法,具体请参见登录弹性云服务器。
- 执行以下步骤,确保云服务器已开启IPv6协议栈,并且正常获取到IPv6地址。
对于源端和目的端的IPv6云服务器,均需要执行该操作,确保云服务器已获取到IPv6地址,否则云服务器无法通过IPv6地址进行通信。
本章节云服务器使用的操作系统为SUSE Linux Enterprise Server 15 SP5 64bit公共镜像,以下针对该操作系统举例,更多操作系统配置指导,请参见动态获取IPv6地址的“Linux操作系统(手动配置启用IPv6)” 小节。
- 执行以下命令,检查云服务器是否可以获取到IPv6地址。
回显类似如下信息,eth0和eth1为云服务器的网卡,有一行inet6地址,为fe80开头,表示该云服务器已开启IPv6协议栈。同时有一行2407开头的地址,表示已可以自动获取到IPv6地址。因此本示例的镜像无需额外配置。
ecs-suse-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:30:30:bb brd ff:ff:ff:ff:ff:ff altname enpos3 altname ens3 inet 10.0.0.139/24 brd 10.0.0.255 scope global eth0 valid_lft forever preferred_lft forever inet6 2407:c080:1880:9ba:1195:6337:d98d:66c6/64 scope global dynamic noprefixroute valid_lft 6931sec preferred_lft 6931sec inet6 fe80::f816:3eff:fe30:30bb/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:30:31:57 brd ff:ff:ff:ff:ff:ff altname enp4s4 inet 10.0.1.39/24 brd 10.0.1.255 scope global eth1 valid_lft forever preferred_lft forever inet6 2407:c080:1880:9bb:6c7b:6fc7:d78e:2dce/64 scope global dynamic noprefixroute valid_lft 6931sec preferred_lft 6931sec inet6 fe80::f816:3eff:fe30:3157/64 scope link valid_lft forever preferred_lft forever - 通过上一步的回显,通过网卡地址查找记录对应的网卡名称。
- 执行以下命令,检查云服务器是否可以获取到IPv6地址。
- 登录源端云服务器,执行以下命令,检查源端云服务器和目的端云服务器通信情况。
配置多网卡策略路由前,请务必确保:源端的主网卡与扩展网卡中,至少有一个网卡可以和目的端正常通信。
ping6 -I 源端云服务器某个网卡地址 目的端云服务器地址
命令示例:
ping6 -I 2407:c080:1880:9bb:6c7b:6fc7:d78e:2dce 2407:c080:1880:9bc:4ea7:ba3d:be05:e7f5
回显类似如下信息,表示可以正常通信。ecs-suse-s:~ # ping6 -I 2407:c080:1880:9bb:6c7b:6fc7:d78e:2dce 2407:c080:1880:9bc:4ea7:ba3d:be05:e7f5 PING 2407:c080:1880:9bc:4ea7:ba3d:be05:e7f5(2407:c080:1880:9bc:4ea7:ba3d:be05:e7f5) from 2407:c080:1880:9bb:6c7b:6fc7:d78e:2dce : 56 data bytes 64 bytes from 2407:c080:1880:9bc:4ea7:ba3d:be05:e7f5: icmp_seq=1 ttl=64 time=0.163 ms 64 bytes from 2407:c080:1880:9bc:4ea7:ba3d:be05:e7f5: icmp_seq=2 ttl=64 time=0.104 ms 64 bytes from 2407:c080:1880:9bc:4ea7:ba3d:be05:e7f5: icmp_seq=3 ttl=64 time=0.070 ms 64 bytes from 2407:c080:1880:9bc:4ea7:ba3d:be05:e7f5: icmp_seq=4 ttl=64 time=0.065 ms ^C -- 2407:c080:1880:9bc:4ea7:ba3d:be05:e7f5 ping statistics --- 4 packets transmitted, 4 received, 0% packet loss, time 3058ms tt min/avg/max/mdev = 0.065/0.100/0.163/0.039 ms
- 登录源端云服务器,执行以下步骤,为云服务器配置临时路由。
- 依次执行以下命令,添加主网卡和扩展网卡的策略路由。
- 主网卡
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 路由表名称
命令示例:
- 主网卡
ip -6 route add default via 2407:c080:1880:9ba::1 dev eth0 table 10
ip -6 route add 2407:c080:1880:9ba::/64 dev eth0 table 10
ip -6 rule add from 2407:c080:1880:9ba:1195:6337:d98d:66c6 table 10
- 扩展网卡
ip -6 route add default via 2407:c080:1880:9bb::1 dev eth1 table 20
ip -6 route add 2407:c080:1880:9bb::/64 dev eth1 table 20
ip -6 rule add from 2407:c080:1880:9bb:6c7b:6fc7:d78e:2dce table 20
如果云服务器有多张网卡,请依次为所有网卡添加策略路由。
- 主网卡
- 依次执行以下命令,确认策略路由是否添加成功。
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
回显类似如下信息,表示策略路由添加成功。ecs-suse-s:~ # ip -6 rule 0: from all lookup local 32764: from 2407:c080:1880:9bb:6c7b:6fc7:d78e:2dce lookup 20 32765: from 2407:c080:1880:9ba:1195:6337:d98d:66c6 lookup 10 32766: from all lookup main ecs-suse-s:~ # ip -6 route show table 10 2407:c080:1880:9ba::/64 dev eth0 metric 1024 pref medium default via 2407:c080:1880:9ba::1 dev eth0 metric 1024 pref medium ecs-suse-s:~ # ip -6 route show table 20 2407:c080:1880:9bb::/64 dev eth1 metric 1024 pref medium default via 2407:c080:1880:9bb:1 dev eth1 metric 1024 pref medium
- 执行以下命令,验证源端云服务器和目的端云服务器是否可以正常通信。
ping6 -I 源端云服务器主网卡地址 目的端云服务器地址
ping6 -I 源端云服务器扩展网卡地址 目的端云服务器地址
命令示例:
ping6 -I 2407:c080:1880:9ba:1195:6337:d98d:66c6 2407:c080:1880:9bc:4ea7:ba3d:be05:e7f5
ping6 -I 2407:c080:1880:9bb:6c7b:6fc7:d78e:2dce 2407:c080:1880:9bc:4ea7:ba3d:be05:e7f5
回显类似如下信息,两个网卡均可以和目的端正常通信,表示策略路由配置成功。ecs-suse-s:~ # ping6 -I 2407:c080:1880:9bb:6c7b:6fc7:d78e:2dce 2407:c080:1880:9bc:4ea7:ba3d:be05:e7f5 PING 2407:c080:1880:9bc:4ea7:ba3d:be05:e7f5(2407:c080:1880:9bc:4ea7:ba3d:be05:e7f5) from 2407:c080:1880:9bb:6c7b:6fc7:d78e:2dce:56 data bytes 64 bytes from 2407:c080:1880:9bc:4ea7:ba3d:be05:e7f5: icmp_seq=1 ttl=64 time=0.213 ms 64 bytes from 2407:c080:1880:9bc:4ea7:ba3d:be05:e7f5: icmp_seq=2 ttl=64 time=0.105 ms 64 bytes from 2407:c080:1880:9bc:4ea7:ba3d:be05:e7f5: icmp_seq=3 ttl=64 time=0.071 ms ^C --- 2407:c080:1880:9bc:4ea7:ba3d:be05:e7f5 ping statistics --- 3 packets transmitted, 3 received, 0% packet loss, time 2036ms rtt min/avg/max/mdev = 0.071/0.129/0.213/0.060 ms ecs-suse-st~ # ping6 -I 2407:c080:1880:9ba:1195:6337:d98d:66c6 2407:c080:1880:9bc:4ea7:ba3d:be05:e7f5 PING 2407:c080:1880:9bc:4ea7:ba3d:be05:e7f5(2407:c080:1880:9bc:4ea7:ba3d:be05:e7f5) from 2407:c080:1880:9ba:1195:6337:d98d:66c6:56data bytes 64 bytes from 2407:c080:1880:9bc:4ea7:ba3d:be05:e7f5: icmp_seq=1 ttl=64 time=0.183 ms 64 bytes from 2407:c080:1880:9bc:4ea7:ba3d:be05:e7f5: icmp_seq=2 ttl=64 time=0.096 ms 64 bytes from 2407:c080:1880:9bc:4ea7:ba3d:be05:e7f5: icmp_seq=3 ttl=64 time=0.076 ms ^C --- 2407:c080:1880:9bc:4ea7:ba3d:be05:e7f5 ping statistics --- 3 packets transmitted, 3 received, 0% packet loss, time 2047ms rtt min/avg/max/mdev = 0.076/0.118/0.183/0.046 ms
- 依次执行以下命令,添加主网卡和扩展网卡的策略路由。
- 执行以下步骤,为云服务器配置永久路由。
- 执行以下命令,为systemd服务创建一个新的文件“network-routes6.service”。
- 按i进入编辑模式。
- 在文件末尾添加以下配置。
[Unit] Description=Network Routes Configuration After=network.target [Service] Type=oneshot RemainAfterExit=yes ExecStart=/bin/bash -c 'for((x=0; x<10; x++)); do [[ $(ip addr show eth0 | grep -w 2407:c080:1880:9ba:1195:6337:d98d:66c6 >/dev/null 2>&1 && echo 1) ]] && break; sleep 1; done; ip route flush table 10; ip -6 route add default via 2407:c080:1880:9ba::1 dev eth0 table 10; ip -6 route add 2407:c080:1880:9ba::/64 dev eth0 table 10; ip -6 rule add from 2407:c080:1880:9ba:1195:6337:d98d:66c6 table 10; for((x=0; x<10; x++)); do [[ $(ip addr show eth1 | grep -w 2407:c080:1880:9bb:6c7b:6fc7:d78e:2dce >/dev/null 2>&1 && echo 1) ]] && break; sleep 1; done; ip route flush table 20; ip -6 route add default via 2407:c080:1880:9bb::1 dev eth1 table 20; ip -6 route add 2407:c080:1880:9bb::/64 dev eth1 table 20; ip -6 rule add from 2407:c080:1880:9bb:6c7b:6fc7:d78e:2dce table 20' [Install] WantedBy=multi-user.target
其中,参数说明如下:
- 按ESC退出,并输入:wq!保存配置。
- 执行以下命令,重新加载systemd配置,并启动服务。
systemctl enable network-routes6.service
回显类似如下信息,表示启动成功。ecs-suse-s:/etc/netplan# systemctl daemon-reload ecs-suse-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.
- 执行以下命令,重启云服务器。
“network-routes6.service”文件中添加的策略路由,需要重启云服务器后才会生效,此处请确保不影响业务再重启云服务器操作。
- 参考5.b~5.c,检查策略路由添加情况,并验证源端和目的通信是否正常。