Android版のv2rayNGでVLESS Realityを使う場合、入力欄を埋めるだけでは接続できません。VLESSのユーザーID、接続先ポート、Realityの公開鍵、Short ID、サーバー名、フィンガープリントなど、サーバー側で発行された値を正確に対応させる必要があります。1文字の違い、余分な空白、UUIDの欠落、TCPと別のトランスポートの選択だけでも、ノードは一覧に表示されているのに通信できない状態になります。
この記事では、v2rayNGの画面でVLESS Realityを手動登録する流れを、Android端末で確認しやすい順番に整理します。共有リンクやサブスクリプションからインポートする場合にも、最終的にどの項目へ変換されるのかを理解しておくと、接続できないときの修正箇所を特定しやすくなります。対象はXray系の一般的なVLESS、Reality、TCP構成です。配布元が指定する値と異なる場合は、配布元の設定を優先してください。
v2rayNGでVLESS Realityを設定するために必要な項目を、サーバー情報の確認、Android画面への入力、接続テスト、ログ確認の順番で説明します。UUIDとReality関連の値を混同せず、設定後にどの結果なら次の切り分けへ進めるかまで確認できます。
設定前にサーバー情報を項目ごとに確認する
最初に確認するのは、契約先または管理者から受け取ったVLESS Realityの設定情報です。共有リンクがある場合は、リンクをそのまま眺めるより、v2rayNGへ読み込んだ後に各項目を開いて確認するほうが分かりやすいことがあります。リンクの形式は、通常vless://で始まり、ユーザーID、ホスト名、ポート、クエリ形式の通信設定、最後に表示名が続きます。ただし、配布元が独自の購読形式を使用している場合は、手動で文字列を編集せず、まず正式なインポート方法を使ってください。
VLESSのUUIDは認証に使うユーザー識別子です。大文字と小文字の扱いだけでなく、ハイフンの位置、先頭末尾の空白、途中で改行されていないかを確認します。アドレスはサーバーのホスト名またはIPアドレス、ポートはサーバーが待ち受けている番号です。Realityでは443がよく使われますが、443であること自体が必須ではありません。配布されたポートを別の番号へ置き換えると、ネットワークから到達できても正しいサービスへ届かない場合があります。
Reality関連では、公開鍵、Short ID、Server Name、フィンガープリント、場合によってはFlowを確認します。公開鍵はクライアントがサーバーのReality設定を検証するための値で、秘密鍵ではありません。Short IDはサーバー側で許可された識別子の一つと一致する必要があります。Server NameはTLSのSNIに相当し、対象サーバーが想定する名前を入力します。実際に接続するノードのアドレスと同じとは限らないため、ホスト名を推測して変更しないでください。
VLESS基本情報
- アドレス
- サーバーのホスト名またはIP
- ポート
- 配布元が指定した番号
- ユーザーID
- UUIDを完全一致で入力
- 暗号化
- 通常はnone
VLESSの認証と接続先を決める項目です。
Reality関連情報
- Security
- reality
- 公開鍵
- サーバーから配布された値
- Short ID
- 許可された16進数の識別子
- Server Name
- サーバー指定のSNI
- 指紋
- 一般的には chrome
値を推測せず、発行元の情報と照合します。
v2rayNGの画面でVLESS Realityを登録する
v2rayNGを開き、右上またはメニュー内の追加操作から新しい設定を作成します。バージョンやAndroidの画面幅によってボタンの位置や表示名は多少異なりますが、「設定を追加」「手動設定」「VLESS」といった入口を選びます。購読から読み込んだノードを修正する場合は、対象ノードを長押しして編集を開きます。購読管理下のノードは次回更新で上書きされる可能性があるため、継続利用する設定を配布元側で修正できるかも確認してください。
追加画面を開く
v2rayNGのメイン画面で追加ボタンを選び、手動設定の一覧から「VLESS」を開きます。共有リンクがある場合は、先にインポートしてから対象ノードの編集画面を確認しても構いません。
基本項目を入力
アドレス、ポート、ユーザーIDを入力します。暗号化は配布元の指定を確認し、一般的なVLESS Reality構成では
noneを使用します。不要な空白を入れないでください。TCPを選択
ネットワークまたはトランスポートの項目で、サーバーが指定した方式を選択します。標準的なReality構成ではTCPですが、WebSocketなどを指定されている場合はその値を優先します。
Realityを設定
Securityで
realityを選び、公開鍵、Short ID、Server Nameを対応する欄へ入力します。Short IDを公開鍵欄へ入れるなど、似た長さの文字列の取り違えに注意します。保存して接続
フィンガープリントを指定し、必要な場合だけFlowを設定して保存します。メイン画面でノードを選択し、接続を開始した後、AndroidのVPN接続要求を許可します。
入力画面に「アプリケーション層プロトコル」「ヘッダー」「パス」などの項目が表示されても、サーバー情報に指定がない場合は勝手に追加しません。RealityとWebSocketは別の設定要素です。Realityを使うからといってWebSocketのパスを作る必要はなく、TCP構成にWebSocketの値を追加しても有効にはなりません。
Flowが指定されている場合は、その値を正確に入力します。VLESS Realityではxtls-rprx-visionが使われる構成がありますが、サーバー側がFlowなしで動作する設定なら、クライアント側で無理に追加しないでください。Flowは単なる表示項目ではなく、TLS処理や通信方式の期待値に関わるため、サーバーとクライアントの不一致がハンドシェイク失敗につながります。
接続後にAndroid側の状態を確認する
設定を保存したら、すぐに複数の項目を変更せず、まず一度だけ接続を実行します。v2rayNGがVPN接続の許可を求めた場合は、内容を確認して許可します。接続中の表示になっても、それだけでWeb通信がプロキシを通っているとは限りません。通知領域のVPN表示、v2rayNGの接続状態、コアログ、実際のブラウザー通信を順番に確認してください。
最初のテストでは、アクセス先を一つに固定します。ブラウザーで通常のHTTPSサイトを開き、読み込みが完了するか、短時間で接続が切れないかを確認します。特定のアプリだけ通信できない場合は、ノード設定ではなくAndroidのアプリごとのVPN設定、バッテリー最適化、バックグラウンド制限、分割トンネル設定を確認します。全アプリで通信できない場合は、まずRealityのハンドシェイクとコアの起動状態を優先します。
判断の目安:接続表示よりログと実通信を優先する
v2rayNGがVPNを開始できたことは、Android側でVPNインターフェースが作成されたことを示すだけです。VLESSの認証、Realityの検証、リモートポートへの到達、DNS処理がすべて成功した証拠ではありません。接続表示、ログ、実際のページ表示を同時に確認してください。
| 確認結果 | 考えられる層 | 次に見る項目 |
|---|---|---|
| VPN許可画面まで進まない | Androidまたはアプリ状態 | 他のVPN、権限、アプリのバックグラウンド制限 |
| VPNは開始するが接続ログが失敗 | VLESSまたはReality | UUID、公開鍵、Short ID、Server Name、Flow |
| 接続は成功するがサイトが開かない | DNSまたはルーティング | VPNモード、DNS設定、分割トンネル、IPv4/IPv6 |
| 一部アプリだけ失敗する | アプリ別の除外設定 | バッテリー制限、対象アプリのVPN経路、UDP対応 |
接続できないときにログで原因を絞り込む
v2rayNGのメニューからログまたは実行ログを開き、接続を試した時刻の周辺を確認します。ログ全体を保存するより、最初に出たエラーと、その直前に記録された接続先を確認するほうが効率的です。同じエラーが大量に繰り返されている場合は、アプリを停止してから設定を1項目だけ修正し、再度接続します。複数の値を同時に書き換えると、正しい原因が分からなくなります。
「failed to dial」や接続タイムアウトになる?
アドレスとポートを確認し、別のネットワークでも同じ結果になるかを調べます。DNSでホスト名を解決できない場合は、まず名前解決を確認し、ポートが違う場合は配布元の値へ戻します。
「reality handshake」関連のエラーが出る?
Securityがrealityになっているか、公開鍵、Short ID、Server Name、フィンガープリントを1文字ずつ照合します。特にServer Nameを接続先アドレスへ置き換えないでください。
「invalid user」と表示される?
UUIDの欠落、ハイフンの誤り、別ノードのUUIDを入力していないかを確認します。購読更新後に古いノードを選択している場合もあるため、最新グループから選び直します。
接続後もブラウザーが開かない?
v2rayNGのVPNが有効か、Androidの他のVPNが同時に動いていないかを確認します。その後、DNSモード、分割トンネル、対象アプリの除外設定を一つずつ確認します。
failed to dial
context deadline exceeded
invalid user
reality handshake failed
tls: handshake failure
failed to resolve destination
context deadline exceededは、指定時間内に処理が完了しなかったことを示します。ポート到達性、ネットワーク制限、アドレスの誤り、サーバー停止など複数の可能性があるため、これだけでUUIDの誤りと断定しません。invalid userは認証情報の不一致を、reality handshake failedはReality関連の値やサーバー側設定の不一致を優先して疑います。failed to resolve destinationでは、DNSモードやルーティング先、ドメイン解決経路を確認します。
修正の順番は、アドレスとポート、UUID、Securityとトランスポート、公開鍵、Short ID、Server Name、フィンガープリント、Flowの順が扱いやすいでしょう。サーバーが停止している場合は、正しい入力でも接続できません。別のノード、別のネットワーク、または配布元の稼働情報と比較し、端末側だけを繰り返し変更しないことが重要です。ログを共有して問い合わせる場合は、UUID、購読URL、個人を識別できる表示名を伏せてください。