梓沂头像
关注

CentOS 网络配置实战:手动编辑 ifcfg 文件时 UUID 的坑与解决方案

一次手动配置静态 IP 的经历,让我彻底搞懂了 NetworkManager 的 UUID 管理机制


背景

最近在配置一台 CentOS 服务器的网络,需要将网卡从 DHCP 改为静态 IP。本以为是个简单的配置文件修改,结果却踩了一个不大不小的坑——手动添加的 ifcfg 文件明明格式正确,重启网络后却断网了

经过一番排查,发现罪魁祸首是 UUID 冲突。本文将完整记录这个问题现象、原因分析和解决方案,希望能帮助遇到同样问题的朋友。


环境信息

  • 操作系统:CentOS 7 / CentOS 8
  • 网络管理工具:NetworkManager + network 服务
  • 网卡名称enp2s0
  • 目标 IP10.0.0.8/16

初始状态

服务器原本使用 DHCP 自动获取 IP,查看当前网络连接:

[root@pq ~]# nmcli connection show
NAME        UUID                                  TYPE      DEVICE
有线连接 1  e328a32a-9152-3f3a-b5d2-b7fe6ccafee5  ethernet  enp2s0

网卡 enp2s0 当前使用的是 DHCP 配置,连接名为 有线连接 1(这个名称不太友好,后面会一并修改)。


第一次尝试:手动编辑配置文件

1. 创建静态 IP 配置文件

我手动创建了 /etc/sysconfig/network-scripts/ifcfg-enp2s0,写入以下内容:

TYPE="Ethernet"
BOOTPROTO="static"
DEFROUTE="yes"
NAME="enp2s0"
UUID="e328a32a-9152-3f3a-b5d2-b7fe6ccafee5"   # ← 这里埋下了隐患
DEVICE="enp2s0"
ONBOOT="yes"
IPADDR="10.0.0.8"
NETMASK="255.255.0.0"
GATEWAY="10.0.0.1"
DNS1="8.8.8.8"
DNS2="114.114.114.114"

这里我犯了一个自以为正确的错误:nmcli connection show 里看到的 UUID 直接复制到了新配置文件中。我想当然地认为,同一个网卡就应该用同一个 UUID。

2. 系统自动生成了备份文件

重启网络服务后,发现目录里多了一个文件:

[root@pq network-scripts]# ls -la ifcfg-*
-rw-r--r-- 1 root root 353 813 09:10 ifcfg-enp2s0
-rw-r--r-- 1 root root 278 813 09:15 ifcfg-enp2s0-1

查看这个自动生成的文件:

[root@pq network-scripts]# cat ifcfg-enp2s0-1
HWADDR=60:45:CB:85:47:9D
TYPE=Ethernet
BOOTPROTO=dhcp
NAME=enp2s0
UUID=e328a32a-9152-3f3a-b5d2-b7fe6ccafee5   # ← UUID 和我的文件一样!
ONBOOT=yes
AUTOCONNECT_PRIORITY=-999                    # ← 被禁用了

关键发现:系统生成了一个备份文件,UUID 完全相同,但设置了 AUTOCONNECT_PRIORITY=-999(禁用自动连接)。

3. 重启网络服务 → 断网

[root@pq ~]# systemctl restart network
Job for network.service failed because the control process exited with error code.

查看日志:

[root@pq ~]# journalctl -xe | grep -i networkmanager
NetworkManager[772]: <warn> ifcfg-rh: cannot load /etc/sysconfig/network-scripts/ifcfg-enp2s0 due to conf
NetworkManager[772]: <warn> ifcfg-rh: cannot load /etc/sysconfig/network-scripts/ifcfg-enp2s0 due to conf

网卡 enp2s0 没有任何 IP 配置,服务器彻底断网了!


问题分析

UUID 在 NetworkManager 中的作用

