Centos默认路由添加不上的问题

问题

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把路由删掉了。
企业微信截图_15441653982783.png

原因

这是因为NetworkManager的一个BUG导致的。1.8版本的NetworkManager中默认路由是NMDefaultRouteManager来处理的。如果手动删除默认路由的话,会强制修改回配置文件中的默认路由,来阻止外部的修改。如果这时候配置文件中默认路由为空的话,表现出来的形式就是默认路由添加不上了。在NetworkManager1.10版本中NMDefaultRouteManager被废弃了,默认路由和普通路由一样的处理,手动添加的路由不会丢失了。
如果想要了解详细的信息,可以查看 https://bugzilla.redhat.com/show_bug.cgi?id=1503769

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章