VLESS と Reality を一言で言うと

VLESS は、認証情報を最小限に保ちつつ転送路を柔軟に設計できるプロキシ向けプロトコルです。Reality は、その TLS レイヤにおいて「どのサイト宛の TLS に見えるか」を工夫するための仕組みで、実在するウェブサイトが公開している TLS の特徴(いわゆるフィンガープリントや証明書チェーンの見え方)を参照しながら、クライアントとサーバーだけが共有する鍵で真正性を確認します。

従来、独自ドメインの証明書を毎回用意して公開する方式と比べ、運用上の選択肢が増える点が知られています。もちろん「強い」と言われる構成でも、ネットワーク環境・検知手法・アップデートのタイミングによって体感は変わります。本記事は、仕様を正しく理解し、Mihomo(旧称 Clash Meta) など現行クライアントで安全に設定を読み書きするための入門として読んでください。関連記事は 技術ブログの一覧 から辿れます。

Reality が TLS で行っていること(ざっくり)

HTTPS では、ブラウザとサーバーが暗号化の前提を握るために TLS ハンドシェイクを行います。ここで使われる証明書や暗号スイート、拡張フィールドの組み合わせは、通信の「外から見た特徴」になり得ます。Reality は、この外観を特定の実サイトに寄せることを狙いとしつつ、実際のプロキシ通信の認証は別経路(たとえば X25519 の公開鍵と short-id)で行います。

クライアント側では、参照先として選ばれたホスト名を servername(SNI)として送り、サーバーはそれに整合するように応答を組み立てます。誤った servername や古い public-key を入れると、ハンドシェイクは途中で失敗し、GUI 上では「タイムアウト」「証明書エラー」など分かりにくい症状に化けることがあります。

XTLS と flow(Vision)について

多くの VLESS + Reality 構成では、転送効率のために flow: xtls-rprx-vision(XTLS Vision)が用いられます。これは TLS の内側で余計な再暗号化を避ける思想に基づくオプションで、クライアント・サーバー双方が同じ解釈で有効化されている必要があります。片側だけ古い設定や非対応ビルドだと、接続直後に切断されることがあります。

用語メモ:クライアントの YAML では servername が SNI に相当します。reality-opts 以下の public-key はサーバーから配布される値で、クライアントはこれでサーバー側の秘密情報と整合するかを確認します。

始める前に確認したいこと

1. クライアントコアの世代

Reality や Vision を安定して扱うには、内蔵コアが新しめの Mihomo であることが望ましいです。GUI を使う場合も、表向きのバージョンだけでなくコアの版を確認してください。当サイトの クライアント公式ダウンロードページ では、主要 OS 向けに検証された組み合わせをまとめています。

2. ノード情報の受け渡し形式

商用・自宅サーバー問わず、提供者が uuidpublic-keyshort-idservername、ポート番号を揃えて渡してくれるのが一般的です。一部だけ欠けていると、同じサーバーでもクライアント側で再現できません。メモする際はコピーミス(余分な空白や改行)に注意してください。

3. DNS とルールの前提

プロキシが生きていても、ローカル DNS が意図せず漏洩したり、国内直叩きのドメインだけ異常に遅くなったりするケースがあります。Reality 以前に、dns セクションと rules の優先順位を整えておくと、トラブル時の切り分けが容易です。

Mihomo(Clash Meta)での設定例

以下は config.yamlproxies に追加する最小例です。値はすべてダミーなので、実運用では提供者の情報に置き換えてください。

proxies:
  - name: "VLESS-Reality-Example"
    type: vless
    server: node.example.com
    port: 443
    uuid: "00000000-0000-0000-0000-000000000000"
    network: tcp
    tls: true
    udp: true
    flow: xtls-rprx-vision
    servername: www.microsoft.com
    client-fingerprint: chrome
    reality-opts:
      public-key: "Base64EncodedPublicKeyHere"
      short-id: "0123456789abcdef"

