VLESS REALITY は、別のウェブサイトの TLS ハンドシェイクの陰に隠れる VLESS プロキシサーバです。VLESS は Xray プロジェクトの軽量なプロキシプロトコルで、REALITY はその通常の TLS レイヤーを置き換えます。サーバは無関係な実在のウェブサイトとして応答するため、独自のドメインや証明書は不要で、公開鍵とショート ID を持つクライアントだけがプロキシにたどり着けます。通常は Vision フロー(xtls-rprx-vision)と組み合わせて使われます。
このガイドでは、それぞれの要素が何をしていて、どう組み合わさるのか、そしてどこに限界があるのかを説明します。
VLESS とは?
VLESS はステートレスなプロキシプロトコルです。各接続は短いヘッダーから始まります。中身はバージョン、ユーザ ID(UUID)、コマンド(TCP または UDP)、宛先です。そのあとにデータが続きます。
VLESS の仕組みはほぼこれだけです。VLESS には暗号化の仕組みがありません。前身の VMess はすべてのパケットを自分で暗号化しますが、VLESS はそれを下のレイヤー、通常は TLS か REALITY に任せます。二重に暗号化しないぶん、スマートフォンとサーバの負荷が減ります。
VLESS は 2020 年に V2Ray コミュニティで提案され、現在は Xray で開発されています。sing-box と Mihomo も対応しています。2 つのプロトコルの比較は VMess と VLESS の違いをご覧ください。
トランスポート
VLESS は TCP 上で直接動かすことも、接続を運ぶトランスポートの中で動かすこともできます。
- WebSocket、HTTP Upgrade、gRPC:CDN を経由させるためによく使われます。
- XHTTP(旧 SplitHTTP):Xray の HTTP ベースのトランスポートで、Xray では HTTP/2 と QUIC に代わるものです。
REALITY は、トランスポートなし、gRPC、XHTTP のいずれかと組み合わせて使います。
XTLS Vision とは?
TLS プロキシ経由で HTTPS サイトを開くと、ブラウザの TLS 接続がプロキシの TLS 接続の中を通ります。この「TLS の中の TLS」には見分けやすい形があります。内側のハンドシェイクのサイズやタイミングが、外側の暗号化を通して透けて見えるのです。
Vision フロー(xtls-rprx-vision)はこの問題に対処します。内側の TLS ハンドシェイクの最初のパケットにパディングを加え、サイズから手がかりが得られにくくします。内側の接続が暗号化されたあとは、Vision はそのデータを再度暗号化せずにそのまま通せます。
Vision を使うには、トランスポートなしの VLESS と、TLS または REALITY が必要です。派生版の xtls-rprx-vision-udp443 では、ポート 443 への UDP(QUIC)も通せます。xtls-rprx-direct などの古い XTLS フローは Xray から削除されました。
REALITY とは?
通常の TLS プロキシにはドメイン名と証明書が必要です。用意するのは手間がかかりますし、ドメインやウェブサイトの中身が薄いサーバはかえって目立つことがあります。
2023 年に Xray に追加された REALITY は、別のアプローチを取ります。サーバにはターゲット、つまり www.example.com のような、借用元となる実在のウェブサイトを設定します。そのうえで、次のように動作します。
- クライアントは、ターゲットの名前を SNI にして、実際のブラウザと同じ形の TLS 1.3 ハンドシェイクを始めます。
- そのハンドシェイクの中には、サーバの公開鍵と有効なショート ID を持つクライアントにしか作れない値が隠されています。
- 値が正しければ、サーバは自分でハンドシェイクを完了し、クライアントは同じ共有鍵でサーバを検証します。その中で VLESS 接続が動きます。
- 正しくなければ(たとえば誰かがサーバをプローブしている場合)、サーバは接続を本物のターゲットに転送します。訪問者には本物のサイトと本物の証明書が返ります。
そのため、サーバは独自の証明書を一切必要とせず、プローブからは普通のウェブサイトにしか見えません。
公開鍵・ショート ID・SNI・フィンガープリント
REALITY サーバからは 4 つの設定値が渡されます。どれもサーバと一致している必要があります。
| 設定 | リンクのパラメータ | 内容 |
|---|---|---|
| 公開鍵 | pbk |
サーバの X25519 公開鍵で、43 文字の Base64 文字列です。対になる秘密鍵はサーバに残ります。 |
| ショート ID | sid |
サーバが受け付ける、最大 16 文字の短い 16 進文字列です。ユーザやデバイスごとに複数登録できます。 |
| サーバ名(SNI) | sni |
サーバが借用するウェブサイトです。サーバが許可している名前のいずれかである必要があります。 |
| フィンガープリント | fp |
どのブラウザの TLS ハンドシェイクを模倣するかを指定します。chrome、firefox、safari などです。 |
フィンガープリントが重要なのは、TLS ライブラリのハンドシェイクがブラウザのものとは異なって見えるからです。ブラウザを模倣することで、ハンドシェイクを、サーバが装っているサイトにふさわしいものに保てます。
VLESS Encryption
2025 年、Xray は VLESS 独自のオプションの暗号化レイヤーである VLESS Encryption を追加しました。ポスト量子の鍵交換(ML-KEM-768 と X25519)を使い、クライアント側の値は mlkem768x25519plus で始まります。TLS なしでも、TLS の上でも(Vision との併用を含めて)動作します。
まだ新しい仕組みで、目にするサーバのほとんどは encryption=none で TLS か REALITY を使っています。Potatso は、リンク、サブスクリプション、Xray の構成を読み込む際にこの設定を引き継ぎます。対応しているモードは VLESS リファレンスをご覧ください。
VLESS REALITY のメリットと弱点
メリット:
- ドメインも証明書も不要。REALITY は実在のサイトのハンドシェイクを借ります。
- アクティブプローブに強い。鍵を持たないクライアントは、本物のウェブサイトへそのまま渡されます。
- 軽量。VLESS が加えるオーバーヘッドはほとんどなく、Vision は二重の暗号化を避けます。
- 柔軟。同じプロトコルを、素の TCP、WebSocket、gRPC、XHTTP の上で、TLS か REALITY と組み合わせて使えます。
弱点:
- 見つけにくいが、検出されないわけではない。通信パターンは分析される可能性があります。また、IP アドレスが明らかに借用元サイトのものではないサーバは、場違いに見えることがあります。
- ターゲット選びに注意が必要。TLS 1.3 に対応している必要があり、選び方を誤るとサーバが目立ったり、動かなくなったりします。
- REALITY では CDN を使えない。WebSocket over TLS と違い、REALITY サーバには直接接続する必要があります。
- 設定は完全に一致させる必要がある。公開鍵、ショート ID、SNI が間違っていても、はっきりしたエラーは出ず、タイムアウトか普通のウェブサイトのように見えるだけです。
- UDP には設定が必要。Potatso を含む多くのクライアントでは、オンにするまで VLESS の UDP はオフのままです。
VLESS REALITY とほかのプロトコルの比較
| VLESS + REALITY | VLESS + TLS | Trojan | VMess | Hysteria 2 | |
|---|---|---|---|---|---|
| 暗号化 | REALITY(TLS 1.3) | TLS | TLS | 組み込みの暗号方式、TLS も併用可 | QUIC 内の TLS 1.3 |
| ドメインと証明書 | 不要 | 必要 | 必要 | TLS 使用時のみ必要 | 必要(ピン留めした自己署名証明書でも可) |
| CDN 経由 | 不可 | 可(WebSocket、gRPC、XHTTP) | 可(WebSocket または gRPC) | 可(WebSocket または gRPC) | 不可 |
| 下位の通信 | TCP | TCP | TCP | TCP | UDP(QUIC) |
| プローブへの応答 | 借用元のサイト | 自分のサイト(設定した場合) | フォールバックサイト(設定した場合) | 設定による | 偽装サイト(設定した場合) |
全体像は プロキシ プロトコル比較で確認できます。Trojan や Hysteria 2 の解説もあわせてどうぞ。
VLESS REALITY のリンクの見方
プロバイダからは、たいてい vless:// リンクが渡されます。次は www.example.com を借用する、REALITY と Vision を使ったリンクの例です。
vless://3971e1b2-18a3-4f83-8fa6-bf9b142ee258@vless.example.com:443?security=reality&sni=www.example.com&fp=chrome&pbk=Z84J2IelR9ch3k8VtlVhhs5ycBUlXA7wHBWcBrjqnAw&sid=0123abcd&type=tcp&flow=xtls-rprx-vision#REALITY-Vision
左から順に読むと、次のとおりです。
3971e1b2-…はユーザ ID です。vless.example.com:443はサーバとポートです。security=realityで REALITY がオンになります。sni=www.example.comは借用元のサイトです。fp=chromeはフィンガープリントです。pbkとsidは公開鍵とショート ID です。type=tcpはトランスポートなしを意味し、flow=xtls-rprx-visionで Vision がオンになります。#REALITY-Visionは、アプリでのサーバの名前です。
通常の TLS を使うリンクでは、代わりに security=tls となり、pbk と sid はありません。すべてのパラメータは VLESS リファレンスに載っています。
iPhone で VLESS REALITY を使う
Potatso は iPhone・iPad 向けの無料プロキシクライアントで、REALITY、Vision、XHTTP、VLESS Encryption を含む VLESS に対応し、Xray と sing-box のサーバで動作を確認しています。iPhone で VLESS Reality を設定する方法の手順に沿えば、数分でリンクを読み込んで接続できます。
よくある質問
- VLESS REALITY とは、ひと言でいうと何ですか?
- 通常の TLS の代わりに REALITY を使う VLESS プロキシサーバです。サーバは無関係な実在のウェブサイトの TLS ハンドシェイクを提示するため、独自のドメインや証明書が要りません。プロキシにたどり着けるのは、公開鍵とショート ID を知っているクライアントだけです。
- VLESS は暗号化されていますか?
- VLESS 自体には暗号化の仕組みがありません。通信の暗号化は、その下にある TLS または REALITY に任せています。Xray の新しい VLESS Encryption を使えば独自の暗号化レイヤーを追加できますが、ほとんどのサーバは今も TLS か REALITY を使っています。
- xtls-rprx-vision とは何ですか?
- Vision フローのことで、追加のトランスポートを使わない TLS または REALITY 上の VLESS で使う設定です。プロキシ経由で開く TLS 接続の冒頭にパディングを加え、プロキシされた HTTPS 通信に現れる「TLS の中の TLS」のパターンを見分けにくくします。
- VLESS REALITY は検出されませんか?
- 検出されないプロトコルはありません。REALITY では未知の訪問者に実在のウェブサイトが見えるため、プローブによってサーバを特定するのはかなり難しくなります。ただし、通信の分析や、借用したサイトのものではない IP アドレスといったほかの手がかりから見抜かれる可能性は残ります。
- iPhone で VLESS REALITY は使えますか?
- 使えます。REALITY に対応したクライアントアプリが必要です。iPhone・iPad 向けの無料プロキシクライアント Potatso は、REALITY と Vision を含む vless:// リンクを読み込み、Xray と sing-box のサーバに接続できます。