linux network启动报错
报错现象
测试环境虚拟机测试的时候,发现有一台服务器重启之后,网络连接不上,通过控制台登录到服务器里面手动重启了network服务,发现提示报错无法启动。

通过journactl -u network -f可以看到network启动报错原因是因为两张网卡设备,找不到

排查过程
在发现启动network失败之后,尝试过使用if up 设备名的命令启动指定网卡

报错现象还是如上
查看网卡配置文件

网卡配置文件正常
查看networkmmanager 服务
通过与ai查询报错信息,发现服务器在重启之后启动了networkmmanager 这个服务

networkmanager 是 linux 系统中用于动态管理和控制网络连接的守护进程服务,是较新版本的linux系统中统一使用的网络管理器。
由于目前使用的linux系统还是centos 7.5的,默认是使用network对网络配置进行管理的。
没有对networkmmanager 服务的使用需求。所以就将networkmmanager 直接关闭了。
处理方案
停止networkmmanager 服务并禁用
systemctl disable --now networkmanager

重启network服务

将networkmmanager 禁用之后,再重启network服务之后正常
故障原因
networkmmanager 和network 都是对linux进行网络配置的管理器,但是如果两个服务同时启用的话,可能会导致冲突,网络服务异常,这个时候需要停止network或者是networkmmanager 。
一般来说我们直接使用系统安装时候默认自带的网络管理服务即可。因为当前使用的服务器版本是centos 7.5 默认自带的网络管理是network,所以就将networkmmanager 禁用,这个根据实际服务器版本决定使用那个,例如像openeuler和kyline、ubuntu 24这些较高的linux版本,默认使用的网络管理服务就是networkmmanager。
nmcli 的使用
nmcli 是 networkmanager command line interface 的缩写,是 linux 系统中用于控制和管理 networkmanager 服务的官方命令行工具。
networkmanager 是后台运行的“网络管家”(守护进程),nmcli 是你与这个管家对话的“遥控器”(命令行客户端)
nmcli的常用命令
nmcli device status (列出所有物理/虚拟网卡及其当前状态(是否被托管、是否已连接))
[root@localhost ~]# nmcli device status device type state connection ens36 ethernet connected ens36 ens33 ethernet disconnected -- lo loopback unmanaged --
看所有服务于网卡接口的连接,connection指一组关于网卡的配置信息,对于一个单一的网卡设备可以有多个连接,并且可以在多个连接之间切换,但一个网卡接口一次只能对应一个连接生效
| 列名 | 英文全称 | 含义说明 | 示例解读 |
|---|---|---|---|
| device | device name | 物理/虚拟网卡名称,由内核识别 | ens36 和 ens33 是两张网卡 |
| type | device type | 设备类型,如 ethernet、wifi、bridge 等 | 两张都是有线以太网网卡 |
| state | device state | 设备当前运行状态(最关键!) | ens36 已连网,ens33 未连网 |
| connection | active connection | 当前激活的连接配置名称 | ens36 绑定了同名配置,ens33 未绑定任何配置 |
nmcli connection show(显示所有已保存的连接配置文件(包含名称、类型、绑定的设备))
[root@localhost ~]# nmcli connection show name uuid type device ens36 346751c5-0779-3722-b19a-8fde14fccdc5 ethernet ens36
激活/停用某个连接(修改配置后必须执行此步才会生效)
nmcli connection up 设备名激活连接nmcli connection down 设备名停止连接
配置网卡开机自启
nmcli connection modify 设备名 connection.autoconnect yes实际修改的是网卡配置文件onboot=yes
[root@localhost ~]# nmcli connection modify ens36 connection.autoconnect yes
修改现有连接的 ip 地址(仅改配置,不立即生效)
nmcli connection modify 设备名 ipv4.addresses ip地址/掩码位数 nmcli connection modify 设备名 ipv4.method manual ipv4.addresses ip地址/掩码位数
ipv4.method manual 表示设置网卡获取ip的方式手动指定

