
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-svc,不要运行 sudo warp-cli disconnect,这样它会在运行时自动连接。请在使用 vopono 之前验证此功能正常工作。
设置 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 daemonvopono 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)无法正常工作——参见 issue #84vopono 使用 GPL 版本 3.0(或更高版本)许可,请参阅 LICENSE 文件或 https://www.gnu.org/licenses/gpl-3.0.en.html
vopono 是 VPN 在 Esperanto(世界语)中的发音。
Se vi ankaŭ parolas Esperanton, bonvolu serĉi min en la kanalo de Discord de Rust Programming Language Community.
除非你明确声明,否则你为包含在作品中有意提交的任何贡献,将根据 GPLv3(或更高版本)许可,不附加任何额外条款或条件。
非常感谢 NilsIrl 的 MozWire 对 MozillaVPN API 的研究。