Linux系统升级内核重启后网卡地址获取失败

一、问题描述

某次centos 7.1 系统升级后,检查系统版本升级为centos7.9了,但重启后发现网卡eth0地址获取失败(dhcp),重启网卡报错:RTNETLINK answers: Cannot assign requested address ,如下所示:
在这里插入图片描述

二、原因及处理

1、出现这种故障一般原因有2:

1)与NetworkManager 服务冲突;这时,我们直接关闭 NetworkManger 服务就好了, 执行service NetworkManager stop,并且禁止开机启动 chkconfig NetworkManager off 。

2)与配置文件的MAC地址不匹配,这种情况我们查看修改 /etc/udev/rules.d/70-persistent-net.rules文件的MAC地址和 /etc/sysconfig/network-scripts/ifcfg-eth0一样就好了。

2、执行重启网卡:

ip link set eth0 down/up
ifdown/ifup eth0

3、检查NetworkManager 服务并停用它在这里插入图片描述

systemctl list-unit-files --type service | grep NetworkManager
chkconfig --list | grep network

4、 ip addr flush dev eth0
在这里插入图片描述
5、重启网卡出现:RTNETLINK answers: File exists 提示

在这里插入图片描述
注:omfwd是rsyslog的日志转发模块。

6、再次刷新网卡信息

ip addr flush dev eth0
dhclient eth0
ip a s //输出如下

在这里插入图片描述

三、NetworkManager

NetworkManager是2004年RedHat启动的项目,皆在能够让Linux用户更轻松的处理现代网络需求,尤其是无线网络,能够自动发现网卡并配置IP地址。NetworkManager由一个管理系统网络连接、并且将其状态通过D-BUS(一个提供简单的应用程序 互相通讯的途径的自由软件项目,它是做为freedesktoporg项目的一部分来开发的。)进行报告的后台服务,NetworkManager的后台服务对于GNOME和Xfce那就是nm-applet工具,而对于KDE用户来说就是KNetworkManager;以及一个允许用户管理网络连接的客户端程序(nmcli、nmtui图形),使用nmcli用户可以查询网络连接的状态,也可以用来管理。它们都可用来管理网络,但是有一个前提:nmctl networking 状态必须是enable(nmcli networking on),否则设备状态为unmanaged,这会导致network启动不了!
在这里插入图片描述

    RHEL7上同时支持network.service和NetworkManager.service(简称NM)。默认情况下这2个服务都有开启,CentOS7更加注重使用NetworkManager服务来实现网络的配置和管理;但是两者兼容性问题,会出现未知的问题(ip地址无法生效或网络不通等问题),一般我们使用其中之一。**注意:**RHEL 8/Centos 8上已废弃network.service(默认不安装),只能通过NetworkManager进行网络配置。

  NetworkManager主要管理2个对象: Connection(网卡连接配置) 和 Device(网卡设备),他们之间是多对一的关系,但是同一时刻只能有一个Connection在device生效,即不是多会话的。在RHEL 8/Centos 8有三种方法配置网络:

1、通过nmcli connection add命令配置,会自动生成ifcfg文件。

2、手动配置ifcfg文件,通过nmcli connection reload来加载生效。

3、手动配置ifcfg文件,通过传统network.service来加载生效。

NetworkManager 0.8.1后还支持使用蓝牙,不仅支持个人区域网络(PAN)上网,也支持老的蓝牙拨号网络(DUN)协议。NetworkManager支持IPv6的自动配置和静态IP;NetworkManager 新版本还会带来IPv6的DHCP支持。

NetworkManager 的出现主要为了解决下面的问题:软件可以自动检测尽量多的信息,在复杂网络环境下可以平滑的切换,可以即时反馈网络状态,可以在桌面环境下工作。NetworkManager 网络配置顺序:

1) 如果有线网络连接可用,NetworkManager会自动配置有线网络连接。
2) 如果有线网络连接不可以用,NetworkManager 会搜寻所有可检测到的无线网络,如果有保存的授权信息, NetworkManager会自动配置无线网络连接
3) 如果用户自定义网络信息,用户定义具有最高优先权。

1)nmcli

配置文件:/etc/NetworkManager/system-connections;命令选项:

在这里插入图片描述

# 查看广播状态(radio)
nmcli r

#查看当前区域内的无线网络
nmcli dev wifi

# 打开wifi(软件级别)
nmcli r wifi on

# 搜索wifi(device)
nmcli d wifi

# 连接wifi
nmcli d wifi connect wifi名称 password wifi密码

# 显示密码
nmcli d wifi show-password

# 查看现有接口(connection)
nmcli c

# 关闭网络(硬件级别)
nmcli c down netplan-wlan0-TP-LINK_A9BD
nmcli c down netplan-eth0

#查看连接状态:
nmcli nm
nmcli connection

#查看连接状态:
nmcli con status

#查看VPN:
nmcli con

#连接/断开VPN: 
nmcli con up id YOUR_VPN_ID
nmcli con down id YOUR_VPN_ID

#查看网络适配器状态,即device有没有连接到connection,列出所有网络设备
nmcli device
nmcli dev disconnect eth0 //断开连接
nmcli dev connect  eth0
nmcli con show
nmcli device show ens160
nmcli device status

#链接到ens33
nmcli device connect ens33
nmcli connection

# 重新加载网卡配置,不会立即生效
nmcli connection reload

#立即生效网卡配置
nmcli device reapply ens160

# 立即生效Connection配置
nmcli connection down ens160 && nmcli connection up ens160
# 为device创建connection
nmcli connection add type ethernet con-name ens160-con ifname ens160 ipv4.addr 1.1.1.2/24 ipv4.gateway 1.1.1.1 ipv4.method manual

nmcli connection add type ethernet con-name ens160-con ifname ens160 ipv.method auto

# 修改IP地址并立即生效
nmcli connection modify ens160-con ipv.addr 1.1.1.3/24 && nmcli connection up ens160-con

#交互方式修改IP
nmcli connection edit ens160-con

#修改当前网络连接对应的DNS服务器
nmcli con mod eno1 ipv4.dns "223.5.5.5 8.8.8.8"
nmcli con up eno1

NetworkManger客户端nmcli对应参数项目与配置文件内的参数对应关系图:

在这里插入图片描述

# 比如我这里设置eth0为手动设置静态地址,为192.168.31.5,子网掩码24,自启动
nmcli connection modify eth0 ipv4.method manual ipv4.addresses 192.168.31.5/24 connection.autoconnect yes 
nmcli connection up eth0

2)ip命令

禁用网卡:ip pnk set eth1 down
启用网卡:ip pnk set eth1 up
更改名称:ip pnk set eth1 name ethwang
添加IP: ip addr add 192.168.179.150/24 dev eth1 label eth1:0
删除IP: ip addr del 192.168.179.150/24 dev eth1 label eth1:0
清楚网卡:ip addr flush dev eth1
添加路由:
ip route add 192.168.0.0/24 via 172.16.0.1 dev eth1
ip route add defapt via 172.16.0.1 dev eth1
删除路由:ip route flush dev eth1

#路由写入相关配置文件(永久生效route)

vi /etc/sysconfig/network-scripts/route-eth1
#写法一:TARGET via GW
10.0.0.0/8 via 172.16.0.1

#写法二:三行定义一条路由
ADDRESS#=10.0.0.0
NETMASK#=255.0.0.0
GATEWAY#=172.16.0.1

ifconfig eth1:0 192.168.179.180/24 up
ifconfig eth1:0 192.168.179.180/24 down

猜你喜欢

转载自blog.csdn.net/ximenjianxue/article/details/125710952