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 の構成も読み込めます。手順はどのサーバでも同じです。

  1. App Store から Potatso をインストールします。
  2. vmess:// または vless:// リンクをペーストするか、QR コードをスキャンするか、サブスクリプションを読み込みます。
  3. サーバが UDP を中継する場合は、サーバの設定で UDP リレーをオンにします。
  4. 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 サーバを用意してください。

他の言語: English · 简体中文 · 繁體中文 · Русский