如何在 Linux NetworkManager 中添加 VPN
NetworkManager 如何保存 VPN 配置,如何在 GNOME、KDE 或 nmcli 中添加,以及哪些设置(路由、DNS、自动连接、密码)决定它的表现。
阅读约 9 分钟更新于 2026年10月15日作者:XPASS Editorial Team

NetworkManager 是 Linux 桌面里负责连接 Wi-Fi、管理网线,并且在你需要时运行 VPN 的那一部分。理解它如何看待 VPN,比死记菜单名称更有用,因为 GNOME、KDE、Cinnamon 等桌面的菜单各不相同,底层的模型却处处一致。本文讲的就是这个模型,以及你在添加配置时需要做的具体选择。
本文针对 Linux NetworkManager 中的 VPN 背后的问题:如何添加 VPN,才能让它在经常切换网络的笔记本上表现符合预期?我们不深入各发行版的软件包名称,也不重复 VPNclient 应用的安装步骤,这些在 Linux 设置指南里。这里讲的配置路线适用于你已有的配置文件,比如来自雇主、学校或自己搭建的服务器。
NetworkManager 实际保存了什么
NetworkManager 中的 VPN 是一个连接配置,一个小文本文件,包含通用设置、VPN 本身、IPv4 和 IPv6 几个部分。有四个组成部分值得了解。
- 插件。 NetworkManager 自己不懂 VPN 协议,而是把工作交给插件:OpenVPN 一个,基于 strongSwan 的 IPsec 一个,L2TP 一个,OpenConnect 一个,等等。WireGuard 是例外,因为它是内置支持。
- 配置。 记录服务器、认证方式、路由和 DNS。系统连接保存在
/etc/NetworkManager/system-connections。 - 密码等机密信息。 密码和密钥可以保存在配置里、钥匙环里,或者每次询问。
- 链路。 连接后会出现虚拟接口,例如
tun0或wg0,路由和 DNS 都附着在这个接口上。
这很重要,因为每种现象都对应其中一部分。菜单里没有某个类型,是插件问题。连接成功但什么都打不开,是链路上的路由或 DNS 问题。提示框反复弹出,是机密信息的问题。

