问题
centos出现一个问题,默认路由添加不上。使用
ip route add default via 10.1.1.1
这条命令添加默认路由时,不报错,但是使用ip route
命令 查看路由时,刚才添加的那一条不见了。 先说结论,原因是NetworkManager的一个BUG导致的。查看NetworkManager版本,1.8版本存在这个BUG。在1.10版本修复,可以升级NetworkManager来解决这个问题。
在centos里面可以通过下面的命令查看NetworkManager的版本号,如果版本号低于1.10的话,可以通过升级NetworkManager来解决。
Develop>rpm -qa | grep Network
NetworkManager-team-1.8.0-9.el7.x86_64
NetworkManager-tui-1.8.0-9.el7.x86_64
NetworkManager-wifi-1.8.0-9.el7.x86_64
NetworkManager-1.8.0-9.el7.x86_64
NetworkManager-libnm-1.8.0-9.el7.x86_64
也可以修改网络配置文件/etc/sysconfig/network-scripts/ifcfg-eth0
,添加一行NM_CONTROLLED="no" 来解决。这里的配置文件中ifcfg-eth0要改成你的环境对应的接口的文件。
调试过程
监测路由变化
使用ip monitor命令监控路由变化,终端输入这个命令监测,然后从另一端添加路由。可以看到在添加默认路由时,ip monitor监测到路由的添加,并且发现路由又被删除了。
企业微信截图_15441653854204.png
查看NetworkManager日志
首先需要打开NetworkManager的debug级别调试开关。
默认是INFO级别的。
bingfengfeifei@bingfengfeifei-PC:~$nmcli general logging
LEVEL DOMAINS
INFO PLATFORM,RFKILL,ETHER,WIFI,BT,MB,DHCP4,DHCP6,PPP,IP4,IP6,AUTOIP4,DNS,VPN,SHARING,SUPPLICANT,AGENTS,SETTINGS,SUSPEND,CORE,DEVICE,OLPC,INFINIBAND,FIREWALL,ADSL,BOND,VLAN,BRIDGE,TEAM,CONCHECK,DCB,DISPATCH,AUDIT,SYSTEMD,PROXY
我们使用下面的命令调成DEBUG级别
bingfengfeifei@bingfengfeifei-PC:~$sudo nmcli general logging level debug
bingfengfeifei@bingfengfeifei-PC:~$sudo nmcli general logging
LEVEL DOMAINS
DEBUG PLATFORM,RFKILL,ETHER,WIFI,BT,MB,DHCP4,DHCP6,PPP,IP4,IP6,AUTOIP4,DNS,VPN,SHARING,SUPPLICANT,AGENTS,SETTINGS,SUSPEND,CORE,DEVICE,OLPC,INFINIBAND,FIREWALL,ADSL,BOND,VLAN,BRIDGE,TEAM,CONCHECK,DCB,DISPATCH,AUDIT,SYSTEMD,PROXY
然后开启Debug之后,再添加默认路由然后,执行journalctl -u NetworkManager
来查看NetworkManager的日志。此时会看到是NetworkManager把路由删掉了。
原因
这是因为NetworkManager的一个BUG导致的。1.8版本的NetworkManager中默认路由是NMDefaultRouteManager来处理的。如果手动删除默认路由的话,会强制修改回配置文件中的默认路由,来阻止外部的修改。如果这时候配置文件中默认路由为空的话,表现出来的形式就是默认路由添加不上了。在NetworkManager1.10版本中NMDefaultRouteManager被废弃了,默认路由和普通路由一样的处理,手动添加的路由不会丢失了。
如果想要了解详细的信息,可以查看 https://bugzilla.redhat.com/show_bug.cgi?id=1503769
网友评论