Linux 各发行版网络配置
引言
在使用各种 Linux 发行版时,例如CentOS、Rocky、Ubuntu、openEuler等,如果同时用不同的发行版,很容易搞混它们的网络配置文件路径。但相比于去记,搞懂背后的逻辑才是最好的方式,只要理清了底层网络管理的逻辑,就能以不变应万变。
一、Linux 网络管理方式
1.1 network-scripts
传统脚本时代的方式。通过读取 /etc/sysconfig/network-scripts/ 下的文件来配置网络,每次修改都要重启整个网络服务。这种方式的代表是 CentOS 7。
1.2 NetworkManager
现代 Linux 的标配。它是一个动态的网络控制和配置守护进程,支持热插拔和动态感知。它的命令行工具是 nmcli。这种方式的代表有 RHEL/CentOS 8+、Rocky Linux、openEuler。
1.3 Netplan
Ubuntu 引入 Netplan 的初衷是为了统一配置语法。它本身不直接管理网络,而是一个前端抽象层,通过 YAML 文件 “翻译” 给底层 networkd 或 NetworkManager 执行。服务器版默认 renderer: networkd,桌面版默认 renderer: NetworkManager。
二、Red Hat 系
2.1 CentOS 7
在这类系统里,网络配置采用了 ifcfg 文本格式。虽然 CentOS 7 里也有 NetworkManager,但此时传统的 network-scripts 依然是绝对的主流,两套系统共存时还经常冲突,所以一般来说是手写配置。
-
配置文件路径:
/etc/sysconfig/network-scripts/ifcfg-<网卡名> -
核心配置语法(以静态 IP 为例):
NM_CONTROLLED=no # 拒绝 NetworkManager 控制
DEVICE=<网卡名>
BOOTPROTO=static # 静态 IP 模式(DHCP 填 dhcp)
ONBOOT=yes # 开机自启
IPADDR=192.168.10.100
NETMASK=255.255.255.0
GATEWAY=192.168.10.1
DNS1=8.8.8.8 # DNS 服务器
- 生效命令:
systemctl restart network
2.2 CentOS 8
CentOS 8 是一个特殊的过渡阶段。在这个版本中,红帽废弃了传统的 network 服务,将网络全面接管给 NetworkManager。不过,它默认生成的配置文件依然沿用了旧版的 ifcfg 键值对格式。也就是说,此时属于 NetworkManager 管理旧文件(ifcfg)的特殊时期。
-
配置文件路径:
/etc/sysconfig/network-scripts/ifcfg-<网卡名> -
核心配置语法(以静态 IP 为例,语法与 CentOS 7 基本一致,但底层改由 NetworkManager 解析):
DEVICE=<网卡名>
BOOTPROTO=static # 静态 IP 模式(DHCP 填 dhcp)
ONBOOT=yes # 开机自启
IPADDR=192.168.10.100
NETMASK=255.255.255.0
GATEWAY=192.168.10.1
DNS1=8.8.8.8 # DNS 服务器
- 生效命令:由于传统的
network服务在 CentOS 8 中已经不复存在,此时不能再用systemctl restart network了,必须使用nmcli命令来重新加载并激活网卡:
# 重新加载配置文件
nmcli connection reload
# 激活网卡使新配置生效
nmcli connection up <网络连接名>
2.3 Rocky Linux 9 / openEuler
在这类系统里,传统的 network-scripts 已经被彻底移除,网络全面接管给 NetworkManager。
-
配置文件路径:
/etc/NetworkManager/system-connections/<网卡名>.nmconnection -
核心配置语法:
[connection]
id=<网络连接名>
type=ethernet
interface-name=<网卡名>
[ipv4]
method=manual # 手动配置(静态),如果是自动则为 auto
address1=192.168.10.100/24,192.168.10.1 # IP 与网关写在同一行
dns=8.8.8.8; # DNS 服务器
- 生效命令:
# 重新加载配置并激活网卡
nmcli connection reload
nmcli connection up <网络连接名>
注意:如果这个配置文件是手动创建的,需要执行 chmod 600 /etc/NetworkManager/system-connections/<网卡名>.nmconnection 修改权限,否则 NetworkManager 会为了安全直接忽略该配置。
三、Debian 系
3.1 Ubuntu 18.04 +
Ubuntu 引入 Netplan 的初衷是为了统一配置语法。它采用 YAML 格式,对空格缩进有着极其严格的要求(不要用 Tab 键)。
-
配置文件路径:
/etc/netplan/*.yaml -
核心配置语法:
network:
version: 2
renderer: networkd # 或者 NetworkManager
ethernets:
<网卡名>: # 未使用 match 时,必须与真实网卡名一致
dhcp4: no # 关闭 DHCP
addresses:
- 192.168.10.100/24 # 注意必须带掩码
routes:
- to: default
via: 192.168.10.1 # 网关
nameservers:
addresses: [8.8.8.8, 114.114.114.114] # DNS 服务器
- 生效命令:
# 测试配置
sudo netplan try
# 应用配置
sudo netplan apply
四、网络配置工具 nmcli
直接去改各种配置文件,终究还是有些琐碎了。在现代 Linux 系统中,官方更推荐使用 nmcli(NetworkManager Command Line Interface)。掌握后就可以无视底层配置文件的路径和差异,快速地配置网络。
4.1 Device 与 Connection
首先,需要理解 nmcli 的两个核心概念。
- Device(设备):指的是底层的物理网卡或虚拟网卡硬件。它是客观存在的硬件实体。
- Connection(连接):指的是网卡的网络连接配置。它是一堆逻辑参数(IP、网关、DNS)的集合。
值得注意的是:一个 Device 硬件可以绑定多个 Connection,但同一时刻只能有一个生效。 这其实就像手机(Device)可以保存多个 Wi-Fi 连接信息(Connection),但同时只会有一个在生效。
4.2 绑定机制
既然 Device 和 Connection 是分离的,那网络连接配置到底是怎么应用到网卡硬件上的呢?底层主要通过两种绑定模式:
- 通过接口名称(Interface Name)绑定 这是最常见的行为。在配置里直接写死物理网卡的名字。只要这块网卡存在且处于开启状态,配置会立刻生效。
- nmcli 命令体现:
nmcli connection add type ethernet con-name <网络连接名> ifname <网卡名> ipv4.method auto(这里的ifname就是指定用于绑定的网卡名) - 配置文件体现:
- Rocky 9 在
[connection]标签下标注interface-name=<网卡名> - CentOS 7 里的
DEVICE=<网卡名> - Ubuntu Netplan 里直接作为主键定义的
<网卡名>:(不使用 match 块时,主键必须对应真实物理网卡名,如ens33:)
- Rocky 9 在
- nmcli 命令体现:
- 通过硬件 MAC 地址(MAC Address)锁定 有时候网卡名字可能会发生变化(例如克隆虚拟机或更换主板),导致“名字绑定”失效。此时可以通过网卡独一无二的物理 MAC 地址进行“锁死”。
- 配置文件体现:
- Rocky 9 在
[ethernet]标签下配置mac-address=<MAC地址> - CentOS 7 里的
HWADDR=<MAC地址> - Ubuntu Netplan 在网卡节点下通过
match块锁定:
- Rocky 9 在
- 配置文件体现:
ethernets:
<自定义逻辑名称>: # 开启 match 后,这里可以随便起名,如 ens_custom
match:
macaddress: <MAC地址>
addresses:
- 192.168.10.100/24
4.3 Device
这类命令主要用于查看和控制底层的硬件网卡状态。
- 查看所有网卡的简要状态:
nmcli device status
(可以看到网卡名称、类型、当前状态以及绑定的网络连接)

- 查看某块网卡的详细硬件信息:
nmcli device show <网卡名>
(可以查到网卡的 MAC 地址、IP 分配方式、当前获取到的动态 IP 等全量信息)

- 开启/关闭网卡硬件:
nmcli device connect <网卡名> # 启用网卡
nmcli device disconnect <网卡名> # 禁用网卡(切断其网络连接)
4.4 Connection
这类命令用于管理、查看和切换网络连接配置。改 IP、改 DNS 动用的都是这组命令。
- 查看当前系统所有的网络连接配置:
nmcli connection show
(输出结果中绿色的网络连接配置代表当前正在生效)

- 查看某个特定网络连接的详细参数:
nmcli connection show <网络连接名>
- 创建网络连接配置:
# 动态
nmcli connection add type ethernet con-name <网络连接名> ifname <网卡名> ipv4.method auto
# 静态
nmcli connection add type ethernet con-name <网络连接名> ifname <网卡名> ipv4.method manual ipv4.addresses <IP/掩码> ipv4.gateway <网关> ipv4.dns <DNS>
需要注意的是
ifname后面跟的<网卡名>必须严格对应系统识别到的硬件名称,不能瞎写。con-name(网络连接名)是可以自定义的。
- 修改网络连接的参数: 当需要调整现有方案的 IP、网关、DNS 或获取方式(静态/动态)时,使用
modify命令。它的核心语法是:nmcli connection modify <连接名> <属性名> <属性值>。
# 修改IP地址/子网掩码
nmcli connection modify <网络连接名> ipv4.addresses 192.168.10.100/24
# 修改网关地址
nmcli connection modify <网络连接名> ipv4.gateway 192.168.10.1
# 修改DNS服务器
nmcli connection modify <网络连接名> ipv4.dns 223.5.5.5
# 绑定/更换网卡
nmcli connection modify <网络连接名> connection.interface-name <网卡名>
# 重启连接使配置生效
nmcli connection up <网络连接名>
注意:使用
modify修改配置后,配置不会自动生效。因为这只是修改了配置文件,必须要手动执行nmcli connection up <网络连接名>重新激活该方案,网卡才会应用新参数。如果绕过了
nmcli命令,选择直接用 vim 手动编辑.nmconnection配置文件,必须要保证这个配置文件的权限是600,否则需要先执行:chmod 600 <配置文件路径>。因为系统出于安全考虑,若文件权限大于 600(例如 644),NetworkManager 会直接拒绝加载该网络连接配置。此外,需要执行nmcli connection reload告知系统重新扫描,否则网络引擎无法感知文件的变更。
- 删除或停止某个网络连接配置:
nmcli connection down <网络连接名> # 停止该网络连接(网卡会失联)
nmcli connection delete <网络连接名> # 删除该网络连接
4.5 常用操作
在实际使用中,最常用的莫过于修改静态网络或切换到 DHCP 了。
- 配置静态 IP:
# 1. 将网络连接设置为手动配置 (Static)
nmcli connection modify <网络连接名> ipv4.method manual
# 2. 修改网络连接中的 IP 地址、掩码和默认网关
nmcli connection modify <网络连接名> ipv4.addresses 192.168.10.100/24 ipv4.gateway 192.168.10.1
# 3. 修改网络连接中的 DNS 服务器(多个 DNS 用空格隔开)
nmcli connection modify <网络连接名> ipv4.dns "8.8.8.8 114.114.114.114"
# 4. 让网卡重新加载该网络连接,使配置立刻生效
nmcli connection up <网络连接名>
- 切换回 DHCP 自动获取:
# 1. 将网络连接改回自动获取
nmcli connection modify <网络连接名> ipv4.method auto
# 2. 重新激活网络连接
nmcli connection up <网络连接名>
五、网络验证
1.验证 IP 地址是否成功挂载:
ip addr show <网卡名> # 可以简写为 ip a
检查对应网卡下是否已经出现了配置的静态 IP。如果显示的还是旧 IP 或干脆没有 IP,说明配置文件的语法有误,或者网络服务没有成功重载。
2.验证局域网网关是否连通:
ping -c 3 <网关IP>
优先 ping 网关。如果网关都 ping 不通,说明子网掩码、网关地址填错,或者虚拟机的网络模式(NAT/桥接)选错了物理网卡。
3.验证外网与 DNS 解析是否正常:
ping -c 3 www.baidu.com
如果 ping 提示 Name or service not known,说明内部连通正常,但 DNS(nameservers)配置填错或没生效;如果直接卡死或提示不可达,说明缺少了默认路由(Gateway/routes)。
六、对比
| 系统家族 | 代表发行版 | 网络管理器 | 主配置文件路径 | 语法风格 | 生效命令 |
|---|---|---|---|---|---|
| Red Hat 系 (旧) | CentOS 7 | network-scripts NetworkManager |
/etc/sysconfig/network-scripts/ifcfg-<网卡> |
键值对 (KEY=VALUE) |
systemctl restart network |
| Red Hat 系 (过渡) | CentOS 8 | NetworkManager | /etc/sysconfig/network-scripts/ifcfg-<网卡> |
键值对 (KEY=VALUE) |
nmcli connection reload && nmcli connection up <网络连接名> |
| Red Hat 系 (新) | Rocky Linux 9 openEuler |
NetworkManager | /etc/NetworkManager/system-connections/<网卡>.nmconnection |
INI 密匙文件 ([ipv4]) |
nmcli connection reload && nmcli connection up <网络连接名> |
| Debian 系 | Ubuntu 20.04+ | Netplan(底层 networkd / NetworkManager) | /etc/netplan/*.yaml |
YAML 缩进格式 | sudo netplan apply |
七、总结
知道了这些发行版背后的底层网络管理的逻辑之后,在日常配置网络时,可以通过 nmcli device status 或者 systemctl status NetworkManager 看看当前是哪一种网络管理方式。
在 Rocky Linux、openEuler 上,最好用 nmcli 命令去修改网络,这样会自动生成规整的 .nmconnection 配置文件,避免手写可能出现错误。
在 Ubuntu 中修改 YAML 配置文件时,需要注意空格对齐,修改后先用 netplan try 验证。