VMess と VLESS の違いは、ひとつの設計上の選択に行き着きます。VMess は組み込みの暗号方式で通信を自ら暗号化しますが、VLESS は独自の暗号化を持たず、下にある TLS や REALITY に任せます。そのため VLESS のほうが軽く、REALITY や Vision フローといった新しい機能も使えます。新しくサーバを立てるなら、たいていは VLESS のほうがよい選択です。一方、TLS を使っている既存の VMess サーバも問題なく使い続けられます。
ここからは、2 つのプロトコルを詳しく比べていきます。
VMess と VLESS の成り立ち
VMess は、2016 年ごろに登場した V2Ray(Project V)の最初のプロトコルです。単体で安全に使えるよう設計されており、TLS がなくてもすべての接続を認証・暗号化します。
VLESS は、より軽量な後継として 2020 年に V2Ray コミュニティで提案されました。開発は、同じ年に V2Ray からフォークした Xray で続けられています。Xray、V2Ray、sing-box、Mihomo はいずれも両方のプロトコルに対応していますが、新しい機能は VLESS に追加されます。VLESS と REALITY の詳細は VLESS Reality とは?をお読みください。
VMess と VLESS の違いを一覧で比較
| VMess | VLESS | |
|---|---|---|
| 組み込みの暗号化 | あり:aes-128-gcm、chacha20-poly1305、auto、none |
なし(Xray ではオプションの VLESS Encryption あり) |
| ユーザ ID | UUID | UUID、または Xray が UUID に変換するテキスト |
| 秘匿性に TLS が必要か | 不要(ただし推奨) | 必要(または REALITY) |
| 時刻に依存するか | する | しない |
| alterId | あり(0 を使用) | なし |
| REALITY | 非対応 | 対応 |
| Vision フロー | 非対応 | 対応 |
| XHTTP トランスポート | Potatso では非対応 | 対応 |
| WebSocket、gRPC、HTTP Upgrade、HTTP/2 | 対応 | 対応 |
| 証明書のピン留め、ECH(Potatso) | 非対応 | 対応 |
| UDP | 対応(Potatso では初期状態でオフ) | 対応(Potatso では初期状態でオフ) |
| TLS 使用時のオーバーヘッド | 2 回暗号化 | 1 回暗号化 |
「Potatso」と記した行は、Potatso での対応状況です。すべての設定は VMess と VLESS のリファレンスページに載っています。
暗号化:暗号方式か TLS か
VMess は、サーバで選んだ暗号方式で各接続を暗号化します。
aes-128-gcm:AES をハードウェアで処理する Apple デバイスなら、どれでも高速です。chacha20-poly1305:AES のハードウェア支援がないデバイスに向いています。auto:クライアントに選ばせます。Potatso はaes-128-gcmを選びます。none:VMess の暗号化をオフにします。接続を TLS が暗号化する場合にだけ使ってください。
VLESS はこのレイヤーを省いています。VLESS 接続の秘匿性は下にあるもの次第なので、ほぼ必ず TLS か REALITY と組み合わせて使われます。どちらもなければ、VLESS は通信を平文で送ります。
つまり TLS 上の VMess は、データを VMess と TLS で 2 回暗号化します。安全ではあるものの無駄があります。TLS 上の VLESS なら 1 回で済みます。
VLESS Encryption について:2025 年、Xray は VLESS 向けのオプションのポスト量子暗号化レイヤー、VLESS Encryption を追加しました。まだ新しく、ほとんどのサーバでは使われていません。リンクやサブスクリプションに含まれていれば、Potatso はこれに対応します。
alterId と認証の違い
VMess の当初の認証は MD5 ベースの方式で、alterId という設定で制御されていました。2020 年に V2Ray が alterId 0 のときに使う AEAD 認証を導入し、2022 年にはサーバ側で古い方式が非推奨になりました。
- プロバイダから alterId を指定された場合も、できるかぎり 0 を使ってください。
- Potatso は常に AEAD 認証を使います。alterId が 0 より大きいユーザのままのサーバも AEAD を受け付けるため、サーバ側を変更する必要はありません。
VMess はタイムスタンプも確認するため、デバイスの時刻がサーバの時刻と近い必要があります。iPhone は時刻を自動で設定するので問題になることはまれですが、サーバの時計がずれていると、すべての VMess クライアントが拒否されます。
VLESS には alterId も時刻のチェックもありません。ユーザ ID を送り、残りは TLS や REALITY に任せます。
対応トランスポートの違い
どちらのプロトコルも、同じ系統のトランスポートの上で動作します。
- トランスポートなしの TCP(直接、または TLS 付き)。
- WebSocket、HTTP Upgrade、gRPC:CDN を経由させるためによく使われます。
- HTTP/2:Xray ではその後 XHTTP に置き換えられました。
Xray の最新の HTTP ベースのトランスポートである XHTTP は、Potatso で両者の差が出る部分です。VLESS では使えますが、VMess ではまだ使えません。mKCP と QUIC はどちらでも非対応です。
REALITY と Vision は VLESS だけ
いま VLESS を選ぶ最大の理由は、その上に築かれた機能です。
- REALITY:サーバが実在のウェブサイトの TLS ハンドシェイクを借りるため、独自のドメインや証明書が要らず、未知の訪問者にはそのウェブサイトが見えます。VMess では REALITY を使えません。
- Vision(
xtls-rprx-vision):プロキシ経由の TLS ハンドシェイクにパディングを加え、「TLS の中の TLS」のパターンを見つけにくくします。
どちらかを使いたいなら VLESS が必要です。クライアント側の設定は iPhone で VLESS Reality を設定する方法をご覧ください。
速度と制限
VLESS は VMess の余分な暗号化を省くため、CPU 使用量がわずかに少なく、オーバーヘッドも少し小さくなります。とはいえスマートフォンで体感できることはまずありません。サーバまでの距離、負荷、ネットワーク経路のほうがはるかに影響します。
Potatso の VMess には、実用上の制限がひとつあります。1 本の VMess 接続でアップロードできるのは約 1 GiB までで、それを超えると Potatso は暗号化を弱めるのではなく接続を閉じます。ダウンロードに制限はありません。非常に大きなファイルを 1 本の接続でアップロードする場合は、VLESS か Trojan を使ってください。
通信パターンの違い
どちらのプロトコルも、正しく設定すれば暗号化されますが、暗号化ですべてが隠れるわけではありません。TLS なしの VMess には、それ自体に見分けやすい形があります。Potatso は VMess のチャンクマスキングやパディングのオプションを使わないため、TLS で包まない VMess 通信はサイズのパターンから見分けやすくなります。TLS 上の VLESS、とくに Vision 付きの REALITY 上の VLESS は、普通の HTTPS により近く見えます。ただし、どちらも検出されないわけではありません。
VMess と VLESS、どちらを選ぶべき?
VLESS を選ぶとよいケース:
- 新しくサーバを立てる。
- ドメインや証明書を用意せずに済む REALITY を使いたい。
- Vision、XHTTP、証明書のピン留めを使いたい。
VMess のままでよいケース:
- プロバイダが VMess しか提供していない、またはすでに動いている VMess サーバがある。
- そのサーバが TLS、または CDN 経由の WebSocket over TLS を使っている。
避けたほうがよい構成:
- 新しいサーバで alterId を 0 より大きくした VMess。
noneまたはzeroの暗号方式で、TLS なしの VMess。- TLS、REALITY、VLESS Encryption のいずれも使わない VLESS。
この 2 つ以外も検討しているなら、プロキシ プロトコル比較で VLESS と VMess を Trojan、Shadowsocks、Hysteria 2、AnyTLS と並べて比べられます。
iPhone で VMess や VLESS を使う
Potatso は、共有リンク、QR コード、Clash・V2Ray・Xray のサブスクリプションから両方を読み込めます。VMess については Surge の構成も読み込めます。手順はどのサーバでも同じです。
- App Store から Potatso をインストールします。
vmess://またはvless://リンクをペーストするか、QR コードをスキャンするか、サブスクリプションを読み込みます。- サーバが UDP を中継する場合は、サーバの設定で UDP リレーをオンにします。
- VPN を許可し、ホームから接続します。
REALITY の設定項目やよくあるエラーを含む詳しい手順は、iPhone で VLESS Reality を設定する方法をご覧ください。多数のサーバを含むサブスクリプションをお持ちなら、iPhone に Clash サブスクリプションを読み込む方法をご覧ください。
よくある質問
- VMess と VLESS の違いは何ですか?
- VMess は aes-128-gcm などの暗号方式で通信を自ら暗号化します。VLESS には暗号化の仕組みがなく、下にある TLS や REALITY に任せます。そのぶん VLESS は軽く、REALITY や Vision フローといった新しい機能も使えます。
- VLESS は VMess より速いですか?
- 通常は少しだけ速くなります。TLS 上の VLESS は通信を 1 回だけ暗号化しますが、TLS 上の VMess は 2 回暗号化するためです。とはいえスマートフォンでは差が小さいことが多く、サーバまでの距離や負荷のほうがはるかに影響します。
- TLS なしの VLESS は安全ですか?
- 安全ではありません。素の VLESS は通信を暗号化せずに送ります。必ず TLS か REALITY、または Xray の VLESS Encryption と組み合わせて使ってください。
- VMess の alterId はいくつにすればよいですか?
- 0 にしてください。alterId 0 は現在の AEAD 認証を意味します。0 より大きい値は、2022 年にサーバ側で非推奨になった古い MD5 認証のものです。Potatso は常に AEAD を使い、そうしたサーバも AEAD を受け付けます。
- VMess で REALITY は使えますか?
- 使えません。REALITY が使えるのは VLESS(一部のサーバでは Trojan も)で、VMess では使えません。REALITY を使いたい場合は VLESS サーバを用意してください。