
vopono v0.10.21
一時的なネットワーク名前空間を使用して、アプリケーションをVPNトンネル経由で実行する

vopono は、一時的なネットワーク名前空間を介して VPN トンネル経由でアプリケーションを実行するためのツールです。これにより、メインの接続を通常のまま維持しながら、少数のアプリケーションだけを異なる VPN 経由で同時に実行できます。
vopono には Wireguard と OpenVPN の両方に対応した内蔵キルスイッチが含まれています。
現在、Mullvad、AzireVPN、MozillaVPN、ProtonVPN、iVPN、NordVPN、AirVPN、PrivateInternetAccess が直接サポートされており、--custom 引数を使用したカスタム設定ファイルにも対応しています。Cloudflare Warp もサポートされています。
カスタム接続では、OpenConnect および OpenFortiVPN プロトコルもサポートされています(例: エンタープライズ VPN)。詳細は vopono ユーザーガイド を参照してください。
Screenshot
firefox、google-chrome-stable、lynx がすべて異なる VPN 接続を介して実行されている例を示すスクリーンショット:

サポートされているプロバイダー
| Provider | OpenVPN support | Wireguard support |
|---|---|---|
| Mullvad | ❌ | ✅ |
| AzireVPN | ❌ | ✅ |
| iVPN | ✅ | ✅ |
| PrivateInternetAccess | ✅ | ✅* |
| ProtonVPN | ✅** | ✅*** |
| MozillaVPN | ❌ | ✅ |
| NordVPN | ✅ | ❌ |
| AirVPN | ✅ | ✅ |
| Cloudflare Warp**** | ❌ | ❌ |
| セルフホスト (--custom) | ✅ | ✅ |
* ポートフォワーディングは、--port-forwarding オプションと、ポートが更新されたときにコマンドを実行する --port-forwarding-callback でサポートされています。
** vopono sync による OpenVPN 設定ファイル生成の認証手順については、ユーザーガイド を参照してください。Web ブラウザでログインした際に、同じリクエスト内の x-pm-uid ヘッダーの値である yyy を持つ、AUTH-xxx=yyy 形式の認証ヘッダーをコピーする必要があります。
*** ProtonVPN では、特定の Wireguard 設定ファイルを生成してダウンロードし、カスタムプロバイダー設定として使用できます。詳細はユーザーガイドを参照してください。ポートフォワーディングは、OpenVPN と Wireguard の両方で --port-forwarding 引数を使用してサポートされています。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 に設定してください。まず sudo warp-cli registration new で登録し、vopono の外部で 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 アカウントのポートを自動的に要求したり切り替えたりすることはありません。
Usage
VPN プロバイダーの設定ファイルをセットアップします:
$ vopono sync
新しい Wireguard キーペアを作成してアップロードする際、使用可能になるまで少し遅延がある場合があります(例: Mullvad では約 30〜60 秒)。
ノルウェーのサーバーへの AzireVPN Wireguard 接続を介して Firefox を実行:
$ vopono exec --provider azirevpn --server norway firefox
vopono は自分のユーザーとして実行してください(sudo は使用しない)。必要な場合に権限昇格を処理するためです。systemd サービスとしての実行などの詳細については、ユーザーガイド を参照してください。
デーモンモード
よりスムーズな体験のために、特権を持つ root デーモンを実行し、通常のユーザーとして vopono を使い続けてください。CLI は、デーモンが実行されている場合、exec リクエストを自動的にデーモンに転送します。
- 起動時に systemd 経由で一度開始:
sudo systemctl enable --now vopono - または root として手動で実行:
sudo vopono daemon - 明示的な同等のコマンドは
sudo vopono daemon startです。vopono daemon status --jsonで確認できます。 - その後、通常のユーザーとして vopono を通常どおり使用します:
vopono exec --provider mullvad --server se firefox
コピーしてすぐに使える systemd ユニットについては USERGUIDE.md を参照してください。
vopono は最大 255 個の個別のネットワーク名前空間(つまり、VPN プロバイダーが許可する場合の異なる VPN サーバー接続)を処理できます。同じサーバープレフィックスと VPN プロバイダーで起動されたコマンドは、同じネットワーク名前空間を共有します。
デフォルトの設定オプションは ~/.config/vopono/config.toml ファイルに保存できます。例:
firewall = "NfTables"
provider = "Mullvad"
protocol = "Wireguard"
server = "usa-us22"
値は大文字と小文字が区別されることに注意してください。
はるかに詳細な使用手順(デーモンとサーバーの処理を含む)については、vopono ユーザーガイド を参照してください。
インストール
AUR (Arch Linux)
お好みの AUR ヘルパーで vopono-git パッケージをインストールします。
$ paru -S vopono-git
$ vopono sync
ソースからコンパイルしたくない場合は、代わりに vopono-bin パッケージを使用することもできます。
Raspberry Pi (Raspbian)
リリースページから 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
Raspbian で OpenVPN を実行している vopono のスクリーンショット:

