每次开机,隧道都会在任何人决定使用它之前自动出现,而那个看起来很相关的复选框取消勾选后却毫无作用。这不是界面的缺陷。NetworkManager 并不会自行自动连接 VPN 配置文件;VPN 之所以启动,是因为某个基础连接点名引用了它。修正点在另一个配置文件上,而且只是一个属性。

你取消的那个开关根本不会被读取

VPN 配置文件有自己的自动连接属性,但对 VPN 连接而言,管理器并不会用它去启动任何东西。取消它只会让配置文件读起来一致,并不会改变行为,这正是修改之后奇怪现象依旧存在的原因。

文档记载的机制是基础配置文件上的从属连接列表。当 Wi-Fi 或 Ethernet 连接激活时,管理器也会一并激活其中列出的 VPN UUID。目前该列表只支持 VPN 连接,如果里面有多条记录,一次修改就会影响全部。

自动连接优先级只是给候选排序,它同样不是关闭开关。

动手之前先读这两个配置文件

先把名称、UUID 和类型记录下来,因为显示名称会重复,基础连接很容易和 VPN 混淆。然后再读各自真正重要的属性。

nmcli -f NAME,UUID,TYPE connection show
nmcli -f connection.secondaries connection show "Wired connection 1"
nmcli -f connection.autoconnect,connection.autoconnect-priority connection show "Work VPN"

在图形编辑器里,同样的数值显示在不同的标签下。基础连接的 General 选项卡里有自动连接设置,安装了插件时还有随它一起拉起 VPN 的选项。已翻译的桌面可能把优先级字段标成「带优先级的自动连接」,而那不是启用开关。把两者搞混,结果就是复选框被取消、开机行为却毫无变化。

删掉一条记录,而不是整个列表

该属性是一个列表,因此赋新值会替换其中全部内容。用前置的减号删掉单个 UUID,让列表其余部分保持原样。

nmcli connection modify uuid BASE_UUID -connection.secondaries VPN_UUID
nmcli -f connection.secondaries connection show "Wired connection 1"

前后都核对列表,尤其是在依赖第二个 VPN 的机器上。

配置文件可以限定给特定用户。如果是这样,你执行修改的账户必须出现在该列表中;否则命令可能被拒绝,或者管理器会另写一份原所有者永远看不到的按用户配置。在断定修改毫无效果之前先检查所有者,因为静默生成的按用户副本能解释许多莫名其妙的结果。

要测真实切换,而不是手动重启

重新连接基础配置文件才是有意义的测试。把它断开再连上,或者重启,然后查看活动连接列表、接口列表以及到内网地址的路由查询。

nmcli connection show --active
ip -brief address
ip route get 10.8.0.1

如果隧道仍然出现,剩下的所有者通常是一个脚本。管理器日志会显示哪个配置文件在何时被激活,而 dispatcher 目录正是放置钩子的地方,钩子会在接口事件时调用 nmcli connection up。钩子在配置文件编辑器里看不见,所以它能躲过每一次复选框实验。

让手动路径保持可用,因为那才是真正的需求。

合格的最终状态是什么样

配置文件连同它的网关、证书和凭据一起留在系统里。它不会在开机时激活,而你要求时会正常连上。这三句话就是验收标准。

把基础连接的 UUID 写进 runbook,因为下次要改的就是它。

可用但不自动的 VPN 是一种配置选择,而不是缺失的功能,而且只差一个属性。

相关文章