ifconfig up/down与ifup/ifdown同时使用产生的冲突以及使用ip link解决问题

11 篇文章 2 订阅

概述: 在同时开启networkNetworkManager服务的系统中,使用ifconfig up/down管理网络导致了网络的混乱问题,而是用ifup/ifdown则没有出现如此问题。怀疑是ifconfig up/down与network以及NetworkManager同时使用产生了冲突。最后使用ifconfig interface up/down的替代命令ip link set interface up/down解决了问题。
文章记录了这个过程。

1. 场景描述

基本的使用场景是,在一台工作站上,存在有多个有线网卡口,同样也存在无线网卡。
有一个网口eth0连接一个监控器,另一个网口eth1连接另一个外接控制台,另外存在一个有线网口eth2和一个无线网卡wlan0连接外网。

网卡接口名称用途是否有线网是否长久连接
eth0连接监视器有线长久连接
eth1外接控制台有线长久连接
eth2连接外网有线可能断开
wlan0连接外网无线可能断开/切换

1.1 连接的场景

网络连接的基本逻辑:

  • 监控器eth0和外接控制台eth1的网络是通过有线网长久连接
  • 与外网连接(eth2wlan0)随时可能断开
  • 连接外网的无线网wlan0和有线网eth2不会同时连接(有线网优先
    • 无线网wlan0连接时,如果这是有线外部网eth2络接入,则断开无线网wlan0
    • 当外部有线网络eth2断开后,自动开启无线网wlan0尝试连接

网络连接的限制:

  • 为保证监视器eth0和外接控制台eth1的正确连接,都设置与外接设备相同网段的静态IP地址
  • 连接外网的有线eth2和无线网wlan0的IP地址可以动态也可以静态分配,但是需要与监控器eth0和外接控制台eth1的网段不能相同
  • 检测有线外网eth2的连接,如果有线外网eth2连接上,则不能通过无线外网wlan0连接;有线外网eth2连接断开或者不连接的状态,尝试连接无线外部网wlan0

1.2 不同网卡的网络切换

由于连接固定设备的两个网卡需要有固定的IP地址,因此在/etc/sysconfig/network-scripts下分别放置了相应的网卡配置文件ifcfg-eth0ifcfg-eth1
对于连接外网的有线网卡,希望在不启动对应程序的情况下不启动,所有会控制其启动机会,也设置了配置文件ifcfg-eth2,而无线网不需要配置文件,因此没有放置配置文件。
因为连接外网的网卡需要随着应用程序或者链接状态启动和停止,对于网络的启停,存在两套常用的命令(命令中的interface代表网卡的名称):

  1. ifconfig interface up/down
  2. ifup/ipdown interface

如果存在配置文件的话,常使用的是ifupifdown,这样会直接调用对应的配置文件。如果不存在配置文件的话,这样的调用会出错。
因此对于没有配置文件的网卡,调用ifconfig interface upifconfig interface down

1.3 基本的尝试

通过ifplugd服务检测有限外网的网线的接入,使用ifup eth2ifconfig wlan0 down,关闭无线网并启动有线外部网络连接,并应用配置。
检测有限外网的网线的断开,使用ifdown eth2ifconfig wlan0 up,关闭无线网并启动无线外部网络连接。
在启动应用程序的时候,会同样检测一下网络,并应用对应的配置。

2. 发现的问题

在启动应用程序的时,使用了如上命令启网络停命令后,在某些系列的产品偶发了一个问题,监视器对应的网卡eth0的IP地址,会在一两分钟以内消失,并且使用dhclient也不能成功分配。

  • 同一台计算机上,有的设备是偶发的,有的是必现的
  • 使用另一系列的监控器的机器上,没有出现过这个问题

3. 具体情况分析

3.1 可能情况的分析与处理

因为无线网卡是后面添加的设备,因此想在开机时候禁止掉无线网卡使用,在/etc/rc.local中添加如下命令:

ifconfig wlan0 down
rfkill block wifi

结果发现还是不可行,监控器eth0还是会丢失IP地址,于是又在后面添加了一句:

dhclient eth0

这样操作后,监控器eth0获取到的IP地址不会再丢失,但是如果这个时候eth2如果正好连接着网线,eth2也会意外的获取到IP地址。这种情况是不应该出现的,因为在ifcfg-eth2中配置eth2不会随着系统启动,只会在应用程序启动时,通过ifup启动。
这个时候感觉dhclient的执行已经乱掉了。
一个偶然的机会执行了service network status,查看目前的网络情况,但是当时在/etc/sysconfig/network-scripts文件夹下还存在网卡名称错误的ifcfg-*的文件,也在这里面罗列出来了,最后就配置文件是与ifup/ifdown相关的,有没有可能在network服务中检测到的是否与这个配置相关(在这些配置文件中,都声明了可以使用NM(NetworkManager)服务管理)。
这时也在网上查看到NetworkManager和network这两个服务有时候会有冲突,很多人的解决方案是关闭其中一个。
而对于wlan0我使用了ifconfig进行管理,我在想会不会是ifconfig up/down与network服务管理(ifup/ifdown)有冲突呢,于是我也生成了一个ifcfg-wlan0放置到/etc/sysconfig/network-scripts中,用于启停无线网络,果然问题解决了。

4. 解决的方法

在network服务开启时候,不再混用ifconfig up/down启停网络解决了问题,感觉network服务是使用ifup和ifdown来启停网络的。

5. 其他相关问题

在另外一种设备上,使用另一个同厂家其他型号的监控器,并且没有外部控制器,使用同样的网络执行控制脚本,没有出现过监控器eth0IP丢失的问题,但是也是在不合时宜的时候开启了有线外网的eth2服务。
还是在这个设备上,为了某些目的想在NetworkManager服务中脱离对于wlan0的控制,在/etc/NetworkManager/NetworkManager.conf中排除对于wlan0管理之后,对于eth0来说也出现了上述网卡的问题,但是同时在也排除对于eth0的管理则不会再出现这个问题。
这时我就更觉得是网上说的networkNetworkManager服务出现冲突的问题了。
至于为什么明知道他们会冲突还都启用,这个是因为有很多第三方的库和很多以前的老代码都会同时使用到这两方面服务。
ifcfg-*中是能配置是否通过NetworkManager管理的。
PS:
网上有人说,ifconfig up/down会自动检测配置文件,如果存在则相当于ifup/ifdown,但是现在看来不一定相同,后期如果有更多时间则详细分析与阅读下。

6. 查找官方文档

在查看了红帽7有关网络的官方文档之后,在上面描述了NetworkManagernetwork启动管理的相关顺序等问题,感觉他们的冲突可能不是问题点。
在文档中提到ifup/ifdown是红帽7系列支持的方法。

7. 最后解决方法

后来了解到ifconfig命令已经被当成过时的命令了,也在网上找到使用ip的替代方案。使用如下的语句替代ifconfig interface up/down,之后暂时没有出现上面提到的问题:

ip link set wlan0 up
ip link set wlan down
  • 0
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值