开始之前要准备什么
先准备三样东西。
- 配置文件或相关数值。 OpenVPN 是
.ovpn文件,通常附带证书。WireGuard 是.conf文件。IPsec 或 L2TP 则需要服务器地址、认证方式(如预共享密钥或证书)和用户名。 - 对应的插件。 在包管理器里搜索以
NetworkManager-或network-manager-开头、后面跟类型名的软件包。 - 测试方法。 知道一个内网地址,或使用 IP 检测网站,以便判断流量是否真的走了隧道。
| VPN 类型 | 需要插件吗 | 常见文件 |
|---|---|---|
| WireGuard | 不需要,内置 | .conf |
| OpenVPN | 需要 | .ovpn |
| IPsec (IKEv2) | 需要,通常基于 strongSwan | 手动数值或证书 |
| L2TP over IPsec | 需要 | 手动数值 |
| OpenConnect | 需要 | 网关地址 |
如果想回顾这些类型的区别,VPN 协议是什么用通俗的语言做了说明。安装插件后,请注销再登录,或重启 NetworkManager,让设置程序识别到它。
在 GNOME 设置中添加配置
不同版本的步骤略有差异,下面的按钮名称仅供参考。
- 打开设置,选择网络。
- 在 VPN 旁点击加号。
- 选择 Import from file(从文件导入),选取你的
.ovpn或.conf文件。如果要手动填写,则选择类型。 - 检查名称、网关和认证方式。导入的文件通常已经填好大部分字段。
- 打开 IPv4 和 IPv6 标签页,按下文说明检查路由和 DNS。
- 点击添加,然后用开关进行连接。
KDE Plasma 在网络小程序以及“系统设置”的“连接”中提供同样的功能,加号按钮里有“导入 VPN 连接”选项。没有设置程序的桌面可以运行 nm-connection-editor,这是通用编辑器,会显示所有字段。
用 nmcli 添加配置
熟悉之后,命令行更快,而且可以通过 SSH 或在服务器上使用。
nmcli connection import type openvpn file ~/work.ovpn
nmcli connection import type wireguard file ~/home.conf
nmcli connection show
nmcli connection up work
nmcli connection down work
up 后面的名称是配置名,可以从 nmcli connection show 中看到。要修改某个字段,使用 nmcli connection modify 名称 加属性,例如 nmcli connection modify work connection.autoconnect no。要查看当前所有值,使用 nmcli connection show work。命令行指南更深入地介绍了绕过 NetworkManager 直接运行隧道的方法。
决定表现的几项设置
导入之后,有五项设置承担了大部分作用。在依赖这个配置之前,请先检查一遍。
| 设置 | 位置 | 作用 | 常见选择 |
|---|---|---|---|
| 仅用于其网络上的资源 | IPv4 / IPv6 的路由部分(属性 never-default) |
防止隧道成为默认路由 | 访问办公室或实验室时开启,需要全面保护时关闭 |
| 额外路由 | IPv4 / IPv6 的路由部分 | 把选定的子网送入隧道 | 只添加私有地址段,例如 RFC 1918 中的范围 |
| DNS 服务器和搜索域 | IPv4 / IPv6 的 DNS 部分 | 决定谁来应答域名查询 | 保留配置提供的值,为内部名称添加搜索域 |
| DNS 优先级 | ipv4.dns-priority |
数值越小越优先 | 如果必须让隧道的 DNS 先应答,使用负值 |
| 自动连接 | 通用 | 自动启动隧道 | 可选,见下一节 |
举一个具体例子。学生小雨在咖啡馆需要访问学校的实验室服务器,但不想让在线音乐也经过校园网络。她导入学校的配置,开启仅用于其网络上的资源,并检查配置是否为学校的私有地址段添加了路由。连接后,只有实验室地址走隧道,流媒体和网页浏览仍使用咖啡馆的连接。这正是 split tunneling 是什么中描述的行为。
再看远程办公的老周,他希望在公共 Wi-Fi 上保护所有流量。他关闭那个选项,让隧道成为默认路由,把 DNS 优先级设为负数,使域名查询走隧道,并阅读 split DNS 了解当公司域名在内外解析结果不同时该有什么预期。
自动连接、触发条件与共用电脑
NetworkManager 可以在你不操作的情况下连接 VPN,分为两个层面。
- 按 VPN。 在 VPN 配置的通用标签页里,“Automatically connect”只有在系统有理由去连接时才会生效,在许多版本中是任何网络启动时连接。
- 按 Wi-Fi。 NetworkManager 可以给某个 Wi-Fi 配置附加“secondary connection”。执行
nmcli connection modify "Home Wi-Fi" connection.secondaries work-vpn后,每次连上该 Wi-Fi 时 VPN 都会启动,断开时随之停止。这是表达“仅在这个网络上”的干净做法。
也要考虑还有谁在使用这台电脑。保存为“所有用户”的配置,对所有拥有账户的人都可用。对于共用的家庭电脑,你可能更希望使用按用户的配置,并且每次询问密码。自动连接加上保存的密码,意味着任何人打开笔记本盖子,就已经进入了工作网络。
如果想在连接时执行额外动作,NetworkManager 会运行 /etc/NetworkManager/dispatcher.d/ 中的脚本,并传入接口名和事件(up、down、vpn-up、vpn-down)。典型用途是挂载网络共享或调整防火墙规则。脚本要保持简短,设为可执行并归 root 所有,连接时用 journalctl -f 观察来测试。

