VMess サーバは、UUID、通信を暗号化する暗号方式、および TLS の有無を問わず WebSocket や gRPC など接続を運ぶトランスポートで表されます。Potatso は、サーバの暗号方式、トランスポート、TLS 設定に対応していれば、そのサーバに接続します。プロバイダが示す設定、またはサーバの vmess:// リンクを見ながら、以下の表でサーバの設定を確認してください。
VMess サーバは、手動、vmess:// リンク、または次のものからの読み込みで追加できます。
- Clash または Mihomo のサブスクリプション、
- Xray または V2Ray の構成、
- Surge の構成。
Potatso は、sing-box の構成からの VMess サーバの読み込みにはまだ対応していません。代わりに、サーバの vmess:// リンクを使ってください。
暗号方式
| 暗号方式 | 対応 |
|---|---|
auto |
✅ Potatso は aes-128-gcm を選びます。これはすべての Apple デバイスがハードウェアで実行します。 |
aes-128-gcm |
✅ |
chacha20-poly1305 |
✅ |
none |
✅ |
zero |
❌ |
aes-128-cfb(レガシー) |
❌ |
none と zero は通信を暗号化せずに送信します。none は、接続を暗号化する TLS と組み合わせる場合にのみ使ってください。Potatso は zero では接続しません。zero は改ざんに対する保護も外すため、サーバで別の暗号方式を選んでください。
alterId
Potatso は常に現在の VMess 認証を使います。これは alterId 0 と同じです。ユーザに 0 より大きい alterId が設定されたままのサーバでも、この認証を受け付けるため、サーバをそのままにしておけます。Potatso は、0 より大きい alterId だけが使っていた古い認証には対応していません。この認証は、サーバ側で 2022 年から非推奨になっています。
トランスポート
| トランスポート | リンクの net / type |
対応 | テストに使用したもの |
|---|---|---|---|
| なし(プレーン TCP) | tcp、または指定なし |
✅ TLS の有無は問いません | Xray、sing-box、V2Ray |
| WebSocket | ws |
✅ TLS と Early Data の有無は問いません | Xray、sing-box、V2Ray |
| gRPC | grpc |
✅ TLS の有無は問いません | Xray、sing-box、V2Ray |
| HTTP/2 | h2 または http |
✅ TLS 使用時 | sing-box、V2Ray |
| HTTP Upgrade | httpupgrade |
✅ TLS の有無は問いません | Xray、sing-box |
| HTTP ヘッダー付きの TCP | type=http を指定した tcp |
❌ | |
| XHTTP | xhttp |
❌ | |
| mKCP、QUIC | kcp、quic |
❌ |
対応するすべてのトランスポートは UDP でも動作します。Potatso は、対応していないトランスポートを使うサーバを読み込みません。
WebSocket の Early Data は、接続の最初のバイトを WebSocket ハンドシェイクと一緒に送り、1 往復を省きます。リンクのパスの末尾に ?ed=2048 を付けるか、Clash のサブスクリプションの max-early-data で設定します。
Xray は HTTP/2 を提供しなくなりました。HTTP/2 を使っていた Xray サーバは現在 XHTTP を使っていますが、Potatso はまだ XHTTP に対応していません。
TLS
| 設定 | Clash のキー | リンクのフィールド | 対応 |
|---|---|---|---|
| サーバ名(SNI) | servername |
sni |
✅ 指定がない場合、Potatso はサーバのアドレスを使います。 |
| ALPN | alpn |
alpn |
✅ 指定がない場合、Potatso は WebSocket では http/1.1、gRPC と HTTP/2 では h2 を送ります。 |
| 証明書の検証をスキップ | skip-cert-verify |
allowInsecure |
✅ |
| ブラウザフィンガープリント | client-fingerprint |
fp |
✅ chrome、firefox、safari、ios、android、edge、random。それ以外の名前は、デフォルトのハンドシェイクで接続します。 |
| 証明書のピン留め | fingerprint |
pcs |
❌ |
| REALITY | reality-opts |
security=reality |
❌ |
| Encrypted Client Hello(ECH) | ech-opts |
ech |
❌ |
| カスタム CA 証明書 | ❌ |
証明書の検証をオフにすると、あなたとサーバの間にいる誰でも、通信内容を読めてしまいます。Potatso は、REALITY、ECH、証明書のピンが必要な VMess サーバには接続しません。それらなしで接続しても、サーバが求める保護が得られないためです。REALITY が必要な場合は、VLESS または Trojan を使ってください。
ブラウザフィンガープリントを指定すると、接続の TLS ハンドシェイクがそのブラウザのものに見えます。サーバが対応しなければならない内容は変わりません。
UDP
VMess サーバでは、UDP はデフォルトでオフです。サーバの設定で UDP リレーをオンにするか、Clash のサブスクリプションで udp: true を設定してください。
Potatso は、UDP の各フローをそれぞれ専用の VMess 接続で送ります。これはどの VMess サーバも受け付けます。多数の UDP フローを 1 つの接続で運ぶ XUDP と PacketAddr のエンコード(リンクの packetEncoding、Clash のサブスクリプションの packet-encoding や xudp)には対応していません。それらを設定したサーバでも動作し、読み込み時に、代わりに Potatso 独自の UDP を使うことが通知されます。一部のゲームなど、フルコーン NAT を必要とするアプリは、動作しない場合があります。
多重化がオンの場合、UDP は代わりに共有された接続で運ばれます。
多重化
Potatso は、1 つの VMess 接続の上に複数の接続を通せます。Clash のサブスクリプションでは smux で設定します。
| プロトコル | smux の protocol |
サーバ |
|---|---|---|
| Mux.Cool | muxcool |
Xray、V2Ray、sing-box(サーバ側の設定は不要) |
| sing-mux | h2mux、smux、yamux |
多重化をオンにした sing-box |
TCP も UDP も動作します。Mux.Cool は接続の両方向をまとめて閉じるため、送信を止めてから応答を待つアプリは、多重化のないサーバを使ってください。
リクエストのオプション
VMess クライアントは、接続ごとにいくつかのオプションを選び、サーバはそのどれも受け付けます。Potatso は常に、通信を暗号化されたチャンクで送り、各アップロードの終わりに目印を付けます。それ以外は設定しません。
| オプション | Clash のキー | Potatso |
|---|---|---|
| チャンクストリーム | 常にオン | |
| チャンクマスキング | オフ | |
| グローバルパディング | global-padding |
オフ。これを設定したサーバを読み込むと、Potatso が警告します。 |
| 認証付きの長さ | authenticated-length |
オフ。これを設定したサーバを読み込むと、Potatso が警告します。 |
チャンクマスキングとグローバルパディングは、各チャンクのサイズを傍受者から隠します。これらがなくても通信内容は読み取れませんが、通信のパターンは識別されやすくなります。
大きなアップロード
1 つの VMess 接続でアップロードできるのは約 1 GiB までです。VMess は暗号化したチャンクにカウンターで番号を振りますが、その上限を超えると暗号が弱くなるため、Potatso は代わりに接続を閉じます。ダウンロードに制限はありません。1 つの接続で 1 GiB を超えるアップロードには、VLESS または Trojan のサーバを使ってください。
機能の対応状況
| 機能 | 対応 |
|---|---|
AEAD 認証(alterId 0) |
✅ |
レガシーの MD5 認証(0 より大きい alterId) |
❌ alterId が 0 より大きいサーバも AEAD 認証を受け付けます。 |
暗号方式 aes-128-gcm、chacha20-poly1305、none、auto |
✅ |
暗号方式 zero とレガシーの aes-128-cfb |
❌ |
| チャンクストリーム、アップロード終了の目印 | ✅ |
| チャンクマスキング、グローバルパディング、認証付きの長さ | ❌ サーバはこれらなしの接続も受け付けます |
| UDP | ✅ フローごとに 1 つの接続 |
| 1 つの接続で約 1 GiB を超えるアップロード | ❌ 大きなアップロードを参照してください |
| XUDP、PacketAddr | ❌ |
| Mux.Cool | ✅ TCP と UDP |
| sing-mux(h2mux、smux、yamux) | ✅ TCP と UDP |
| トランスポート | トランスポートを参照してください |
| TLS | TLS を参照してください |
| v2rayN の共有リンク(バージョン 2) | ✅ |
| Xray の共有リンク | ✅ |
| Shadowrocket の共有リンク | 読み込みのみ |
vmess:// リンク
vmess:// リンクは、1 行にサーバ全体の情報をまとめたものです。Potatso は 3 つの形式を読み込み、最初の 2 つを共有します。
最も一般的な v2rayN 形式は、Base64 でエンコードした JSON オブジェクトです。
vmess://base64({"v":"2","ps":"name","add":"host","port":"443","id":"uuid",…})| フィールド | 説明 |
|---|---|
v |
形式のバージョン。2。 |
ps |
任意。Potatso でのサーバ名。 |
add |
サーバのアドレス。 |
port |
サーバのポート。 |
id |
UUID。 |
aid |
alterId。alterId を参照してください。 |
scy |
暗号方式。指定がない場合は auto。 |
net |
トランスポート:tcp、ws、grpc、h2、httpupgrade。 |
type |
none、または TCP の HTTP ヘッダーを示す http(Potatso は対応していません)。 |
host |
WebSocket、HTTP/2、HTTP Upgrade の Host ヘッダー。 |
path |
WebSocket、HTTP/2、HTTP Upgrade のパス、または gRPC のサービス名。WebSocket のパスは、Early Data のために ?ed=2048 で終えられます。 |
tls |
TLS を使う場合は tls、それ以外は空。 |
sni、alpn、fp |
TLS のサーバ名、ALPN のリスト、ブラウザフィンガープリント。 |
Xray 形式は URL で、暗号方式を encryption に、トランスポートと TLS の設定をクエリパラメータに入れます。
vmess://uuid@host:port?type=ws&security=tls&sni=…&host=…&path=…&encryption=auto#name| パラメータ | 説明 |
|---|---|
type |
トランスポート。 |
encryption |
暗号方式。指定がない場合は auto。 |
security |
tls、または none。 |
sni、alpn、fp |
TLS のサーバ名、ALPN のリスト、ブラウザフィンガープリント。 |
host、path |
v2rayN 形式と同じ、Host ヘッダーとパス。 |
serviceName |
gRPC のサービス名。 |
ed |
WebSocket の Early Data(バイト数)。 |
Potatso は、Shadowrocket の形式 vmess://base64(cipher:uuid@host:port)?remarks=…&obfs=websocket&… も読み込みます。
例
各例は、読み込むリンクを示しています。UUID は b831381d-6324-4d53-ad4f-8cda48b30811 です。
cdn.example.com 経由の、TLS と Early Data を使う WebSocket。Chrome フィンガープリント付き:
vmess://eyJ2IjoiMiIsInBzIjoiV1MgVExTIiwiYWRkIjoidm1lc3MuZXhhbXBsZS5jb20iLCJwb3J0IjoiNDQzIiwiaWQiOiJiODMxMzgxZC02MzI0LTRkNTMtYWQ0Zi04Y2RhNDhiMzA4MTEiLCJhaWQiOiIwIiwic2N5IjoiYXV0byIsIm5ldCI6IndzIiwidHlwZSI6Im5vbmUiLCJob3N0IjoiY2RuLmV4YW1wbGUuY29tIiwicGF0aCI6Ii9yYXk/ZWQ9MjA0OCIsInRscyI6InRscyIsInNuaSI6ImNkbi5leGFtcGxlLmNvbSIsImFscG4iOiJodHRwLzEuMSIsImZwIjoiY2hyb21lIn0=TLS と aes-128-gcm を使う gRPC、サービス名は vmess-grpc:
vmess://eyJ2IjoiMiIsInBzIjoiZ1JQQyIsImFkZCI6InZtZXNzLmV4YW1wbGUuY29tIiwicG9ydCI6IjQ0MyIsImlkIjoiYjgzMTM4MWQtNjMyNC00ZDUzLWFkNGYtOGNkYTQ4YjMwODExIiwiYWlkIjoiMCIsInNjeSI6ImFlcy0xMjgtZ2NtIiwibmV0IjoiZ3JwYyIsInBhdGgiOiJ2bWVzcy1ncnBjIiwidGxzIjoidGxzIiwic25pIjoidm1lc3MuZXhhbXBsZS5jb20ifQ==chacha20-poly1305 を使うプレーン TCP(Xray 形式):
vmess://b831381d-6324-4d53-ad4f-8cda48b30811@vmess.example.com:8080?type=tcp&encryption=chacha20-poly1305#Plain%20TCPTLS を使う HTTP Upgrade(Xray 形式):
vmess://b831381d-6324-4d53-ad4f-8cda48b30811@vmess.example.com:443?type=httpupgrade&security=tls&sni=cdn.example.com&host=cdn.example.com&path=%2Fupgrade&encryption=auto#HTTP%20UpgradeClash のサブスクリプションでは
proxies:
- name: VMess WS
type: vmess
server: vmess.example.com
port: 443
uuid: b831381d-6324-4d53-ad4f-8cda48b30811
alterId: 0
cipher: auto
udp: true
tls: true
servername: cdn.example.com
network: ws
ws-opts:
path: /ray
headers:
Host: cdn.example.com
max-early-data: 2048
early-data-header-name: Sec-WebSocket-Protocol