一  场景描述

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

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

[root@T9 gen-py]# ip a
: lo: <LOOPBACK,UP,LOWER_UP> mtu qdisc noqueue state UNKNOWN group default qlen
link/loopback ::::: brd :::::
inet 127.0.0.1/ scope host lo
... ...
: kni_vpu: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu qdisc pfifo_fast state UP group default qlen
link/ether ::c3:ca:9c: 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的报文:

::20.192103 IP 0.0.0.0. > 255.255.255.255.: BOOTP/DHCP, Request from e2:fc:::6f:, length 

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

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

[root@T9 ~]# ps -ef |grep dh
root : ? :: /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 : ? :: /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
connection.uuid: ef87da69-b085-309c-969f-8dbab61bce38
......
ipv4.method: auto
......

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

四 处理方案

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

man  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配置

[daily] 不让NetworkManger自动接管网络设备的更多相关文章

  1. python paramiko自动登录网络设备抓取配置信息

    ssh = paramiko.SSHClient()ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())ssh.connect(hostn ...

  2. zabbix 布署实践【4 服务器自动探索发现,并且自动关联模版】

    使用管理员登录zabbix后,在配置---自动发现--创建发现规则 如下:我们的需求是监听办公网内openstack的所有虚拟机,在其VM创建后,自动加到zabbix监控中来,并自动关联监控模版 可以 ...

  3. Zabbix-设置自动发现规则实例

    一.前文 此篇文章,主要针对自动发现规则中使用snmpv2类型发现 zabbix官方解读,可当参考:   https://www.zabbix.com/documentation/4.0/zh/man ...

  4. CentOS7 如何挂载网络设备

    CentOS 自动挂载网络设备的方法 手动挂载: [root@mysql ~]# mount -o username=USER,password=PASSWORD //192.168.10.212/z ...

  5. Hyper-V 2012 R2 故障转移群集

    和终端用户相比,企业用户对于业务的连续性和可靠性更为在意.相对而言,企业一般不会将追逐单一硬件的性能排在第一位. 如何衡量业务是否持续可用,一般使用"x 个 9"这种方式来定义.如 ...

  6. 理解 OpenStack Swift (1):OpenStack + 三节点Swift 集群+ HAProxy + UCARP 安装和配置

    本系列文章着重学习和研究OpenStack Swift,包括环境搭建.原理.架构.监控和性能等. (1)OpenStack + 三节点Swift 集群+ HAProxy + UCARP 安装和配置 ( ...

  7. Heartbeat+LVS构建高可用负载均衡集群

    1.heartbeat简介: Heartbeat 项目是 Linux-HA 工程的一个组成部分,它实现了一个高可用集群系统.心跳服务和集群通信是高可用集群的两个关键组件,在 Heartbeat 项目里 ...

  8. 用HAProxy和KeepAlived构建高可用的反向代理

      用HAProxy和KeepAlived构建高可用的反向代理 用HAProxy和KeepAlived构建高可用的反向代理 前言对于访问量较大的网站来说,随着流量的增加单台服务器已经无法处理所有的请求 ...

  9. 第八章 Hyper-V 2012 R2 故障转移群集

    和终端用户相比,企业用户对于业务的连续性和可靠性更为在意.相对而言,企业一般不会将追逐单一硬件的性能排在第一位. 如何衡量业务是否持续可用,一般使用"x 个 9"这种方式来定义.如 ...

随机推荐

  1. Prisma GraphQL 服务器 生产者 "https://www.prisma.io"

    Prisma   一个 GraphQL  服务器 生产者     "https://www.prisma.io" , 关注一下

  2. 【原创】Linux基础之上传下载

    1 rz sz 安装 yum install -y lrzsz 上传 rz ,对话框操作 下载 sz $filename 注意:rz不能上传大于4g的文件,此时可以改为scp或sftp上传,其中sft ...

  3. iOS -- Effective Objective-C 阅读笔记 (6)

    1: 在 既有类中使用 关联对象存放自定义数据 有时候需要在对象中存放相关信息, 这是我们经常会从对象所属的类中继承一个子类, 然后改用这个子类对象, 然而并非所有的情况下都能这么做,  有时候类的实 ...

  4. Windows安装activemq

    1.Windows下载解压就可以了,官网:http://activemq.apache.org/ 8161查看端口 61616消息服务端口 2.浏览器访问localhost:8161测试 3.可以在c ...

  5. 文本框监听事件blur()的简单使用

    场景描述:在做编辑功能的时候,经常要判断编码,或者密码之类的是否已经被使用,以前自己做的时候,经常都是在提交了之后才判断的,到现在,才发现,这样做的用户体验不好,完美一点的做法就是当此文本框失去焦点的 ...

  6. JDK 11中的ZGC-一种可扩展的低延迟垃圾收集器

    # 背景正如我们所知道的在JDK 11中即将迎来ZGC(The Z Garbage Collector),这是一个处于实验阶段的,可扩展的低延迟垃圾回收器.本文整合了外网几篇介绍ZGC的文章和代码. ...

  7. C# .Net 中字典Dictionary<TKey,TValue>泛型类 学习浅谈

    一.综述: Dictionary<TKey,TValue>是在 .NET Framework 2.0 版中是新增的.表示键值对的集合,Dictionary<TKey,TValue&g ...

  8. (一)Knockout 计算属性

    1 Computed 首先,创建一个view model如下: <body> <p>The fullname is: <span data-bind="text ...

  9. CF121E Lucky Array

    题解: 这个题好像暴力+线段树就能过 就是对修改操作暴力,线段树维护查询 为啥呢 因为保证了数$<=1e4$,于是这样复杂度$n*1e4=1e9$ 那么特殊数只有30个 又因为操作是只加不减的, ...

  10. VScode查找替换常用正则表达式

    1.从字符串开始到结束,例如:<a href="#">测试</a> (<'.*?>) //匹配到整个a标签 (>'.*?<) //匹 ...