直接让某个物理网卡自动连网(nm 会自动匹配或创建配置)
nmcli device connect 设备名执行了该命令之后,nm会创建一个网卡配置文件。- 不过该网卡配置文件获取ip地址的方式是dhcp
修改网关
nmcli connection modify 设备名 ipv4.gateway 网关ip地址
修改dns
nmcli connection modify 设备名 ipv4.dns dns定制
nmcli高级应用
单网卡设置多连接
添加连接
nmcli connection show 列出 networkmanager 中所有已保存的网络连接配置文件
当前我的ens36的这张网卡只有一个连接,可以再创建一个连接并配置ip地址
[root@localhost yum.repos.d]# nmcli connection show name uuid type device ens36 346751c5-0779-3722-b19a-8fde14fccdc5 ethernet ens36 [root@localhost yum.repos.d]# nmcli connection add con-name test type ethernet ifname ens36 connection 'test' (0284eb11-1c98-472b-9c0c-e271445facdd) successfully added. [root@localhost yum.repos.d]# nmcli connection show name uuid type device ens36 346751c5-0779-3722-b19a-8fde14fccdc5 ethernet ens36 test 0284eb11-1c98-472b-9c0c-e271445facdd ethernet --

上图创建一个新的test的连接,指向了ens36的网卡设备,现在可以给test的连接创建ip地址。
网卡连接切换命令:nmcli connection up 连接名 设备名
# 设置新链接test的ip地址,网关、dns [root@localhost yum.repos.d]# nmcli connection modify test ipv4.method manual ipv4.addresses 10.201.9.199/24 ipv4.gateway 10.201.9.1 ipv4.dns 8.8.8.8 connection.autoconnect no # 激活test的网卡连接,即可切换到test所配置的ip地址 [root@localhost yum.repos.d]# nmcli connection up test ens36
删除连接
nmcli connection delete 连接名的uuid
[root@localhost ~]# nmcli connection show name uuid type device ens36 346751c5-0779-3722-b19a-8fde14fccdc5 ethernet ens36 test 0284eb11-1c98-472b-9c0c-e271445facdd ethernet -- [root@localhost ~]# [root@localhost ~]# nmcli connection delete 0284eb11-1c98-472b-9c0c-e271445facdd connection 'test' (0284eb11-1c98-472b-9c0c-e271445facdd) successfully deleted. [root@localhost ~]# nmcli connection show name uuid type device ens36 346751c5-0779-3722-b19a-8fde14fccdc5 ethernet ens36
新网卡添加连接
给虚拟机添加一张新的网卡,针对ens37的网卡创建一个连接,并配置ip地址

[root@localhost ~]# nmcli connection add con-name ens37 type ethernet ifname ens37
connection 'ens37' (341fa9d4-d0f3-4cad-b353-61a6d6d041f8) successfully added.
[root@localhost ~]# nmcli connection modify ens37 ipv4.method manual ipv4.addresses 10.201.9.199/24 ipv4.gateway 10.201.9.1 ipv4.dns 8.8.8.8 connection.autoconnect no
[root@localhost ~]# nmcli connection up ens37
connection successfully activated (d-bus active path: /org/freedesktop/networkmanager/activeconnection/25)
[root@localhost ~]# ip ad
4: ens37: <broadcast,multicast,up,lower_up> mtu 1500 qdisc fq_codel state up group default qlen 1000
link/ether 00:0c:29:3d:02:dc brd ff:ff:ff:ff:ff:ff
inet 10.201.9.199/24 brd 10.201.9.255 scope global noprefixroute ens37
valid_lft forever preferred_lft forever
inet6 fe80::101a:fe5b:e9d5:34b2/64 scope link noprefixroute
valid_lft forever preferred_lft forever=
使用 nmcli connection add con-name ens37 type ethernet ifname ens37 创建完连接之后可以看到在/etc/sysconfig/network-scripts/目录下面就会生成一个ens37连接名的配置文件。
总结
以上为个人经验,希望能给大家一个参考,也希望大家多多支持代码网。
发表评论