Wireguard は Raspbian リポジトリにないため、インストールは簡単ではありません。このガイドに従って試すことができますが、wg を使用できるように Wireguard と wireguard-tools をインストールするだけでなく、正しく動作するように linux-headers も必要です(つまり、接続を確立しようとしたときに Protocol not supported エラーが出るだけの状態を避けるためです)。
ポートフォワーディングや、vopono をデーモンやサーバーと一緒に使用する方法の詳細については、ユーザーガイド を確認してください。Raspberry Pi を privoxy や transmission-daemon などの実行に使用したい場合に役立ちます。
Debian + Ubuntu
リリースページで提供されている deb パッケージをインストールします。
Fedora + OpenSUSE
リリースページで提供されている rpm パッケージをインストールします(正しいバージョンを選択してください)。
Gentoo Linux
メインリポジトリから vopono をインストールします。
$ emerge -av net-vpn/vopono
その他の Linux
リリースページのコンパイル済みバイナリを使用するか、以下に記載されているように Cargo を使用してソースからインストールします。
このリポジトリから(Cargo を使用)
提供されているインストールスクリプト install.sh を実行します。これにより cargo install でリポジトリがインストールされ、設定ファイルが ~/.config/vopono/ にコピーされます。
サポートされている最小 Rust バージョンは 1.85 です(edition 2024 に必要)。次のコマンドでバージョンを確認できます:
$ rustc --version
既知の問題
- 既存の vopono 名前空間で新しいアプリケーションを起動する場合、ファイアウォールルールの変更(つまりポートのフォワーディングと解放)は適用されません(名前空間の作成時のみ使用されます)。ポートフォワーディングも同様です。
- OpenVPN の認証情報は常に設定内に平文で保存されます。認証情報を保存しないオプションを追加するかもしれませんが、OpenVPN は平文での提供が必要なようです。
- MozillaVPN デバイス(Wireguard キーペア)を削除する簡単な方法はありません。Mullvad とは異なり、これは Web ページでは_できません_。これを管理するには MozWire の使用をお勧めします。
gnome-terminalはクライアント・サーバーモデルのため、ネットワーク名前空間内では実行されません。issue #48 を参照してください。- ネットワーク名前空間内からホストへのポートフォワーディング(例:
transmission-daemonの実行)は、vopono が root として実行されている場合に正しく機能しません。issue #84 を参照してください。
ライセンス
vopono は GPL バージョン 3.0(またはそれ以上)の下でライセンスされています。LICENSE ファイルまたは https://www.gnu.org/licenses/gpl-3.0.en.html を参照してください。
語源
vopono は、エスペラント語で VPN の文字を発音したものです。
エスペラント語も話せる方は、Rust Programming Language Community の Discord チャンネルで私を探してください。
貢献
明示的に別段の記載がない限り、あなたが本作品に含めるために意図的に提出したあらゆる貢献は、追加の条件や制限なしに GPLv3(またはそれ以上)の下でライセンスされます。
MozillaVPN API の調査に対して、NilsIrl の MozWire に感謝します。