コミュニティソリューション

GluetunでZimaOSアプリの通信をVPN経由にする

A ZimaOS user looking for WireGuard client mode discovered Gluetun as the practical Docker VPN-client path. Later replies worked through qBittorrent routing, shared network namespaces, and port conflicts.

特定の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スタック内にあるかどうかによって異なります。

現在のGluetunコンテナーネットワーク設定ガイド

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のポートを両方のコンテナで公開しないでください。そうすると、元のスレッドで説明されているポート競合が発生します。

Gluetunのポートマッピングガイド

コミュニティスレッドで参照された動画

後の参加者は、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 チェックリスト

  1. 現在のプロバイダーのドキュメントに従って、実際に利用する VPN プロバイダー向けに Gluetun を設定します。
  2. Gluetun のログに期待どおりの VPN 出口 IP が表示されていることを確認します。
  3. 対象アプリを Gluetun のネットワーク名前空間に配置します。
  4. 次を使用します service:gluetun 同じ Compose スタックの場合、または container:gluetun 外部コンテナの場合。
  5. ルーティング対象アプリケーションから重複する公開ポートを削除します。
  6. 必要な WebUI/リッスンポートを Gluetun で公開します。
  7. スタックを再起動します。
  8. 対象アプリケーションのパブリック IP を、Gluetun 自身のログとは独立してテストしてください。
  9. 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 コンテナに参加する場合。