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 是分离的,那网络连接配置到底是怎么应用到网卡硬件上的呢?底层主要通过两种绑定模式

  1. 通过接口名称(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:
  2. 通过硬件 MAC 地址(MAC Address)锁定 有时候网卡名字可能会发生变化(例如克隆虚拟机或更换主板),导致“名字绑定”失效。此时可以通过网卡独一无二的物理 MAC 地址进行“锁死”。
    • 配置文件体现
      • Rocky 9 在 [ethernet] 标签下配置 mac-address=<MAC地址>
      • CentOS 7 里的 HWADDR=<MAC地址>
      • Ubuntu Netplan 在网卡节点下通过 match 块锁定:
ethernets:
  <自定义逻辑名称>:  # 开启 match 后,这里可以随便起名,如 ens_custom
    match:
      macaddress: <MAC地址>
    addresses:
      - 192.168.10.100/24

4.3 Device

这类命令主要用于查看和控制底层的硬件网卡状态。

  • 查看所有网卡的简要状态
nmcli device status

(可以看到网卡名称、类型、当前状态以及绑定的网络连接)

image-20260516133120948

  • 查看某块网卡的详细硬件信息
nmcli device show <网卡名>

(可以查到网卡的 MAC 地址、IP 分配方式、当前获取到的动态 IP 等全量信息)

image-20260516133338216

  • 开启/关闭网卡硬件
nmcli device connect <网卡名>     # 启用网卡
nmcli device disconnect <网卡名>  # 禁用网卡(切断其网络连接)

4.4 Connection

这类命令用于管理、查看和切换网络连接配置。改 IP、改 DNS 动用的都是这组命令。

  • 查看当前系统所有的网络连接配置
nmcli connection show

(输出结果中绿色的网络连接配置代表当前正在生效)

image-20260516133822642

  • 查看某个特定网络连接的详细参数
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 验证。