[daily] 不让NetworkManger自动接管网络设备

一  场景描述

有一个dpdk程序,在运行时使用了rte kni。

它启动的时候,会自动给系统增加一个网卡设备,停止运行的时候又会把它去掉。像这样:

[root@T9 gen-py]# ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
... ...
25: kni_vpu: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
    link/ether 96:46:c3:ca:9c:99 brd ff:ff:ff:ff:ff:ff
    inet 192.168.8.9/24 brd 192.168.8.255 scope global kni_vpn
       valid_lft forever preferred_lft forever

就是名叫 kni_vpu 的那一个,然后程序还会给它配上一个地址,这里的例子是192.168.8.9

 

二  问题

然后,运行一小会。问题就来了。192.168.8.9上的地址不见了。消失了。没有了。

是谁搞的鬼呢?

 

三 分析

分析这个问题,首先从内外两方面入手,对内看一下dmesg,对外tcpdump抓个包。然后重现一下,等待ip消失的那一个瞬间。

dmesg没有任何输出,但是tcpdump发现了dhcp的报文:

11:15:20.192103 IP 0.0.0.0.68 > 255.255.255.255.67: BOOTP/DHCP, Request from e2:fc:36:42:6f:71, length 300

这个MAC(e2fc)就是我的那个kni口的mac。

所以一点是网络管理utility,启动了dhcp把我的ip干掉了。

[root@T9 ~]# ps -ef |grep dh
root     30337  3566  0 11:04 ?        00:00:00 /sbin/dhclient -d -q -sf /usr/libexec/nm-dhcp-helper -pf /var/run/dhclient-kni_vpn.pid 
-lf /var/lib/NetworkManager/dhclient-ef87da69-b085-309c-969f-8dbab61bce38-kni_vpn.lease -cf /var/lib/NetworkManager/dhclient-kni_vpn.conf kni_vpn

网络管理用了NetworkManager,查看一下配置,果然是这样的:

[root@T9 ~]# ps -ef |grep dh
root     30337  3566  0 11:04 ?        00:00:00 /sbin/dhclient -d -q -sf /usr/libexec/nm-dhcp-helper -pf /var/run/dhclient-kni_vpn.pid -lf /var/lib/NetworkManager/dhclient-ef87da69-b085-309c-969f-8dbab61bce38-kni_vpn.lease -cf /var/lib/NetworkManager/dhclient-kni_vpn.conf kni_vpn
[root@T9 ~]# nmcli c show ef87da69-b085-309c-969f-8dbab61bce38
connection.id:                          Wired connection 1
connection.uuid:                        ef87da69-b085-309c-969f-8dbab61bce38
......
ipv4.method:                            auto
......

NetworkManger这个货真是越来越高级了,着实让人喜爱。

 

四 处理方案

很显然,这是NetworkManger支持了auto detect,auto plugin之类的功能。查一下手册:

man 5 NetworkManager.conf

用多种方案可以配,总的原则就是配置黑白名单。写到/etc/NetworkManager/NetworkManager.conf 配置文件里。

白名单就这样:

[keyfile]
unmanaged-devices=interface-name:kni_vpn

黑名单就这样:

[main]
no-auto-default=*

然后,我采用的黑名单的配法,这样配置就等于关闭了auto detect的属性,只有明确的手工配置的网卡,才会被networkmanager管理。

 

(一) 放在子配置文件中

如果man手册所述, 我们不用修改主配置文件/etc/NetworkManager/NetworkManager.conf, 任何配置都应该以子配置文件的形式,放在以下三个位置之一

/etc/NetworkManager/conf.d/name.conf
/run/NetworkManager/conf.d/name.conf
/usr/lib/NetworkManager/conf.d/name.conf

如:

[root@vpn103 ~]# cat /etc/NetworkManager/conf.d/tong.conf
[keyfile]
ummanged-devices=interface-name:kni_vpn

 

然后, 再发一个SIGHUP给进程,通知它重新load配置

 

posted on 2019-03-16 11:51  toong  阅读(1447)  评论(0编辑  收藏  举报