在 Ubuntu 上配置 OpenVPN:从 .ovpn 文件到开机自启
在 Ubuntu 的终端或 NetworkManager 中使用 .ovpn 配置:首次运行、保存凭据、systemd 服务、DNS 处理,以及常见日志错误对照表。
阅读约 10 分钟更新于 2026年10月15日作者:XPASS Editorial Team

OpenVPN 已经存在很多年了,这份资历反而是优点:几乎所有 VPN 服务商和自建方案都能给你一份 OpenVPN 配置,而 Ubuntu 只要装一个软件包就能使用它。这种灵活性的代价,是配置文件里选项繁多,日志里满是陌生的词句,还有几处 Ubuntu 特有的 DNS 细节,让新手容易栽跟头。
本文只处理一件事:拿到一份现成的 .ovpn 配置,如何让它在 Ubuntu 上正确工作。内容包括首次试运行、安全处理凭据、把 OpenVPN 作为服务运行、DNS、桌面版的选项,以及一张把常见日志语句翻译成具体动作的表格。我们不讲 OpenVPN 的内部工作原理,那在文章 OpenVPN 详解 中有介绍,也不与新协议比较,请看 WireGuard 与 OpenVPN 对比。如果你是 XPASS 用户,受支持的方式是免费的 VPNclient 应用,登录信息在 My Pass 页面,详见 Linux 帮助指南;本文的步骤面向手里有自己 OpenVPN 配置的人。
命令行还是桌面:先选路线
Ubuntu 上运行 OpenVPN 主要有两种方式。选好一种就坚持下去,因为混用常常是困惑的来源。
| 路线 | 最适合 | 优点 | 弱点 |
|---|---|---|---|
终端里的 openvpn 命令 |
测试、服务器、排障 | 能看到完整日志,无需额外软件包 | DNS 和启动都要自己管 |
systemd 服务(openvpn-client@名称) |
无界面机器、常开隧道 | 开机启动,失败后重启 | 某些笔记本上会早于 Wi-Fi 启动 |
| NetworkManager 插件 | Ubuntu 桌面版和笔记本 | 托盘图标,适应漫游,凭据存入密钥环 | 日志不够详细,需要额外软件包 |
对大多数人来说,合理的流程是:先用普通命令测试,因为日志能告诉你哪里出了错;能用之后,再根据机器是服务器还是笔记本,转到 systemd 服务或 NetworkManager。

