特定のZimaOSアプリケーションのトラフィックを商用VPN経由で送信したい場合、コミュニティスレッドでは、WireGuardのApp Storeエントリーをクライアント設定のアップロード用インターフェースとして単純に扱うのではなく、Gluetunを使う方法が示されています。元の著者は当初、WireGuardをクライアントとして実行する方法を尋ねていましたが、その後ZimaOSでGluetunを見つけ、Dockerネットワークを使った方法を記録しました。
重要な設計は、対象アプリがGluetunのネットワーク名前空間を共有することです。GluetunがVPNトンネル、ファイアウォール、公開ポートを管理し、qBittorrentなどのアプリケーションは通常のブリッジインターフェースではなく、そのネットワークスタックを使用します。
ZimaOS App StoreのWireGuardとTailscaleはVPNプロバイダーのクライアントとは異なる
Zima-Giorgioは、WireGuardとTailscaleがApp Storeで利用できると返信しました。すると著者は、足りなかった点を明確にしました。求めていたのは、プロバイダー設定をインポートしてアプリケーションのトラフィックをルーティングできるクライアントワークフローだったのです。
この違いは重要です。Tailscaleとセルフホスト型WireGuardエンドポイントは、プライベートなリモートアクセスネットワークに役立ちます。一方、Gluetunは、OpenVPNまたはWireGuardを使用して、対応する商用VPNプロバイダー経由でDockerワークロードを接続するために特化して設計されています。
元スレッドにおけるGluetunの発見
その後、著者は、一般的な「VPN」という語でApp Storeを検索しても分かりにくかったものの、ZimaOSにはGluetunが含まれていたと書いています。
元のアドバイスは、トンネル経由にするアプリケーションのネットワークを通常のブリッジモードからGluetunのネットワーク名前空間に変更し、アプリケーション独自の公開ポートを削除するというものでした。ポートはGluetunが公開する必要があるためです。
network_mode: container:gluetun
この構文は、外部コンテナーが名前で実行中のGluetunコンテナーに参加する場合に有効です。
service:gluetun と container:gluetun
現在のGluetunドキュメントでは、Composeにおける一般的な2つのケースを区別しています。
# 同じComposeプロジェクト
network_mode: "service:gluetun"
および:
# 別のComposeプロジェクト/外部コンテナー
network_mode: "container:gluetun"
コミュニティでの議論では、どちらの形式も概念的に登場しました。正しい形式は、Gluetunとルーティング対象のアプリケーションが同じComposeスタック内にあるかどうかによって異なります。
qBittorrentがISPのIPアドレスを漏えいさせる可能性がある理由
後のユーザーは、Gluetun自体のログにはNordVPNのIPが表示されたものの、テストするとqBittorrentはISPのアドレスを使用しているように見えたと報告しました。この症状では、「Gluetunが接続されている」ことと「qBittorrentが実際にGluetunのネットワークスタックを共有している」ことを別々にテストする必要があります。
qBittorrentコンテナの定義を確認し、ネットワークモードが本当にGluetunに接続されていることを確認してください。Gluetunと並行して通常のブリッジインターフェースを使用すると、qBittorrentが通常のホストルートを使う可能性があります。
qBittorrentのポートをGluetunコンテナに移動する
Gluetunの現在のドキュメントでは、別のコンテナがそのネットワークスタックを共有する場合、対象アプリケーションのポートはGluetunで公開すべきだと説明しています。
たとえば、qBittorrentが内部ポート8080でリッスンしている場合:
services:
gluetun:
image: qmcgaw/gluetun
cap_add:
- NET_ADMIN
devices:
- /dev/net/tun:/dev/net/tun
ports:
- "8080:8080"
qbittorrent:
image: your-qbittorrent-image
network_mode: "service:gluetun"
同じqBittorrentのポートを両方のコンテナで公開しないでください。そうすると、元のスレッドで説明されているポート競合が発生します。
コミュニティスレッドで参照された動画
後の参加者は、qBittorrentをGluetun経由でルーティングしようとした際、DB TechのCasaOS動画に従ったと明言しました。この動画は元のスレッドにおけるトラブルシューティングの過程に含まれているため、ここに残しています。
この動画はZimaOSのスレッドより前に公開されたもので、CasaOSを使用しています。そのため、すべてのUI手順を文字どおりコピーするのではなく、Docker/Gluetunのアーキテクチャを理解するために利用してください。
後のユーザーがカスタムComposeスタックの動作を確認
2025年11月、別のコミュニティメンバーは、信頼できる解決策はqBittorrentとGluetunをカスタムアプリ/Composeスタックとして一緒にデプロイし、そこでVPNプロバイダーを設定することだと述べました。選択したホストポートでqBittorrentにアクセスすると、VPN経由のトラフィックが表示されたと報告しています。
元のスレッドには、その構成用にユーザーが作成したGistへのリンクがあります。サードパーティ製のComposeファイルは例として扱い、デプロイ前に環境変数、イメージのバージョン、シークレット、ネットワーク設定を確認してください。
GluetunはVPNキルスイッチを提供する
現在のGluetunのドキュメントでは、ファイアウォールをキルスイッチとして説明しています。VPN経路が利用できない場合、通常のインターフェースから送信されるべきでないトラフィックをファイアウォールがブロックします。これが、qBittorrentの横でVPNコンテナを単に起動するよりも、Gluetunのネットワークスタックを共有する方が望ましい理由の一つです。
ポートに到達できるようにするためだけに、Gluetun のファイアウォールルールを無効にしないでください。意図した LAN/出力ルートを修正してください。
LAN アクセスを意図的に許可する
ルーティング対象アプリがローカルサブネットにアクセスする必要がある場合、Gluetun は次をサポートします FIREWALL_OUTBOUND_SUBNETS例:
FIREWALL_OUTBOUND_SUBNETS=192.168.1.0/24
実際の LAN サブネットを使用し、VPN トンネルの範囲と重複しないようにしてください。
VPN プロバイダーのポート転送と Docker のポートマッピングは異なります
Gluetun のドキュメントでは、次の2つを分けて説明しています。
- Docker のポート公開:LAN 上で qBittorrent WebUI にアクセスできるようにすること。
- VPN プロバイダーのポート転送:対応する VPN プロバイダーからインバウンドポートを取得すること。
有効にしないでください VPN_PORT_FORWARDING ローカルの qBittorrent WebUI へのアクセスを修正するためだけのものです。これらは異なる問題を解決します。
ZimaOS Gluetun チェックリスト
- 現在のプロバイダーのドキュメントに従って、実際に利用する VPN プロバイダー向けに Gluetun を設定します。
- Gluetun のログに期待どおりの VPN 出口 IP が表示されていることを確認します。
- 対象アプリを Gluetun のネットワーク名前空間に配置します。
- 次を使用します
service:gluetun同じ Compose スタックの場合、またはcontainer:gluetun外部コンテナの場合。 - ルーティング対象アプリケーションから重複する公開ポートを削除します。
- 必要な WebUI/リッスンポートを Gluetun で公開します。
- スタックを再起動します。
- 対象アプリケーションのパブリック IP を、Gluetun 自身のログとは独立してテストしてください。
- VPN の認証情報と WireGuard の秘密鍵を公開 Compose ファイルに記載しないでください。
ZimaOS Gluetun FAQ
ZimaOS では qBittorrent だけを VPN 経由でルーティングできますか?
はい。コミュニティスレッドでは、すべての ZimaOS サービスをトンネリングするのではなく、Gluetun の VPN ネットワークスタックを選択した Docker アプリケーションと共有するために、Gluetun を明示的に使用していました。
Gluetun には VPN IP が表示されたのに、qBittorrent には ISP の IP が表示されたのはなぜですか?
VPN コンテナが正常な状態でも、qBittorrent が通常のネットワークに接続されたままになっている可能性があるためです。qBittorrent の実際のネットワークモードを確認してください。
ポートを変更すると qBittorrent の WebUI が機能しなくなるのはなぜですか?
qBittorrent が Gluetun のネットワーク名前空間を共有する場合、WebUI ポートは qBittorrent ではなく Gluetun で公開します。
service:gluetun と container:gluetun のどちらを使用すべきですか?
次を使用します service:gluetun 両方のサービスが同じ Compose プロジェクトにある場合。次を使用します container:gluetun 外部コンテナが名前付きの Gluetun コンテナに参加する場合。
