Trojan サーバは、パスワードと TLS 設定で表され、任意で WebSocket や gRPC など、接続を運ぶトランスポートも使えます。Trojan は常に TLS(または REALITY)の中で動作するため、傍受している第三者には通常の HTTPS アクセスのように見えます。Potatso は、サーバのトランスポートと TLS 設定に対応していれば、そのサーバに接続します。プロバイダが示す設定、またはサーバの trojan:// リンクを見ながら、以下の表でサーバの設定を確認してください。
Trojan サーバは、手動、trojan:// リンク、または次のものからの読み込みで追加できます。
- Clash または Mihomo のサブスクリプション、
- Xray または V2Ray の構成、
- Surge の構成。
Potatso は、sing-box の構成からの Trojan サーバの読み込みにはまだ対応していません。代わりに、サーバの trojan:// リンクを使ってください。
トランスポート
| トランスポート | リンクの type |
対応 | テストに使用したもの |
|---|---|---|---|
| TLS のみ(トランスポートなし) | tcp、または指定なし |
✅ | Xray、sing-box、trojan-go |
| WebSocket | ws |
✅ Early Data の有無は問いません | Xray、sing-box、trojan-go |
| gRPC | grpc |
✅ | Xray、sing-box |
| HTTP/2 | http または h2 |
✅ | sing-box |
| HTTP Upgrade | httpupgrade |
✅ | Xray、sing-box |
| XHTTP | xhttp |
❌ | |
| mKCP、QUIC | kcp、quic |
❌ |
どのトランスポートも UDP で動作します。Potatso は、対応していないトランスポートを使うサーバを読み込みません。
Xray は HTTP/2 を提供しなくなりました。HTTP/2 を使っていた Xray サーバは現在 XHTTP を使っていますが、Potatso はまだ XHTTP に対応していません。
TLS
| 設定 | Clash のキー | リンクのパラメータ | 対応 |
|---|---|---|---|
| サーバ名(SNI) | sni |
sni、peer |
✅ 指定がない場合、Potatso はサーバのアドレスを使います。 |
| ALPN | alpn |
alpn |
✅ 指定がない場合、Potatso は h2, http/1.1 を送ります。WebSocket と HTTP Upgrade では http/1.1、gRPC と HTTP/2 では h2 です。 |
| 証明書の検証をスキップ | skip-cert-verify |
allowInsecure、insecure |
✅ |
| 証明書のピン留め(SHA-256) | fingerprint |
✅ | |
| ブラウザフィンガープリント | client-fingerprint |
fp |
✅ chrome、firefox、safari、ios、android、edge、random。それ以外の名前は、デフォルトのハンドシェイクで接続します。 |
| REALITY | reality-opts |
security=reality、pbk、sid |
✅ トランスポートなし、または gRPC の場合 |
| Encrypted Client Hello(ECH) | ech-opts |
ech |
✅ リンクまたはサブスクリプションに ECH 構成がある場合 |
| カスタム CA 証明書 | ❌ | ||
| TLS クライアント証明書 | certificate、private-key |
❌ |
証明書の検証をオフにすると、あなたとサーバの間にいる誰でも、通信内容を読めてしまいます。サーバが自己署名証明書を使っている場合は、代わりにサーバの証明書をピン留めしてください。証明書のピンに、その証明書の SHA-256 を設定します。
ブラウザフィンガープリントを指定すると、接続の TLS ハンドシェイクがそのブラウザのものに見えます。サーバが対応しなければならない内容は変わりません。
REALITY
REALITY サーバは、別の Web サイトの TLS 証明書を借りるため、自前の証明書が不要です。サーバの Reality 公開鍵と Reality ショート ID をプロバイダの指定どおりに設定し、サーバ名にはサーバが借りている Web サイトを設定します。REALITY にはブラウザフィンガープリントが必要です。リンクや設定にない場合、Potatso は chrome を使います。
REALITY は、トランスポートなしと gRPC で動作します。Potatso は、それ以外のトランスポートを使う REALITY サーバを読み込みません。
多重化
Potatso は、sing-box の多重化(smux、yamux、h2mux)で、1 つの Trojan 接続の上に複数の接続を通せます。Clash のサブスクリプションでは smux で設定します。サーバ側で多重化がオンになっている必要があります。TCP も UDP も動作します。
trojan-go 独自の多重化(trojan-go サーバの mux)は別のプロトコルで、Potatso は対応していません。trojan-go サーバは、多重化なしでの Potatso からの接続も受け付けます。
UDP
Trojan は、TCP と同じ TLS 接続の上で UDP を運びます。Clash と同様に、UDP はデフォルトでオフです。サーバが UDP を中継する場合は、サーバの設定で UDP リレーをオンにしてください。Xray、sing-box、trojan-go はいずれも中継します。Clash のサブスクリプションでは udp: true でオンになります。
機能の対応状況
| 機能 | 対応 |
|---|---|
Trojan プロトコル:パスワードのハッシュ、CONNECT |
✅ |
Trojan の UDP ASSOCIATE |
✅ |
TLS なしの Trojan(security=none) |
❌ |
| 1 つのサーバでの複数ユーザ | ✅ それぞれ自分のパスワードを使用 |
| WebSocket、gRPC、HTTP/2、HTTP Upgrade トランスポート | ✅ トランスポートを参照してください |
| XHTTP、mKCP、QUIC トランスポート | ❌ |
| REALITY | ✅ トランスポートなし、または gRPC の場合 |
| ECH | ✅ |
| sing-box の多重化(smux、yamux、h2mux) | ✅ |
| trojan-go の多重化 | ❌ |
trojan-go の Shadowsocks 暗号化(ss-opts、encryption=ss;…) |
❌ |
| Trojan を包む ShadowTLS、Restls、JLS | ❌ |
trojan:// と trojan-go:// のリンク |
✅ |
対応しているすべての機能は、実際の Trojan サーバ(Xray、sing-box、trojan-go)のうち、少なくとも 1 つに対してテスト済みです。
パスワードが間違っていると、Trojan サーバは、通常の Web サイトとして応答します(フォールバック)。そのため Potatso は接続できず、パスワードのエラーも表示しません。Trojan サーバにまったく接続できない場合は、まずパスワードを確認してください。
Potatso は、trojan-go の Shadowsocks 暗号化、または Trojan を包む ShadowTLS、Restls、JLS を使うサーバを読み込みません。それらなしで接続しても、サーバが応答しないためです。
trojan-go の機能の一部は、そのクライアントプログラム自体の設定で、Potatso は同じ役割を独自の方法で果たしています。
- ルーティング:プロファイルのルールを使ってください。
- ローカルの SOCKS5 / HTTP サーバ、フォワーディング:Potatso がデバイスの通信を自分で取り込みます。
trojan:// リンク
trojan:// リンクは、1 行にサーバ全体の情報をまとめたものです。
trojan://password@host:port?parameters#name| 部分 | 説明 |
|---|---|
password |
パスワード(パーセントエンコード)。@ より前のすべてがパスワードで、: も含まれます。 |
host |
サーバのアドレス。IPv6 アドレスは [2001:db8::1] のように角括弧で囲みます。 |
port |
サーバのポート。省略した場合、Potatso は 443 を使います。 |
name |
任意。Potatso でのサーバ名。 |
パラメータは、Xray と v2rayN が使う形式に従います。
| パラメータ | 説明 |
|---|---|
security |
tls(デフォルト)または reality。 |
type |
トランスポート:tcp、ws、grpc、http(HTTP/2)、httpupgrade。 |
sni、peer |
TLS のサーバ名。 |
alpn |
ALPN のリスト。カンマ区切りで、パーセントエンコードします。 |
fp |
ブラウザフィンガープリント。 |
allowInsecure |
1 で証明書の検証をオフにします。 |
host |
WebSocket、HTTP/2、HTTP Upgrade の HTTP Host。 |
path |
WebSocket、HTTP/2、HTTP Upgrade のパス。/ws?ed=2048 のような WebSocket のパスは、Early Data をオンにします。 |
serviceName |
gRPC のサービス名。 |
pbk、sid |
REALITY の公開鍵とショート ID。 |
ech |
ECH 構成(Base64 エンコードしたうえでパーセントエンコード)。 |
Potatso は、type=original(トランスポートなし)または type=ws の trojan-go:// リンクも読み込みます。trojan-go の Shadowsocks 暗号化が必要になる encryption パラメータを持つリンクは読み込みません。
Potatso が Trojan サーバを共有するときは、同じパラメータを持つ trojan:// リンクを提供します。
例
各例は、読み込むリンクを示しています。パスワードは secret です。
基本的なサーバ:
trojan://secret@trojan.example.com:443?sni=trojan.example.com#Basiccdn.example.com 経由の WebSocket:
trojan://secret@trojan.example.com:443?security=tls&type=ws&host=cdn.example.com&path=%2Fws#WebSocketサービス名 TrojanGun の gRPC:
trojan://secret@trojan.example.com:443?security=tls&type=grpc&serviceName=TrojanGun#gRPCHTTP/2:
trojan://secret@trojan.example.com:443?security=tls&type=http&host=cdn.example.com&path=%2Fh2#HTTP2HTTP Upgrade:
trojan://secret@trojan.example.com:443?security=tls&type=httpupgrade&host=cdn.example.com&path=%2Fup#Upgradewww.example.com を借りる REALITY:
trojan://secret@trojan.example.com:443?security=reality&sni=www.example.com&pbk=Z84J2IelR9ch3k8VtlVhhs5ycBUlXA7wHBWcBrjqnAw&sid=0123abcd&fp=chrome#REALITY