安装 OpenVPN 并读懂你的配置
从标准软件源安装客户端。
sudo apt update
sudo apt install openvpn
openvpn --version
接着,运行之前先看一眼你的 .ovpn 文件。它是纯文本,用编辑器打开即可。通常会看到类似下面的行。
- client:让 OpenVPN 以客户端而不是服务器身份运行。
- dev tun:请求一个路由模式的隧道接口。
- proto udp 或 proto tcp:选择传输方式,文章 OpenVPN 的 UDP 与 TCP 说明了取舍。
- remote 主机 端口:指明服务器和端口。
- auth-user-pass:表示会询问用户名和密码。
- remote-cert-tls server:让客户端检查服务器证书确实是用于服务器的。
- ca、cert、key 或 tls-auth 块:存放证书和密钥,可能是单独的文件,也可能内嵌在标签之间。
- verb 3:设置日志详细程度。
不要修改你不理解的内容。改错一行加密算法或证书,握手就会失败。如果想试验,请先备份:cp profile.ovpn profile-test.ovpn。
第一次运行:放在前台
直接运行配置,以便看到它输出的一切。
sudo openvpn --config ~/Downloads/profile.ovpn
如果配置使用了 auth-user-pass,OpenVPN 会先问用户名,再问密码。请小心输入,密码不会回显。观察输出中的这几个节点。
- 解析或连接服务器:如果无法解析主机名,问题出在基础网络或 DNS。
- TLS 握手:与证书校验相关的行应当不带错误地结束。
- 含有 Initialization Sequence Completed 的一行:这是 OpenVPN 表示隧道已建立的方式。
- 新增名为
tun0的接口:用ip addr show tun0检查。
运行期间,另开一个终端测试流量。先对某个知名地址执行 ping -c 3,再打开网站。完整的测试流程见 如何检查 VPN 是否正常工作。在第一个终端按 Ctrl+C 即可停止隧道。
安全地保管凭据
每次手输密码很安全但很麻烦,也无法在无人值守时自动启动。常见的替代办法是一个小型凭据文件。
sudo nano /etc/openvpn/client/credentials.txt
第一行写用户名,第二行写密码,然后锁定文件权限。
sudo chown root:root /etc/openvpn/client/credentials.txt
sudo chmod 600 /etc/openvpn/client/credentials.txt
再把配置中的相应行改成 auth-user-pass /etc/openvpn/client/credentials.txt。
要坦率说明其中的取舍:这个文件能防止随手读取,但防不住拥有 root 权限的人或被盗的磁盘。如果机器是多人共用的,或磁盘没有加密,宁可手动输入密码,或者使用由系统密钥环保存密码的桌面路线。不要把密码写进配置文件本身,也不要把任何一个文件提交到代码仓库。一旦怀疑泄露,请立即在账号页面修改 VPN 密码。
把 OpenVPN 作为服务运行
想要自动启动的隧道,Ubuntu 自带 systemd 模板单元。它要求配置放在特定文件夹中,并使用 .conf 扩展名。
sudo cp ~/Downloads/profile.ovpn /etc/openvpn/client/work.conf
sudo systemctl start openvpn-client@work
sudo systemctl status openvpn-client@work
@ 后面的词是去掉 .conf 的文件名。若要开机自启,再加上:
sudo systemctl enable openvpn-client@work
查看运行中服务的日志:
sudo journalctl -u openvpn-client@work -f
有两点提醒。在网络就绪之前启动的服务,在笔记本上可能失败,所以请分别在有 Wi-Fi 和没有 Wi-Fi 时测试重启。另外,如果配置用相对路径引用证书文件,请把这些文件复制到同一文件夹,或改成绝对路径,因为服务并不是从你的主目录运行的。
DNS:让人意外的 Ubuntu 细节
许多服务商会向客户端下发 DNS 服务器。OpenVPN 客户端只是收到这些信息,并不会自己应用。在多数版本使用 systemd-resolved 的 Ubuntu 上,你需要一个辅助脚本。
sudo apt install openvpn-systemd-resolved
然后在配置里加入这几行:
script-security 2
up /etc/openvpn/update-systemd-resolved
down /etc/openvpn/update-systemd-resolved
down-pre
dhcp-option DOMAIN-ROUTE .
script-security 2 一行允许 OpenVPN 运行外部脚本。只对你信任的配置启用它,因为它能让配置在你的机器上执行程序。连接之后用下面的命令检查:
resolvectl status
你应当看到隧道接口及配置中的 DNS 服务器。如果原来 Wi-Fi 的 DNS 对所有名称依然排在首位,查询可能会离开隧道。文章 DNS 泄漏 介绍了测试方法。想了解 DNS 的基本作用,Cloudflare 有一篇 通俗的 DNS 说明。