机密信息:密码如何保存
在认证部分,密码栏旁边的小图标控制存放方式。
- 仅为此用户保存密码。 机密信息存入桌面钥匙环。
- 为所有用户保存密码。 机密信息写入系统配置文件,管理员可读。
- 每次都询问密码。 什么都不保存。
- 不需要。 适用于仅使用证书的配置。
对启用了磁盘加密的个人笔记本,第一个选项比较平衡。对共用电脑,请每次询问。不要把 VPN 密码写进脚本,也不要用邮件发送包含私钥的配置文件。
出问题时读日志
不要靠猜,直接读日志。
journalctl -u NetworkManager --since "5 minutes ago"
nmcli connection show --active
ip route
resolvectl status
按下表把现象与原因对应起来。
| 现象 | 可能原因 | 检查 |
|---|---|---|
| 添加列表里没有该类型 | 插件未安装或未加载 | 查看软件包列表,重启 NetworkManager |
| 输入密码后提示框又出现 | 凭据错误或机密信息未保存 | 仔细重输,检查存放选项 |
| 已连接但打不开网页 | 缺少默认路由或 DNS | ip route、resolvectl status |
| 内部名称失败,用 IP 却可以 | 缺少 DNS 或搜索域 | 添加搜索域,检查优先级 |
| 睡眠恢复后掉线 | 链路需要重新握手 | 重新连接,考虑自动连接设置 |
| 在家可用,在办公室不行 | 网络拦截了 VPN 端口 | 换用移动数据等其他网络来确认 |
更完整的清单见 VPN 无法连接。
常见错误
- 同一个文件导入两次,得到两个争用同一接口名的配置。
- 开启“仅用于其网络上的资源”,却奇怪为什么整个互联网没有受到保护。
- 对 DNS 服务器无法访问的配置使用负的 DNS 优先级,导致所有域名查询失败。
- 在共用电脑上为所有用户保存密码。
- 在经常连接会拦截 VPN 的酒店网络的笔记本上设置自动连接,然后以为网络坏了。
- NetworkManager 运行时手动编辑配置文件,却没有用
nmcli connection reload重新加载。
总结
NetworkManager 把 VPN 视为由插件、服务器定义、路由、DNS 和机密信息保存方式构成的配置。通过“设置”、nm-connection-editor 或 nmcli connection import 添加配置,再花几分钟检查决定表现的几项:隧道是否为默认路由、谁来应答 DNS、何时连接、密码存在哪里。出问题时读日志,把现象对应到负责的那一部分。
常见问题
NetworkManager 把 VPN 配置存放在哪里?
系统级配置是 /etc/NetworkManager/system-connections 下的文件,只有管理员可读。图形界面和 nmcli 修改的是同一批文件,所以用一种工具创建的配置会出现在另一种工具里。
为什么添加 VPN 的列表里没有我要的类型?
每种 VPN 类型都需要对应的 NetworkManager 插件软件包,安装后还需要重启设置程序或重新加载 NetworkManager。WireGuard 是内置的,不需要插件。
“仅将此连接用于其网络上的资源”是什么作用?
它阻止 VPN 成为默认路由,只有属于 VPN 网络的地址才走隧道,其余流量继续走正常连接。这是最简单的分流(split tunneling)形式。
VPN 应该自动连接吗?
只有当你希望在加入的每个网络上都受到保护时才这样做。对偶尔使用的工作配置,手动连接可以避免意外。NetworkManager 也可以把自动连接绑定到某个 Wi-Fi 配置上。
VPN 密码保存得安全吗?
NetworkManager 可以按你的选择把密码存放在用户的钥匙环或配置文件里,也可以每次询问。如果是共用电脑,建议选择每次询问。
参考资料
关于作者

Bob Kanokphon Thongdee
- XPASS VPN 创始人
- eSIMonline.asia 联合创始人
- 7 年以上网络营销经验
- Cojourney Visa 与 Cojourney Travel 创始人
继续阅读

VPN 安全
VPN 的 Split DNS(分流 DNS)是什么
Split DNS 让设备按域名选择不同的解析器:内部名称走 VPN,其他名称走平时的解析器。本文介绍原理、使用场景和检查方法。
阅读约 9 分钟



