某次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是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) 如果用户自定义网络信息,用户定义具有最高优先权。
配置文件:/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
禁用网卡: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