
vopono 是一款通过临时网络命名空间在 VPN 隧道中运行应用程序的工具。 这使你可以只让少数几个应用程序同时通过不同的 VPN 运行,同时保持主连接 正常。
vopono 内置了针对 Wireguard 和 OpenVPN 的 killswitch(断网开关)。
目前直接支持 Mullvad、AzireVPN、MozillaVPN、ProtonVPN、iVPN、
NordVPN、AirVPN 和 PrivateInternetAccess,同时也可通过 --custom 参数支持自定义
配置文件。
还支持 Cloudflare Warp。
对于自定义连接,OpenConnect 和 OpenFortiVPN 协议也 受支持(例如用于企业 VPN)。更多详细信息请参阅 vopono 用户指南。
以下截图展示了一个示例:firefox、google-chrome-stable 和 lynx 都通过不同的 VPN 连接运行:

| 提供商 | OpenVPN 支持 | Wireguard 支持 |
|---|---|---|
| Mullvad | ❌ | ✅ |
| AzireVPN | ❌ | ✅ |
| iVPN | ✅ | ✅ |
| PrivateInternetAccess | ✅ | ✅* |
| ProtonVPN | ✅** | ✅*** |
| MozillaVPN | ❌ | ✅ |
| NordVPN | ✅ | ❌ |
| AirVPN | ✅ | ✅ |
| Cloudflare Warp**** | ❌ | ❌ |
| 自托管 (--custom) | ✅ | ✅ |
* 端口转发支持使用 --port-forwarding 选项和 --port-forwarding-callback,以便在端口刷新时运行命令。
** 有关通过 vopono sync 生成 OpenVPN 配置文件的身份验证说明,请参阅用户指南。你必须复制格式为 AUTH-xxx=yyy 的身份验证标头,其中 yyy 是你登录后在 Web 浏览器中同一请求的 x-pm-uid 标头的值。
*** 对于 ProtonVPN,你可以生成并下载特定的 Wireguard 配置
文件,并将其用作自定义提供商配置。请参阅用户指南
了解详细信息。端口转发 可通过 --port-forwarding 参数用于 OpenVPN 和 Wireguard。
请注意,对于使用自定义 Wireguard 配置,应使用 --custom-port-forwarding 指定要使用的端口转发实现
(即使用 --provider custom --custom xxx.conf --protocol wireguard --custom-port-forwarding protonvpn)。必须安装 natpmpc。
请注意,对于 OpenVPN,你必须在 OpenVPN 用户名后附加 +pmp 来生成 OpenVPN 配置文件,并且必须选择支持此功能的服务器
(例如,在撰写本文时,罗马尼亚服务器支持此功能)。分配的端口随后会打印到启动 vopono 的终端中 - 然后应将其设置在需要它的任何应用程序中。
该端口还可以传递给一个自定义脚本,该脚本将在网络命名空间内
通过 --port-forwarding-callback 参数
执行。
**** Cloudflare Warp 使用自己的协议。将提供商和
协议都设置为 warp。请注意,你必须先在 vopono 之外使用 sudo warp-cli registration new 注册,然后使用 sudo warp-svc 和 sudo warp-cli connect 以及 sudo warp-cli debug connectivity-check disable 运行一次 - 然后在不运行 sudo warp-cli disconnect 的情况下终止 sudo warp-svc,这样它运行时会自动连接。
请先验证它可以正常工作,然后再尝试与 vopono 一起使用。
AirVPN 端口转发作为提供商的一项能力受支持,但转发的 端口目前必须在 AirVPN 的客户端区域中配置;vopono 不会 自动认领或切换 AirVPN 账户端口。
设置 VPN 提供商配置文件:
$ vopono sync
请注意,在创建和上传新的 Wireguard 密钥对后,可能需要稍作延迟 才能使用(例如在 Mullvad 上大约需要 30-60 秒)。
通过 AzireVPN Wireguard 连接运行 Firefox 到位于 挪威的服务器:
$ vopono exec --provider azirevpn --server norway firefox
你应该以你自己的用户身份运行 vopono(不要使用 sudo),因为它会 在必要时处理权限提升。有关以 systemd 服务等方式运行的更多详细信息, 请参阅用户指南。
为了获得更流畅的体验,请运行具有特权的 root 守护进程,并继续以你的普通用户身份使用 vopono。如果守护进程正在运行,CLI 会自动将 exec 请求转发给它。
sudo systemctl enable --now voponosudo vopono daemonsudo vopono daemon start;使用
vopono daemon status --json 进行检查。vopono exec --provider mullvad --server se firefox请参阅 USERGUIDE.md 获取可直接复制的 systemd 单元配置。
vopono 最多可以处理 255 个独立的网络命名空间(即不同的 VPN 服务器 连接 - 如果你的 VPN 提供商允许的话)。使用相同服务器前缀和 VPN 提供商的命令将共享同一个网络 命名空间。
默认配置选项可以保存在 ~/.config/vopono/config.toml
文件中,例如:
firewall = "NfTables"
provider = "Mullvad"
protocol = "Wireguard"
server = "usa-us22"
请注意,这些值区分大小写。
请参阅 vopono 用户指南 获取更详细的使用说明 (包括处理守护进程和服务器)。
使用你喜欢的 AUR 助手安装 vopono-git 包。
$ paru -S vopono-git
$ vopono sync
或者使用 vopono-bin 包,如果你不想
从源码编译。
从发布页面下载并安装 vopono_x.y.z_armhf.deb
包:
$ sudo dpkg -i vopono_0.2.1_armhf.deb
你需要安装 OpenVPN(Raspbian 软件源中可用):
$ sudo apt install openvpn
然后你可以像上面那样使用 vopono(请注意 Chromium 二进制文件是
chromium-browser):
$ vopono sync --protocol openvpn protonvpn
$ vopono exec --provider protonvpn --server sweden chromium-browser
vopono 在 Raspbian 上运行 OpenVPN 的截图:

