Gemini 对 NetworkManager 配置文件的解读

Caution

由 Gemini 2.5 Pro 生成。

👶 我发现 NetworkManager 活跃而 systemd-networkd 仅仅加载而不活跃。同时我有以下日志:

xx@xx-Rack-Server:~$ NetworkManager --print-config
# NetworkManager configuration: /etc/NetworkManager/NetworkManager.conf (lib: 10-dns-resolved.conf, 10-globally-managed-devices.conf, 20-connectivity-ubuntu.conf, no-mac-addr-change.conf) (etc: 10-ubuntu-fan.conf, default-wifi-powersave-on.conf)

[main]
# rc-manager=
# auth-polkit=true
# dhcp=internal
# iwd-config-path=
dns=systemd-resolved
plugins=ifupdown,keyfile
configure-and-quit=no

[connectivity]
uri=http://connectivity-check.ubuntu.com./

[ifupdown]
managed=false

[keyfile]
unmanaged-devices=*,except:type:wifi,except:type:gsm,except:type:cdma,interface-name:fan-*

[logging]
# backend=journal
# audit=true

[device]
# wifi.backend=wpa_supplicant
wifi.scan-rand-mac-address=no

[device]
# wifi.backend=wpa_supplicant
wifi.scan-rand-mac-address=no

[device-31-mac-addr-change]
match-device=driver:eagle_sdio,driver:wl
wifi.scan-rand-mac-address=no

[connection]
wifi.powersave=3

# no-auto-default file "/var/lib/NetworkManager/no-auto-default.state"

我怎么验证静态 ip 是正常的(至少每次重启之后是正常的),这个配置写到哪里去了?


🤖 好的,我们来梳理一下情况并找到静态 IP 配置的位置。

分析 NetworkManager --print-config 输出:

  1. plugins=ifupdown,keyfile: NetworkManager 可以通过两种主要方式获取配置:
    • ifupdown: 读取传统的 /etc/network/interfaces 文件。
    • keyfile: 读取 NetworkManager 自己的配置文件,通常位于 /etc/NetworkManager/system-connections/ 目录下。
  2. [ifupdown] managed=false: 这是非常关键的一行!它明确指示 NetworkManager 不要去管理在 /etc/network/interfaces 文件中定义的接口。这意味着,如果你的静态 IP 是写在这个文件里的,NetworkManager 应该忽略它。
  3. dns=systemd-resolved: NetworkManager 会将 DNS 配置交给 systemd-resolved 来处理。
  4. 结论: 结合你之前的日志(显示 NetworkManager 正在 尝试激活 Wired connection 4 并进行 DHCP)和这个配置(managed=false for ifupdown),最可能的情况是:
    • 你的服务器接口 enx8a350fe0be23 没有/etc/network/interfaces 文件中进行配置,或者该文件中的配置被注释掉了。
    • 因此,managed=false 对这个接口无效,NetworkManager 转而使用 keyfile 插件来管理它。
    • NetworkManager 找到了一个名为 "Wired connection 4" 的配置文件(位于 /etc/NetworkManager/system-connections/ 目录),并且这个文件被错误地配置成了 DHCP。这就是导致之前故障的原因。
    • 重启后,NetworkManager 可能加载了另一个配置文件(或者 "Wired connection 4" 文件被修复了),这个文件包含了正确的静态 IP 配置

静态 IP 配置在哪里?

基于以上分析,你的静态 IP 配置最有可能存储在 NetworkManager 的 keyfile 中,也就是 /etc/NetworkManager/system-connections/ 目录下的某个文件里。

如何验证和查找静态 IP 配置:

  1. 确认当前管理者: 虽然 systemd-networkd 服务可能已加载,但 NetworkManager 是活跃的。我们可以再次确认 NetworkManager 是否正在管理你的接口:

    nmcli device status
    # 或者更详细地查看特定接口
    nmcli device show enx8a350fe0be23
    

    查看 GENERAL.STATE 是否是 connected,以及 GENERAL.CONNECTION 显示的是哪个连接配置文件名。

  2. 列出 NetworkManager 的连接配置文件:

    nmcli connection show
    

    这会列出 NetworkManager biết 的所有连接配置文件。找到与你的有线接口 enx8a350fe0be23 关联的那个(看 DEVICE 列)。记下它的 NAME

  3. 查看活动配置文件的详细信息: 假设上一步找到的活动连接名称是 my-static-config(请替换为你实际的名称):

    nmcli connection show "my-static-config"
    

    仔细检查输出:

    • ipv4.method: 必须是 manual (代表静态配置),而不是 auto (代表 DHCP)。
    • ipv4.addresses: 应该显示你的静态 IP 地址和子网掩码(例如 192.168.1.100/24)。
    • ipv4.gateway: 应该显示你的网关地址。
    • ipv4.dns: 应该显示你配置的 DNS 服务器地址。
    • connection.autoconnect: 通常应该是 yes,这样重启后会自动激活。
  4. 直接查看配置文件: 连接配置文件通常存储在 /etc/NetworkManager/system-connections/ 目录下。文件名通常与连接名相同,但可能包含 UUID。

    sudo ls -l /etc/NetworkManager/system-connections/
    # 找到对应的文件,例如 my-static-config.nmconnection
    sudo cat /etc/NetworkManager/system-connections/my-static-config.nmconnection
    

    在这个文件里,你会看到类似以下的配置段:

[connection]
id=my-static-config
uuid=...
type=ethernet
interface-name=enx8a350fe0be23
autoconnect=true

[ethernet]
mac-address=...

[ipv4]
address1=192.168.236.B/24,192.168.236.1  # 示例: IP/前缀长度,网关
dns=8.8.8.8;1.1.1.1;                   # 示例: DNS服务器,用分号隔开
method=manual                          # 确认是 manual

[ipv6]
method=auto # 或者 ignore/disabled 如果你不用 IPv6

请将示例中的 IP、网关、DNS 替换为你实际的配置进行核对。

  1. 检查 /etc/network/interfaces (以防万一):
cat /etc/network/interfaces

检查是否有关于 enx8a350fe0be23 的未注释配置。如果有,并且 NetworkManager 正在管理这个接口,那么这里的配置实际上是被 NetworkManager 的 managed=false 设置所忽略的。

总结:

你的静态 IP 配置很可能写在 /etc/NetworkManager/system-connections/ 目录下的某个 .nmconnection 文件中。使用 nmcli connection show "你的连接名" 命令是检查当前生效配置的最直接方式。确认 ipv4.method 设置为 manual 以及 IP、网关、DNS 地址正确无误。

如果发现 "Wired connection 4" 这个文件仍然存在且配置为 DHCP,建议删除它 (sudo nmcli connection delete "Wired connection 4") 或修改它为正确的静态配置,以避免未来再次出现问题。确保你期望使用的静态配置文件是唯一针对该接口且设置为自动连接 (autoconnect=yes) 的。