
TrustTunnel v1.1.0
TCP、UDP、ICMPトラフィックをHTTPS経由でトンネリングし、DPIやスロットリングを回避するオープンソースVPNプロトコル。スプリットトンネリング、SOCKS5プロキシ、カスタムDNS、クロスプラットフォームクライアントを搭載。
クライアント · App Store (iOS) · App Store (macOS) · Play store
目次
はじめに
TrustTunnel は、AdGuard VPN によって開発されたモダンなオープンソース VPN プロトコルであり、現在は誰でも利用・監査できるようになっています。
一般的なトレードオフなしに、高速で安全かつ信頼性の高い VPN 接続を提供します。 設計上、TrustTunnel のトラフィックは通常の HTTPS トラフィックと区別がつかず、強力なプライバシー保護を維持しながら、スロットリングやディープパケットインスペクションを回避できます。
TrustTunnel プロジェクトには、VPN エンドポイント(このリポジトリ)、クライアント用ライブラリと CLI、および GUI アプリケーション が含まれます。
サーバー機能
-
VPN プロトコル: このライブラリは、HTTP/1.1、HTTP/2、および QUIC と互換性のある VPN プロトコルを実装しています。通常のネットワークトラフィックを模倣することで、検出およびブロックが不可能になります。
-
柔軟なトラフィックトンネリング: TrustTunnel は、クライアントとの間で TCP、UDP、および ICMP トラフィックをトンネリングできます。
-
プラットフォーム互換性: サーバーは Linux および macOS と互換性があります。クライアントは Android、Apple、Windows、および Linux で利用可能です。
-
サブスクリプションエンドポイント: オプションで、ユーザーごとのサブスクリプション URL を HTTPS 経由で提供できます。
vpn.tomlで[subscription]が有効になっている場合、各クライアントは HTTP Basic Auth を使用して HTTPS 経由で自身の JSON 設定(接続パラメータ、認証情報、DNS アップストリームなど)を取得でき、手動でのファイル再配布なしにセルフサービスおよび自動更新されるクライアント設定が可能になります。
クライアント機能
-
トラフィックトンネリング: このライブラリは、クライアントからエンドポイントへ、そしてその逆方向へ TCP、UDP、および ICMP トラフィックをトンネリングできます。
-
クロスプラットフォームサポート: Linux、macOS、および Windows プラットフォームをサポートし、異なるオペレーティングシステム間で一貫したエクスペリエンスを提供します。
-
システム全体のトンネルと SOCKS5 プロキシ: 仮想ネットワークインターフェースを利用したシステム全体のトンネルとして、また SOCKS5 プロキシとして設定できます。
-
スプリットトンネリング: このライブラリはスプリットトンネリングをサポートしており、特定のドメインまたはホストへの接続を VPN エンドポイント経由のルーティングから除外したり、逆に除外リストに基づいて特定のドメインまたはホストへの接続のみをエンドポイント経由でルーティングしたりできます。
-
カスタム DNS アップストリーム: ユーザーはカスタム DNS アップストリームを指定でき、VPN エンドポイント経由でルーティングされる DNS クエリに使用されます。
クイックスタート
エンドポイントのセットアップ
エンドポイントのインストール
以下のコマンドで実行できるインストールスクリプトが用意されています:```bash curl -fsSL https://raw.githubusercontent.com/TrustTunnel/TrustTunnel/refs/heads/master/scripts/install.sh | sh -s -
インストールスクリプトは、適切なシステムアーキテクチャ向けの最新の
GitHub リリースからビルド済みパッケージをダウンロードし、
`/opt/trusttunnel` に展開します。出力ディレクトリは、上記のコマンドの末尾に
`-o DIR` フラグを指定することで上書きできます。
特定のバージョン(最新版ではなく)をインストールしたい場合は、`-V <version>` を使用します:```bash
curl -fsSL https://raw.githubusercontent.com/TrustTunnel/TrustTunnel/refs/heads/master/scripts/install.sh | sh -s - -V <version>
[!NOTE] ビルド済みパッケージは
linux-x86_64、linux-aarch64、およびmacos-universal(Intel および Apple Silicon)アーキテクチャ向けに利用可能です。
エンドポイントの更新
インストールスクリプトは常に最新の利用可能なバージョンをインストールします。 そのため、インストールを更新するには、インストールコマンドを再度実行してください:```bash curl -fsSL https://raw.githubusercontent.com/TrustTunnel/TrustTunnel/refs/heads/master/scripts/install.sh | sh -s -
これによりインストーラーが再実行され、インストールディレクトリ(デフォルトでは `/opt/trusttunnel`、または `-o DIR` で指定したディレクトリ)内のバイナリが置き換えられます。
> [!NOTE]
> 更新前にエンドポイントを停止することを忘れないでください:
>
> ```bash
> sudo systemctl stop trusttunnel
> ```
>
> 更新後にエンドポイントを再度起動するには:
>
> ```bash
> sudo systemctl start trusttunnel
> ```
#### エンドポイント設定ウィザード
エンドポイントの設定方法の詳細については、[CONFIGURATION.md](https://github.com/trusttunnel/trusttunnel/blob/master/CONFIGURATION.md) を参照してください。
インストールディレクトリには、エンドポイントの実行に必要な設定ファイルの生成を支援する `setup_wizard` バイナリが含まれています:```bash
cd /opt/trusttunnel/
./setup_wizard -h
セットアップウィザードは対話モードをサポートしているため、実行するとエンドポイント設定に必要なデータを尋ねられます。```bash cd /opt/trusttunnel/ sudo ./setup_wizard
> [!NOTE]
> TLS 証明書を適切に管理するには `sudo` が必要です。
ウィザードは以下のフィールドを尋ねます。一部には安全に使用できるデフォルト値があります:
- **リッスンするアドレス** - エンドポイントがリッスンするアドレスを指定します。ネイティブデプロイメント(すべてのインターフェースで HTTPS)では `0.0.0.0:443` を使用します。Docker のポートマッピング `443:8443` で実行する場合は、`0.0.0.0:8443` に設定します。
- **認証情報ファイルへのパス** - 認可のためのユーザー認証情報が保存されるパス。
- **ユーザー名** - ユーザーが認可に使用するユーザー名。
- **パスワード** - ユーザーのパスワード。
- **ユーザーをもう一人追加しますか?** - さらにユーザーを追加する場合は `yes` を、設定プロセスを続行する場合は `no` を選択します。
- **ルールファイルへのパス** - フィルタリングルールを保存するパス。
- **接続フィルタリングルール** - エンドポイントがユーザーの接続を許可または拒否するために使用するルールを、以下に基づいて追加できます:
- クライアント IP アドレス
- TLS ランダムプレフィックス
- マスク付き TLS ランダム
すべての接続を許可するには `n` を押します。
- **ライブラリ設定を保存するファイルへのパス** - メインのエンドポイント設定ファイルを保存するパス。
- **証明書の選択** - TLS 証明書の取得方法を選択します:
- **Let's Encrypt 証明書を発行する**(パブリックドメインが必要) - セットアップウィザードには ACME サポートが組み込まれており、Let's Encrypt から無料の公的に信頼された証明書を自動的に取得できます。必要なもの:
- サーバーの IP アドレスを指す登録済みドメイン
- インターネットからアクセス可能なポート 80(HTTP-01 チャレンジ用)、または
- DNS TXT レコードを追加する機能(DNS-01 チャレンジ用)
- **自己署名証明書を生成する** - CLI クライアントと Flutter クライアントの両方でサポートされています。生成された証明書は、エクスポートされたクライアント設定に自動的に埋め込まれます。
- **既存の証明書へのパスを指定する** - 別の CA や [certbot][certbot] などのツールで取得した独自の証明書ファイルを使用します。
- **TLS ホスト設定を保存するファイルへのパス** - TLS ホスト設定ファイルを保存するパス。
この時点で、必要なすべての設定ファイルが作成され、ディスクに保存されます。
[certbot]: https://eff-certbot.readthedocs.io/en/stable/
#### Let's Encrypt 証明書のライフサイクル
セットアップウィザードは初期セットアップ時に Let's Encrypt 証明書を取得できますが、それが長期にわたって有効であり続けること(更新とサービスのリロード/再起動)を保証するのはあなたの責任です。
Certbot を使用して証明書を管理し、自動的に更新する場合は、[CERT_RENEWAL.md](https://github.com/trusttunnel/trusttunnel/blob/master/CERT_RENEWAL.md) のガイドに従ってください。
#### エンドポイントの実行
インストールされたパッケージには、`trusttunnel.service.template` という名前の systemd サービステンプレートが含まれています。
このテンプレートは、エンドポイントを systemd サービスとしてセットアップするために使用できます:
> [!NOTE]
> テンプレートファイルは、TrustTunnel Endpoint バイナリとそのすべての設定ファイルが `/opt/trusttunnel` にあり、デフォルトのファイル名であることを前提としています。異なるパスを使用した場合は、テンプレートを変更してください。```bash
cd /opt/trusttunnel/
cp trusttunnel.service.template /etc/systemd/system/trusttunnel.service
sudo systemctl daemon-reload
sudo systemctl enable --now trusttunnel
クライアント設定のエクスポート
エンドポイントバイナリは、2つの形式でクライアント設定を生成できます:
Deep-Link形式(デフォルト)
QRコードやモバイルアプリに適したコンパクトな tt://? URIを生成します:```shell
<client_name> - name of the client those credentials will be included in the configuration
- ip, ip:port, domain, or domain:port that the client will use to connect
If only ip or domain is specified, the port from the listen_address field will be used
cd /opt/trusttunnel/ ./trusttunnel_endpoint vpn.toml hosts.toml -c <client_name> -a
Or explicitly specify the format:
./trusttunnel_endpoint vpn.toml hosts.toml -c <client_name> -a
--format deeplinkこれは `tt://?` ディープリンク URI を出力し、以下の用途に使用できます:
- モバイルクライアントと直接共有する
- [CLI クライアント][trusttunnel-client] または [TrustTunnel Flutter クライアント][trusttunnel-flutter-client] で使用する
追加オプションも指定できます:
- `--name <display_name>`: クライアントアプリでサーバーのカスタム表示名を設定します。
- `--dns-upstream <dns_upstream>`: クライアントの DNS アップストリームを指定します。IP アドレス
またはセキュア DNS URI(例:`tls://1.1.1.1`、`https://dns.google/dns-query`)を指定できます。
このフラグは複数回使用して、DNS アップストリームのリストを提供できます。