Keyfile 还是 Netplan:VPN 配置文件到底存在哪里?
已保存的 VPN 可能存在于 keyfile 中,也可能存在于生成的 Netplan 文件里。修改会被重写的内容之前,先把连接的 UUID 与真正拥有它的文件对上。
找到你导入的那个文件是最容易的一步,也常常是错误的起点。关键在于 NetworkManager 今天把哪个文件当作已保存的连接来读取,而这取决于连接标识符,以及已安装的软件包实际使用的配置后端。在回答这个问题之前就改动导入的文件,正是让一个能用的 VPN 变成两份半对配置的方式。
导入的文件并不是保存下来的配置
每个 VPN 问题周围都飘着三个名字:连接名、你导入的文件名,以及隧道建立后出现的虚拟接口。它们都不能指认真正的配置,而且连接名可以改,背后的文件却仍保留原来的标识符。
先做一份只读清单,按标识符而不是按名称挑出目标 VPN:
nmcli -f NAME,UUID,TYPE connection show
把端点主机名和身份标识从任何要贴进工单的清单里去掉。有用的是类型和标识符,其余是一个陌生人不需要的背景。分享前把剩下的部分遮掉,并说明你遮过,免得别人猜那些空白是什么意思。
keyfile 的位置并不是一回事
使用原生 keyfile 插件时,连接文件可能出现在三个目录里,它们的区别在于是否持久,而不在于方便。
| Location | Role |
|---|---|
/etc/NetworkManager/system-connections/ | Administrator-owned persistence |
/usr/lib/NetworkManager/system-connections/ | Package-supplied defaults, replaced on upgrade |
/run/NetworkManager/system-connections/ | Runtime state, regenerated and not durable |
修改运行时副本看起来会成功,直到下次启动,改动蒸发,文件像是被神秘地还原了。修改软件包提供的副本则能撑到某次升级把它替换掉,这是同一课更慢也更令人困惑的版本。
keyfile 文档补充了一个值得尊重的细节:这些文件可能保存私钥和口令,而且 NetworkManager 会忽略任何非 root 用户可读或可写的 keyfile。为了翻找某项设置而放宽目录权限,恰好会破坏你想检查的加载行为。
当 Netplan 掌握持久化
在 Ubuntu 上,Netplan 文档描述的 NetworkManager 集成从 23.10 起提供,它改变了持久副本的位置。对于非临时连接,它会写入 /etc/netplan/90-NM-<connection UUID>.yaml 并在其下生成一个临时的 NetworkManager 配置:/run/NetworkManager/system-connections/。
那是发行版的集成,不是适用于所有 NetworkManager 安装的规则。去找 YAML 文件之前,先确认已安装的软件包确实使用它。也要记住,运行时配置可能是别的东西生成的表示,而不是值得编辑的源头。两条命令的核对能省下一小时改错文件。
文档中的例子通过 Netplan 的 nm-devices 类型保存了一条 OpenVPN 连接,并带着 NetworkManager 的透传数据。Netplan 没有为某个 VPN 字段提供专门解释,并不意味着你保存的 VPN 丢了;它意味着该字段以不透明数据的形式传递。
临时接口不是配置
启用会创建本就不该持久存在的临时虚拟连接和接口。集成刻意不为每一个写新的 YAML 文件,所以它们不出现在 /etc/netplan 里,并不能说明父配置有没有被保存。
如果你在追一个出现又消失的文件,你看到的很可能是这类东西,而不是自己的配置。从内容下任何结论之前,先看它能不能挺过重启。重启就消失的运行时文件告诉你它从来不是源头,而这一个观察会改变整场排查的方向。它也解释了当时那次修改为什么看起来成功。
密钥与归属
配置可能引用存放在完全别处的证书或密钥,密码也可能属于 NetworkManager、由 用户会话的密钥代理 提供,或者干脆故意不保存。所以定位到单个文件,对无人值守启动需要什么几乎说明不了问题。
检查引用和密钥标志,但不要打印密钥值。桌面登录可以让启动时并不存在的代理变得可用,而复制一份生成的运行时文件并不能重现那个代理。现实中的症状是:有人登录时隧道能连上,机器独自启动时却失败。这种模式指向的是密钥归属,而不是路由。
通过拥有该连接的管理器做获批的改动,然后同时核对保存的标识符和实际生效的连接。只保留一个持久的所有者,因为分别去改导入、生成的 keyfile 和 YAML 源,会留下三种互相冲突的解释,谁也说不清下次重连会用哪一个。选真正持久的那个,只改它,并在工单里写明你把哪个文件当作权威。下一个人会感谢你留下的一行出处。