测试环境:CentOS 7.9
两个子网,相同网段相同掩码
现在服务器分配了两个子网 IP 段,需要配置到同一个网卡上,两个网段各自走自己的网关出去。
10.20.10.24/29 网关 10.20.10.25 可用IP 10.20.10.26-30
10.20.10.248/29 网关 10.20.10.249 可用IP 10.20.10.250-254
cat /etc/sysconfig/network-scripts/ifcfg-em1
TYPE=Ethernet
ONBOOT=yes
BOOTPROTO=static
DEFROUTE=yes
NAME=em1
DEVICE=em1
IPADDR=10.20.10.26
NETMASK=255.255.255.248
GATEWAY=10.20.10.25
DNS1=1.1.1.1
DNS2=8.8.8.8
IPADDR1=10.20.10.27
IPADDR2=10.20.10.28
IPADDR3=10.20.10.29
IPADDR4=10.20.10.30
IPADDR5=10.20.10.250
IPADDR6=10.20.10.251
IPADDR7=10.20.10.252
IPADDR8=10.20.10.253
IPADDR9=10.20.10.254
PREFIX=29
注意:默认 NETMASK 只对 IPADDR 起效,附加 IP 应使用 PREFIX 形式来统一掩码(如果不同网段使用不同掩码则需要再细分配置方式)。使用 NETMASK1=255.255.255.248 是无效的,不会生效!
上面是因为附加 IP 的掩码刚好都一样,所以直接一个 PREFIX 搞定了。
重启网卡生效,正常来说,配上的 IP 都通了。
systemctl restart network
题外话:为啥都通了?另一个段网关是 .254 的,默认走了 .25 出去。ISP 是否允许跨子网出流量是成败关键,虽然 Linux 可以这样路由,但有些 ISP 会进行源地址校验(source validation)或源路由过滤,如果用 .250(理论上应该走 .249)但走了 .25 出去,运营商可能丢掉这个包;如果运营商不做这种检查,那算是“侥幸成功”了。
两个子网,不同网段不同掩码
现在服务器分配了两个子网 IP 段,需要配置到同一个网卡上,两个网段各自走自己的网关出去。
10.20.10.24/29 网关 10.20.10.25 可用IP 10.20.10.26-30
10.20.20.0/24 网关 10.20.20.1 可用IP 10.20.20.2-254
cat /etc/sysconfig/network-scripts/ifcfg-em1
TYPE=Ethernet
ONBOOT=yes
BOOTPROTO=static
DEFROUTE=yes
NAME=em1
DEVICE=em1
IPADDR=10.20.10.26
NETMASK=255.255.255.248
GATEWAY=10.20.10.25
DNS1=1.1.1.1
DNS2=8.8.8.8
IPADDR1=10.20.10.27
PREFIX1=29
IPADDR2=10.20.10.28
PREFIX2=29
IPADDR3=10.20.10.29
PREFIX3=29
IPADDR4=10.20.10.30
PREFIX4=29
IPADDR5=10.20.20.2
PREFIX5=24
IPADDR6=10.20.20.3
PREFIX6=24
IPADDR7=10.20.20.4
PREFIX7=24
配置策略路由走各自网关
添加路由表
echo "200 secondgw" >> /etc/iproute2/rt_tables
创建脚本 /etc/sysconfig/network-scripts/route-em1-secondgw.sh
#!/bin/bash
# 访问 10.20.10.248/29 子网指定从 em1 网卡出去并设置了建议的源IP(非强制)
ip route add 10.20.10.248/29 dev em1 src 10.20.10.250 table secondgw
# 设置 secondgw 路由表的默认路由
ip route add default via 10.20.10.249 dev em1 table secondgw
# 将这些 IP 绑定到 secondgw 路由表,旨在使用 .249 网关出去。
ip rule add from 10.20.10.250/32 table secondgw
ip rule add from 10.20.10.251/32 table secondgw
ip rule add from 10.20.10.252/32 table secondgw
ip rule add from 10.20.10.253/32 table secondgw
ip rule add from 10.20.10.254/32 table secondgw
添加到开机执行脚本
chmod +x /etc/sysconfig/network-scripts/route-em1-secondgw.sh
echo "/etc/sysconfig/network-scripts/route-em1-secondgw.sh" >> /etc/rc.d/rc.local
chmod +x /etc/rc.d/rc.local
执行脚本生效
bash /etc/rc.d/rc.local
测试附加 IP 是否可用
curl --interface 10.20.10.250 ifconfig.me
测试附加 IP 是否走了 .249 网关(看第一跳到的哪个网关)
mtr -s 10.20.10.250 8.8.8.8
评论区