桌面版的 NetworkManager 路线
对于笔记本,桌面插件更友好。
sudo apt install network-manager-openvpn-gnome
sudo nmcli connection import type openvpn file ~/Downloads/profile.ovpn
nmcli connection up profile
导入后,隧道会出现在网络菜单中,NetworkManager 会询问用户名和密码,并可保存到密钥环。它还会替你处理 DNS,省去了整个脚本步骤。如果配置里含有插件不认识的选项,导入可能失败或丢弃这些选项,这时请回到命令行。
读日志:常见错误与对策
| 日志语句 | 可能的含义 | 可以尝试 |
|---|---|---|
AUTH_FAILED |
用户名或密码错误,或账号已过期 | 小心重新输入,检查账号,使用 VPN 凭据 |
TLS handshake failed 或 TLS key negotiation failed |
数据包没到服务器,或没有回应 | 检查网络,换个网络,如配置提供另一种协议可试试 |
Cannot resolve host address |
隧道建立前没有 DNS | 测试普通上网,检查配置里的主机名 |
VERIFY ERROR 或 certificate verify failed |
证书不匹配,或时钟错误 | 检查 timedatectl,重新下载配置 |
Cannot open TUN/TAP dev |
权限不足 | 使用 sudo |
Options error |
文件中某行格式有误 | 看消息里提示的行号 |
| 已连接但网页打不开 | DNS 或路由 | 见 DNS 一节,用数字地址测试 |
| 不断重启 | 网络掉线或 keepalive 超时 | 换更稳定的网络,查看日志时间戳 |
也要留意日志里的时间。如果系统时钟偏差很大,依赖时间的证书和握手就会失败。如果连通之后速度不理想,指南 OpenVPN 性能调优 说明了哪些值得调整,哪些不必动。
良好习惯、限制与安全默认值
- 信任配置的来源。 配置可以运行脚本并设置路由。只使用来自你信任的服务商或管理员的文件,不要从随便的论坛下载。
- 保持默认的加密算法和协议设置,除非客服要求你改。
- 不要同时运行两个 VPN。 两条隧道会争抢路由和 DNS。
- 清楚自己防的是什么。 OpenVPN 加密的是通往 VPN 服务器的路径,拦不住钓鱼、恶意软件或账号被盗,参见 VPN 无法保护你的哪些方面。
- 大更新后重启。 内核和库的更新有时需要重启,隧道才会正常。
- 清理旧配置。 不再使用某家服务商时,把
/etc/openvpn/client/里的旧配置和凭据文件一并删除。
总结
在 Ubuntu 上使用 OpenVPN:安装软件包,检查 .ovpn 配置,先在前台运行一次以便读日志。凭据只保存在 root 所有、权限严格的文件里,或者手动输入。后台服务用 openvpn-client@名称,笔记本用 NetworkManager 插件,需要处理 DNS 时加入 systemd-resolved 辅助脚本。出现故障时,日志语句会告诉你该检查哪一层。
如果你更想用现成的应用而不是修改配置,价格页面 列出了可搭配免费 VPNclient 应用使用的预付通行证。
常见问题
.ovpn 文件是什么,从哪里获得?
它是一个纯文本配置文件,告诉 OpenVPN 客户端要连接哪台服务器、使用什么协议和端口、信任哪些证书。由 VPN 服务商或你自己服务器的管理员提供。因为其中可能含有密钥,应当视为敏感文件。
为什么 OpenVPN 提示 AUTH_FAILED?
服务器拒绝了用户名或密码。请检查是否输错或多了空格,确认账号有效且未过期,并且使用的是 VPN 凭据而不是网站登录密码。
在 Ubuntu 上怎样让 OpenVPN 在后台运行?
把配置文件复制到 /etc/openvpn/client/,扩展名改为 .conf,然后运行 sudo systemctl start openvpn-client@名称,其中名称是去掉扩展名的文件名。用 enable 让它开机启动。
OpenVPN 显示 Initialization Sequence Completed,为什么网页还是打不开?
隧道已建立,但 DNS 或路由有问题。用 resolvectl status 查看系统在用哪些 DNS 服务器;如果配置会下发 DNS 服务器,就添加 DNS 更新脚本;再用数字地址测试,区分是路由问题还是域名解析问题。
把密码放在文本文件里安全吗?
这是一种取舍。密码文件免去了输入,所以连接可以自动启动,但任何能读这个文件的人都能看到密码。请把它放在 root 所有、权限为 600 的文件里,或者每次手动输入。
关于作者

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

VPN 安全
OpenVPN 的 TCP 与 UDP 有什么区别?
OpenVPN 可以通过 UDP 或 TCP 传输隧道数据。本文说明两者的区别、默认用 UDP 的原因、什么时候该用 TCP,以及怎样自己动手测试。
阅读约 9 分钟

VPN 安全
WireGuard 与 OpenVPN 有什么区别
WireGuard 和 OpenVPN 都能建立加密隧道,但设计、复杂度和灵活性不同。本文用通俗的方式比较,并说明该怎样选择。
阅读约 9 分钟