client-fingerprint は、クライアントが提示する TLS クライアントハロの特徴を指定するオプションで、環境によっては接続成功率に影響します。利用できる値はクライアントの版によって異なるため、公式ドキュメントやリリースノートをあわせて確認してください。

プロキシグループへ追加する例:

proxy-groups:
  - name: "PROXY"
    type: select
    proxies:
      - VLESS-Reality-Example
      - DIRECT

rules:
  - MATCH,PROXY

実際の運用では、地域やサービスごとに rules を細かく分けたほうが快適です。ルール設計の考え方は、他の記事で扱っている Rule Providers や geosite 連携と組み合わせると拡張しやすくなります。

パラメータの読み方(つまずきポイント)

  • serverport:接続先 IP またはホスト名。CDN 前段のある構成では、DNS 解決結果が意図とズレると即タイムアウトになります。
  • uuid:ユーザー識別子。形式が壊れていると認証前に弾かれます。
  • servername:Reality が参照する「表向きのホスト名」。サーバー側設定と一致していないと TLS が成立しません。
  • reality-opts.public-key:X25519 公開鍵。ローテーション後に古い鍵を握っていると、一切つながらなくなります。
  • reality-opts.short-id:短い識別子。複数値が運用されている環境では、許可リストに含まれる値を選ぶ必要があります。
  • flow:Vision を使うかどうか。サーバーが別の flow を要求している場合は合わせて変更します。
注意:第三者が管理する公開サイトの名前や TLS プロファイルを無断で真似る行為は、相手サイトのポリシーや法令に抵触する可能性があります。サーバー構成は必ず正当な権限と利用規約の範囲で行ってください。

よくある症状と切り分け

ハンドシェイクは成功するがすぐ切断される

flow の不一致、Vision 非対応の片側、もしくはアプリケーション側の ALPN 期待値のズレが疑われます。まずクライアントとサーバーの実装・バージョンを揃えるのが近道です。

遅延テストだけ異常に高い

プロキシ自体ではなく、DNS のフォールバックやルールの迂回ループが原因のことがあります。dnsenhanced-modefake-ip 周りを見直し、対象ドメインが意図したプロキシグループに流れているか確認してください。

特定アプリだけ通らない

OS のプロキシ非対応アプリは TUN モードが必要です。tun セクションの権限(管理者権限など)と、競合する VPN やフィルタの有無を確認します。

セキュリティとコンプライアンスの観点

プロトコルの選択は、プライバシー保護や研究目的の通信暗号化にも使えますが、適用先の法律・契約・組織ポリシーを必ず順守してください。学校や職場のネットワーク、国際回線の利用条件などは地域差が大きく、本記事は技術説明であり法的助言ではありません。

オープンソースの所在やライセンスを確認したい場合は、Mihomo の GitHub リポジトリ など一次情報を参照するとよいでしょう。実行ファイルの入手とインストール手順の主導線は、引き続き当サイトのダウンロードページにまとめています。

まとめ:クライアント選びで体感が変わる理由

VLESS + Reality はパラメータの組み合わせが多く、一行の typo でも症状が曖昧になりがちです。仕組みを段階的に理解し、ログと遅延テストを併用すると、原因箇所に早く辿り着けます。

同じノード情報でも、GUI の検証状況・同梱コアの新しさ・DNS プリセットの違いで、安定性や設定のしやすさは変わります。細かい YAML を毎回手編集する負担を減らしつつ、新プロトコルへ追従しやすいクライアントを選ぶと運用が楽になります。当サイトで配布しているパッケージは、そのような「日常利用で詰まりやすい点」を減らす方向で整えています。他ツールと比べても、ルールと DNS を一つの設定空間で扱える点は Clash 系の強みです。

環境に合わせてクライアントを入れ替え、実測で比較してみる価値は大きいでしょう。→ Clash を無料ダウンロードして、Mihomo 世代の設定体験を試す