背景 链接到标题 日常使用中,开发机通常只配置一块网卡,通常配置为 DHCP 自动获取 IP,这样就可以自动从 DHCP Server 获取 IP,网关,DNS Server 等配置,不用手动配置。
最近在工作中存在一种场景,一台服务器,多块网卡,需要对不同的网卡配置各自网关,查找了一些资料,也踩了一些坑,记录一下过程。
配置过程 链接到标题 官方配置 尝试在 /etc/sysconfig/network-scripts/ifcfg-<device> 中增加 GATEWAY 自动使之生效,实际上来看,多张网卡都配置 GATEWAY 字段会产生冲突,只能放弃通过网卡配置文件方式,尝试通过给网卡配置静态路由方式添加。
在 CentOS 官方网站查找配置静态路由方法,文档中提到通过编写网卡路由配置文件/etc/sysconfig/network-scripts/route-_<interface> ,配置完成后重启网络可以自动生效。
官方这种方式我尝试了两种文件编写方式,一种为192.168.64.0/20 via <gateway> dev <device>,一种为 ADDRESS0=xxxxx; NETMASK0=xxxxx; GATEWAY0=xxxxx。两种配置方式均没有生效,只能放弃。
手动配置 可以通过 route add 命令临时给第二章网卡配置网关,通过 route -n 查看是可以生效。但是因为最终目标是让路由随着网络服务(公司内部未使用 NetworkManager)Network 启动而配置,因此在 /etc/rc.local 中假如 route add 类似命令无法走通。
上述方法要么无法生效,要么存在无法持久化问题,均无法完成需求。 只能通过查看 网卡服务启动脚本来查找,查看 /etc/init.d/network (systemd 服务控制也是执行该文件),该文件是一个 Shell 脚本,找到路由配置相关:
2 # Add non interface-specific static-routes. 1 if [ -f /etc/sysconfig/static-routes ]; then 141 if [ -x /sbin/route ]; then 1 grep "^any" /etc/sysconfig/static-routes | while read ignore args ; do 2 /sbin/route add -$args 3 done 4 else 5 net_log $"Legacy static-route support not available: /sbin/route not found" 6 fi 7 fi 可以看到,在网络服务 network 启动过程中,会判断 /etc/sysconfig/static-routes 文件是否存在,如果存在则会通过 route 命令对该文件中记录以 any 开头的路由进行添加,添加命令为 /sbin/route add -$args。