在CentOS 7及以上版本中,ifconfig命令已经被标记为过时工具,取而代之的是ip命令。如果你还在用ifconfig来配置路由、查看网卡信息,现在就该切换了。ip命令属于iproute2工具包,功能比ifconfig强大得多,尤其在路由配置、策略路由、多网卡管理方面更加灵活高效。下面我直接告诉你怎么用ip命令替代ifconfig完成所有路由配置操作,从查看、添加、删除到持久化,一步一步讲清楚。
为什么CentOS要废弃ifconfig改用ip命令
ifconfig属于net-tools工具包,这个工具包从2001年之后就基本停止维护了。它的底层调用的是旧版Linux内核网络接口,很多新特性根本不支持,比如策略路由、多路由表、VLAN细分等。而ip命令基于netlink接口直接与内核通信,性能更好,功能更全。CentOS 7默认不再预装net-tools,CentOS 8和CentOS Stream更是彻底移除。所以不是"建议"你用ip命令,而是"必须"用。如果你的系统里还没有ip命令,执行yum install iproute或dnf install iproute即可安装。
ip命令替代ifconfig查看网卡和IP信息
以前你用ifconfig查看网卡IP,现在对应的命令是ip addr。这个命令会列出所有网卡的详细信息,包括IP地址、子网掩码、MAC地址、接口状态等。具体操作如下:
ip addr show
如果只想看某个网卡,比如eth0,可以这样:
ip addr show eth0
如果只想看IPv4地址,过滤掉IPv6信息:
ip -4 addr show
如果只想看简短格式,方便快速浏览:
ip -br addr
这个-br参数会以表格形式输出,非常直观。对比ifconfig,ip addr能显示更多内核层面的信息,比如接口的mtu值、qdisc队列规则等,这些是ifconfig完全看不到的。
用ip命令配置静态路由
这是本文的核心部分。以前用ifconfig配合route命令来加路由,现在全部用ip route来完成。假设你的服务器有两块网卡,eth0是192.168.1.0/24网段,eth1是10.0.0.0/24网段,你需要配置到172.16.0.0/16网段的路由走eth1出去。操作如下:
第一步,添加一条静态路由:
ip route add 172.16.0.0/16 via 10.0.0.1 dev eth1
解释一下这条命令:172.16.0.0/16是目标网段,via 10.0.0.1是下一跳网关地址,dev eth1指定从eth1接口出去。如果你的网关就在直连网段,也可以不写via,直接指定出口:
ip route add 172.16.0.0/16 dev eth1
第二步,添加默认路由(如果还没有的话):
ip route add default via 192.168.1.1 dev eth0
第三步,查看当前所有路由表:
ip route show
或者查看指定路由表:
ip route show table main
Linux默认有多个路由表,main表是主表,还有local表、default表等。ip route show不加参数默认显示main表。
删除和修改路由
添加路由之后,如果需要删除,用replace或者del关键字。删除刚才那条路由:
ip route del 172.16.0.0/16 via 10.0.0.1 dev eth1
如果要修改路由的下一跳,可以先删再加,也可以用replace:
ip route replace 172.16.0.0/16 via 10.0.0.254 dev eth1
注意,replace要求这条路由必须已经存在,否则会报错。如果不确定是否存在,建议先del再add,虽然多一步但更稳妥。
配置策略路由实现多线路负载
这是ip命令相比ifconfig+route最大的优势之一。假设你有两条外网线路,一条走电信,一条走联通,你想让不同来源的流量走不同线路。首先创建一个自定义路由表:
echo "200 telecom" >> /etc/iproute2/rt_tables
然后给这个表添加路由:
ip route add default via 192.168.1.1 dev eth0 table telecom
ip route add default via 10.0.0.1 dev eth1 table unicom
接着添加策略规则,让来自192.168.1.0/24的流量走电信:
ip rule add from 192.168.1.0/24 table telecom
让来自10.0.0.0/24的流量走联通:
ip rule add from 10.0.0.0/24 table unicom
查看策略规则:
ip rule show
这套操作在ifconfig时代需要写复杂的脚本才能实现,现在几条命令就搞定了。而且策略路由支持更细粒度的匹配条件,比如匹配目标地址、端口、防火墙标记等,灵活性远超传统方式。
让路由配置永久生效
上面所有ip命令都是临时生效的,重启后就没了。要持久化,有两种方式。第一种是写到网卡配置文件里,CentOS 7用/etc/sysconfig/network-scripts/目录下的ifcfg-ethX文件,CentOS 8/Stream用/etc/NetworkManager/system-connections/下的配置文件或者nmcli命令。以CentOS 7为例,编辑/etc/sysconfig/network-scripts/route-eth1:
172.16.0.0/16 via 10.0.0.1
或者在ifcfg-eth1里直接加:
GATEWAY0=10.0.0.1 NETMASK0=255.255.0.0 ADDRESS0=172.16.0.0
第二种方式是写一个systemd服务或者rc.local脚本,在开机时自动执行ip route命令。创建一个简单的脚本/etc/rc.d/rc.local(如果不存在就新建):
#!/bin/bash ip route add 172.16.0.0/16 via 10.0.0.1 dev eth1 ip route add default via 192.168.1.1 dev eth0 exit 0
然后给脚本执行权限:
chmod +x /etc/rc.d/rc.local
CentOS 7需要确保rc-local.service是启用状态:
systemctl enable rc-local.service
CentOS 8/Stream推荐用NetworkManager的nmcli来管理,或者用nmcli connection modify来添加路由,这样更符合新版本的网络管理架构。
ip命令的其他常用网络操作
除了路由配置,ip命令还能做很多ifconfig做不了的事。比如开启或关闭网卡:
ip link set eth0 up
ip link set eth0 down
修改MTU值:
ip link set eth0 mtu 1500
添加或删除IP地址(替代ifconfig eth0 192.168.1.100 netmask 255.255.255.0):
ip addr add 192.168.1.100/24 dev eth0
ip addr del 192.168.1.100/24 dev eth0
查看邻居表(ARP表):
ip neigh show
查看网络统计信息:
ip -s link show eth0
这些操作全部通过一条命令完成,不需要像以前那样记一堆ifconfig、route、arp、netstat的参数。
实战中的注意事项和避坑指南
第一,ip命令的参数顺序很重要,尤其是ip route add,目标网段、via网关、dev接口的顺序不能乱。建议养成先写目标网段的习惯,避免出错。第二,CentOS 8以后NetworkManager默认接管了网络配置,如果你手动用ip命令改了路由,NetworkManager可能会在下次重启时覆盖掉。解决办法是要么把配置写进NetworkManager的连接配置里,要么禁用NetworkManager对该接口的管理。第三,多网卡环境下要特别注意路由表的优先级,默认路由只能有一个主default,其他的需要通过metric值或者策略规则来区分。第四,如果你在云服务器上操作,很多云平台的元数据服务会自动下发路由,手动添加的路由可能和平台路由冲突,需要先用ip route flush table main清理再重新配置。
总结
从ifconfig迁移到ip命令不是选择题,而是必答题。ip命令在路由配置、策略路由、多网卡管理、网络诊断等方面全面碾压ifconfig。对于CentOS运维人员来说,熟练掌握ip addr、ip link、ip route、ip rule这四个子命令,就能覆盖日常90%以上的网络配置需求。把本文提到的命令收藏好,遇到具体场景直接套用,比翻man手册快得多。网络配置是服务器运维的基本功,工具用对了,效率提升不止一倍。