请注意,Wireguard 不在 Raspbian 软件源中,因此安装它
并不简单。你可以按照此指南尝试安装,但请注意,
你不仅需要安装 Wireguard 和 wireguard-tools 以获得 wg
,还需要 linux-headers 以确保其正常工作
(即尝试建立连接时不会只收到 Protocol not supported 错误
)。
请参阅用户指南了解端口转发以及 将 vopono 与守护进程和服务器结合使用的详细信息,以防你想使用 Raspberry Pi 运行 privoxy 或 transmission-daemon 等。
安装发布页面上提供的 deb 包。
安装发布页面上提供的 rpm 包(选择正确的 版本)。
从主软件源安装 vopono。
$ emerge -av net-vpn/vopono
你可以使用发布页面上的预编译二进制文件,或者按照下面的文档 使用 Cargo 从源码安装。
运行提供的安装脚本:install.sh - 这将 cargo install 本仓库,并将配置文件复制到
~/.config/vopono/
请注意,最低支持的 Rust 版本是 1.85(edition 2024 所需)。 你可以通过以下命令检查你的版本:
$ rustc --version
gnome-terminal 不会在网络命名空间中运行,因为
客户端-服务器模型 - 参见 issue #48transmission-daemon)在 vopono
以 root 身份运行时无法正常工作 - 参见 issue #84vopono 根据 GPL 3.0 版(或更高版本)许可,请参阅 LICENSE 文件或 https://www.gnu.org/licenses/gpl-3.0.en.html
vopono 是字母 VPN 在世界语中的发音。
如果你也会说世界语,请在 Rust 编程语言社区的 Discord 频道中找我。
除非你明确另行声明,否则你有意提交 以包含在本作品中的任何贡献,都将根据 GPLv3(或 更高版本)许可,不附加任何额外条款或条件。
非常感谢 NilsIrl 的 MozWire 对 MozillaVPN API 的研究。