在 NetworkManager 中,UUID 是连接的唯一标识符,相当于配置文件在系统中的"身份证号":

  • 每个连接(connection)都有一个唯一的 UUID
  • NetworkManager 通过 UUID 来识别和管理不同的网络连接
  • 同一个 UUID 在同一时刻只能对应一个有效的连接配置

冲突是如何发生的?

我的配置文件结构是这样的:

NetworkManager 内部数据库
    └── UUID: e328a32a-... → 连接: "有线连接 1" → 状态: 激活中

我手动创建的文件
    └── UUID: e328a32a-... → 连接: "enp2s0" → 尝试加载

结果:同一个 UUID 对应了两个不同的配置 → NetworkManager 拒绝加载 → 断网!

系统为什么生成了 ifcfg-enp2s0-1

当 NetworkManager 检测到配置冲突时,它会:

  1. 自动将冲突的旧配置备份为 ifcfg-xxx-1
  2. 在备份文件中添加 AUTOCONNECT_PRIORITY=-999 来禁用自动连接
  3. 但这个备份文件的存在并没有解决根本问题——两个文件仍然使用相同的 UUID

解决方案

方案一:删除 UUID 行(推荐,已验证)

最直接的解决方案:让系统自动生成 UUID

编辑 ifcfg-enp2s0,删除 UUID 那一行:

TYPE="Ethernet"
BOOTPROTO="static"
DEFROUTE="yes"
NAME="enp2s0"
# UUID="e328a32a-..."   ← 删除这一行或整行注释掉
DEVICE="enp2s0"
ONBOOT="yes"
IPADDR="10.0.0.8"
NETMASK="255.255.0.0"
GATEWAY="10.0.0.1"
DNS1="8.8.8.8"
DNS2="114.114.114.114"

实际配置:

[root@pq ~]# cat /etc/sysconfig/network-scripts/ifcfg-enp2s0
TYPE="Ethernet"
BOOTPROTO="static"
DEFROUTE="yes"
IPV4_FAILURE_FATAL="no"
NAME="enp2s0"
DEVICE="enp2s0"
ONBOOT="yes"
IPADDR="10.0.0.8"
NETMASK="255.255.0.0"
GATEWAY="10.0.0.1"
DNS1="8.8.8.8"
DNS2="114.114.114.114"

删除冲突的备份文件:

sudo rm -f /etc/sysconfig/network-scripts/ifcfg-enp2s0-1

重启网络服务:

sudo systemctl restart network

结果:NetworkManager 自动为这个配置文件生成了一个新的 UUID,不再与现有连接冲突,网络恢复正常!

[root@pq ~]# ip addr show enp2s0
2: enp2s0: <BROADCAST,MULTICAST,UP,LOWER_UP> ... 
    inet 10.0.0.8/16 brd 10.0.255.255 scope global enp2s0
       valid_lft forever preferred_lft forever

方案二:使用 nmcli 命令(更推荐)

完全绕过手动编辑文件,用 NetworkManager 官方工具:

# 1. 删除旧连接(可选,如果用不到的话)
sudo nmcli connection delete enp2s0

# 2. 重新创建连接
sudo nmcli connection add type ethernet ifname enp2s0 con-name enp2s0

# 3. 修改为静态 IP
sudo nmcli connection modify enp2s0 \
  ipv4.method manual \
  ipv4.addresses 10.0.0.8/16 \
  ipv4.gateway 10.0.0.1 \
  ipv4.dns "8.8.8.8 114.114.114.114"

# 4. 激活连接
sudo nmcli connection up enp2s0

这种方式 NetworkManager 会自动处理 UUID,永远不会冲突。

方案三:生成全新的 UUID(不推荐,但可行)

如果非要在配置文件中写 UUID,可以生成一个全新的:

# 生成新 UUID
uuidgen
# 输出:a1b2c3d4-e5f6-7890-abcd-ef1234567890

然后将这个全新的 UUID 写入配置文件。但需要确保:

  • 这个 UUID 在系统中不存在(nmcli connection show 里没有)
  • 以后也不会和其他配置冲突

注意:这种做法没有必要,让系统自动生成更省心。


配置方式对比

方式操作UUID 处理风险推荐度
手动编辑 + 复制旧 UUID手动写 ifcfg,复制已有 UUID手动指定❌ 高:UUID 冲突不推荐
手动编辑 + 不写 UUID手动写 ifcfg,不写 UUID 行系统自动生成✅ 低:系统自动处理推荐
手动编辑 + 全新 UUID手动写 ifcfg,用 uuidgen 生成手动生成新 UUID⚠️ 中:需确保唯一性一般
只用 nmcli 命令全程用 nmcli 操作NetworkManager 管理✅ 最低:官方推荐最推荐

最佳实践总结

✅ 正确做法

  1. 手动编辑 ifcfg 文件时,不要写 UUID 行

    TYPE="Ethernet"
    BOOTPROTO="static"
    NAME="enp2s0"
    DEVICE="enp2s0"
    ONBOOT="yes"
    IPADDR="10.0.0.8"
    NETMASK="255.255.0.0"
    GATEWAY="10.0.0.1"
    DNS1="8.8.8.8"
    # 不写 UUID,让系统自动生成
    
  2. 优先使用 nmcli 命令,避免手动编辑文件

    sudo nmcli connection modify enp2s0 ipv4.method manual ipv4.addresses 10.0.0.8/16
    
  3. 修改前备份原文件

    sudo cp /etc/sysconfig/network-scripts/ifcfg-enp2s0 /tmp/ifcfg-enp2s0.bak
    

❌ 错误做法

  1. 复制已有的 UUID 到新配置文件 ← 这就是我踩的坑
  2. 手动随意编造 UUID
  3. 同时保留多个相同 UUID 的配置文件

配置文件精简建议

如果你的系统只使用 IPv4,可以删除与 IPv6 和图形界面代理相关的参数,让配置文件更清晰:

TYPE="Ethernet"
BOOTPROTO="static"
DEFROUTE="yes"
NAME="enp2s0"
DEVICE="enp2s0"
ONBOOT="yes"
IPADDR="10.0.0.8"
NETMASK="255.255.0.0"
GATEWAY="10.0.0.1"
DNS1="8.8.8.8"
DNS2="114.114.114.114"

可以安全删除的参数包括:

  • PROXY_METHOD / BROWSER_ONLY(图形界面代理设置)
  • IPV6_* 系列(如果不需要 IPv6)
  • IPV4_FAILURE_FATAL(默认值 no,无需显式声明)

排查命令速查

查看网络状态

ip addr show                    # 查看所有网卡 IP
nmcli connection show           # 查看所有连接
nmcli connection show enp2s0   # 查看特定连接的详细信息

查看配置文件

ls -la /etc/sysconfig/network-scripts/ifcfg-*
cat /etc/sysconfig/network-scripts/ifcfg-enp2s0

查看日志

journalctl -u network -n 20
journalctl -u NetworkManager -n 20
systemctl status network.service

重启网络

sudo systemctl restart network
sudo nmcli connection down enp2s0 && sudo nmcli connection up enp2s0

总结

这次踩坑经历让我深刻理解了 NetworkManager 的 UUID 管理机制:

核心原则:UUID 是 NetworkManager 用来唯一标识连接的"身份证号"。手动配置时,不要"盗用"已有连接的 UUID,让系统自动生成才是最安全的方式。

一句话经验

手动编辑 ifcfg-* 文件时,永远不要手动写 UUID。如果写了,必须是一个全新的、系统中不存在的 UUID。最省心的做法是——直接不写,让 NetworkManager 帮你自动生成。


如果你也有类似的网络配置踩坑经历,欢迎交流分享! 🚀

转载自 CSDN-专业IT技术社区

原文链接:https://blog.csdn.net/qq_27361945/article/details/163715876

文章来源crawl

评论

赞0

评论列表

微信小程序
QQ小程序

关于作者

点赞数:0
关注数:0
粉丝:0
文章:0
关注标签:0
加入于:--