v2rayを使う前に知っておきたい設定のすべて
インターネット上のプライバシー、セキュリティ、あるいは特定の情報へのアクセスを確保する手段として、プロキシやVPNといった技術は広く利用されています。その中でも、近年特に注目を集めているのが「v2ray」です。しかし、v2rayはその多機能性と柔軟性の高さゆえに、設定が複雑であるという側面も持っています。
この記事では、v2rayを安全かつ効率的に利用するために、ユーザーが知っておくべき設定のすべてを、初心者にも分かりやすいように詳細に解説します。約5000語にわたるこの解説を通じて、v2rayの基本的な概念から応用的な設定、さらにはセキュリティやパフォーマンスに関する考慮事項まで、網羅的に理解することを目的とします。
1. はじめに:v2rayとは何か、なぜv2rayなのか
1.1. v2ray (Project V) の概要
v2rayは、公式には「Project V」と呼ばれるプロジェクトの一部であり、ネットワークプロトコルを扱うためのツールキットです。その中心的なコンポーネントであるv2rayは、様々なプロトコル(VMess, VLESS, Trojan, Shadowsocks, Socks, HTTPなど)をサポートし、これらのプロトコルを介して送受信されるデータを柔軟に処理することができます。
一般的なVPNやプロキシツールと比較して、v2rayは以下のような特徴を持ちます。
- 高度な設定可能性: 設定ファイル(JSON形式)を通じて、非常にきめ細やかな設定が可能です。入出力プロトコル、ルーティング規則、トランスポート層の設定などを自由に組み合わせられます。
- 多様なプロトコル: VMessやVLESSといった独自プロトコルに加え、TrojanやShadowsocksなど、広く利用されているプロトコルもサポートしています。これにより、様々なネットワーク環境や規制に対応できます。
- 強力な難読化機能: WebSocketやHTTP/2 over TLSといった一般的な通信手段に偽装したり、TLSのフィンガープリントを操作したりすることで、通信内容が傍受・ブロックされるリスクを低減できます。
- 柔軟なルーティング: 送信元、宛先ドメイン/IP、ポート、プロトコルなどに基づいて、接続を特定のサーバーに転送したり、直接接続したり、拒否したりといった詳細なルーティング規則を設定できます。
- TLSの統合: プロトコルやトランスポート層の設定において、TLS (Transport Layer Security) を容易に統合できます。これにより、通信の暗号化と認証が強化され、セキュリティとプライバシーが向上します。
1.2. なぜv2rayが人気なのか
v2rayが多くのユーザーに選ばれている理由は、その検閲耐性の高さと柔軟性にあります。特にインターネット規制が厳しい環境では、従来のVPNプロトコルが容易に検出・ブロックされることがあります。v2rayは、通信を一般的なWebトラフィックに偽装する機能や、多様なプロトコルを選択できる柔軟性によって、このような規制を回避するための強力なツールとなり得ます。
また、クライアントとサーバーの両方を自分で設定できるため、完全に制御された安全な通信環境を構築できる点も魅力です。
1.3. この記事の目的と対象読者
この記事の目的は、v2rayの設定に関する全体像を示し、ユーザーが自身のニーズに合わせて安全かつ効率的にv2rayを利用できるようになるための知識を提供することです。
対象読者は、以下のような方々です。
- v2rayに興味があるが、設定が複雑でどこから手を付けて良いか分からない初心者。
- v2rayを既に使っているが、設定の意味をより深く理解し、カスタマイズしたいと考えているユーザー。
- セキュリティやプライバシーを重視し、v2rayの高度な機能を活用したいユーザー。
この記事を読むことで、v2rayの設定ファイル構造、主要な設定項目、各プロトコルやトランスポート層の詳細、セキュリティ上の注意点などを理解し、自信を持ってv2rayを使い始めることができるようになるでしょう。
2. v2rayの基本的なアーキテクチャ
v2rayは、いくつかの主要なコンポーネントから成り立っています。これらのコンポーネントがどのように連携して動作するのかを理解することは、設定を理解する上で非常に重要です。
2.1. Core (V2Ray)
Project Vの中核となる実行ファイルであり、ネットワーク接続の処理、プロトコルの解析、データの送受信、ルーティング判断などを担当します。設定ファイルはこのCoreに読み込まれてv2rayの動作を決定します。
2.2. Inbound (インバウンド)
インバウンドは、v2rayが外部からの接続を受け付けるための設定です。どのポートで待ち受けるか、どのようなプロトコル(Socks, HTTP, VMess, VLESSなど)で接続を受け付けるか、といった情報を定義します。クライアント側でv2rayをローカルプロキシとして使用する場合、SocksやHTTPインバウンドを設定することが一般的です。サーバー側では、リモートからの接続を受け付けるためのプロトコル(VMess, VLESS, Trojanなど)のインバウンドを設定します。
2.3. Outbound (アウトバウンド)
アウトバウンドは、v2rayが外部へ接続を確立するための設定です。受信したデータをどのようなプロトコルで、どのサーバー(アドレスとポート)へ送信するかを定義します。クライアント側では、リモートのv2rayサーバーへ接続するためのプロトコル(VMess, VLESS, Trojanなど)のアウトバウンドを設定します。サーバー側では、最終的な宛先(インターネット上のウェブサイトなど)へ接続するためのアウトバウンドを設定します。通常、これは「Freedom」プロトコル(直接接続)になります。また、接続を破棄するための「Blackhole」プロトコルもアウトバウンドとして定義されます。
2.4. Routing (ルーティング)
ルーティングは、インバウンドで受け付けた接続をどのアウトバウンドへ転送するかを決定する機能です。宛先のドメイン、IPアドレス、ポート、送信元、使用されたインバウンドタグなど、様々な条件に基づいて転送先のアウトバウンド(またはブロック、直接接続)を指定します。ルーティングはv2rayの強力な機能の一つであり、特定の通信だけをプロキシ経由にしたり、国内サイトは直接接続したりといった、柔軟な制御を可能にします。
2.5. Transport (トランスポート)
トランスポートは、データの物理的な転送方法を定義します。TCP、UDP、mKCP、WebSocket、HTTP/2、QUICなど、様々なトランスポートがサポートされています。これらのトランスポート設定は、インバウンドまたはアウトバウンドのstreamSettings
フィールド内で参照されます。特にWebSocketやHTTP/2は、一般的なWebトラフィックに偽装するために利用され、検閲回避に役立ちます。TLSと組み合わせることで、通信の安全性をさらに高めることができます。
2.6. Proxy Protocol (プロキシプロトコル)
インバウンドやアウトバウンドで指定されるプロトコル(VMess, VLESS, Trojan, Socks, HTTP, Freedom, Blackholeなど)のことです。これらはCoreがデータをどのようにカプセル化/デカプセル化し、処理するかを定義します。VMessやVLESSはv2ray独自のプロトコルであり、TrojanはTLS上に構築されたプロトコルです。SocksやHTTPは一般的なプロキシプロトコルです。
2.7. データフローの概要
v2rayの基本的なデータフローは以下のようになります。
- 外部からの接続が、設定されたInboundのポートに到達します。
- Inboundは設定されたプロトコル(Socks, HTTP, VMessなど)でデータを受信し、v2ray内部の形式に変換します。
- 受信した接続情報はRouting機能に渡されます。
- Routingは、設定されたルーティング規則に基づいて、この接続をどのアウトバウンドで処理すべきかを判断します。
- 指定されたOutboundが選択されます。
- Outboundは、設定されたプロトコル(VMess, VLESS, Freedomなど)とトランスポート(TCP, WS+TLSなど)を使用して、データを外部の宛先サーバーへ送信します。
- 外部サーバーからの応答データは、逆の経路をたどって元の接続元へ返されます。
このように、v2rayはInbound、Routing、Outboundの各コンポーネントが連携し、設定に基づいてデータの流れを制御しています。
3. v2ray設定ファイルの構造
v2rayの設定は、JSON形式のファイルで行います。このファイルには、v2rayの動作を定義する様々なセクションが含まれています。ここでは、主要なセクションとその役割を解説します。
設定ファイルのパスは通常、/usr/local/etc/v2ray/config.json
など、インストール方法によって異なります。
基本的な設定ファイルの構造は以下のようになります。
json
{
"log": { ... },
"api": { ... }, // オプション
"dns": { ... },
"routing": { ... },
"policy": { ... }, // オプション
"inbounds": [ ... ],
"outbounds": [ ... ],
"transport": { ... }, // オプション (streamSettingsで参照される詳細設定)
"stats": { ... }, // オプション
"reverse": { ... } // オプション
}
以下に各セクションの概要を説明します。
log
: ログの出力レベルやパスを設定します。トラブルシューティングに役立ちます。api
: 外部からv2rayの統計情報取得や設定変更を行うためのAPI設定(高度な機能)。dns
: ドメイン名をIPアドレスに解決するためのDNSサーバーを設定します。routing
: 受信した接続をどのアウトバウンドに転送するかを決定するルーティング規則を設定します。必須かつ最も重要なセクションの一つです。policy
: ユーザーや接続の状態に基づいた様々な制限(アイドルタイムアウト、バッファサイズなど)を設定します。inbounds
: v2rayが外部からの接続を受け付けるための設定リストです。複数設定できます。outbounds
: v2rayが外部へ接続を確立するための設定リストです。複数設定できます。最低でもFreedom
とBlackhole
のアウトバウンドが必要です。transport
: v2rayが使用するトランスポート層の詳細設定をまとめて定義します。インバウンドやアウトバウンドのstreamSettings
から参照できます。stats
: 統計情報を有効にする設定です。APIセクションと組み合わせて利用します。reverse
: リバースプロキシ機能の設定(高度な機能)。
ほとんどのユースケースでは、dns
, routing
, inbounds
, outbounds
の各セクションが中心となります。
4. 必須となる主要な設定項目
ここでは、v2rayの設定で最も頻繁に利用され、理解が必須となる主要なセクションであるinbounds
, outbounds
, routing
, そしてdns
について詳しく解説します。
4.1. Inbounds (受信設定)
inbounds
は配列になっており、複数の受信設定を記述できます。各要素は一つのインバウンド設定オブジェクトです。
json
"inbounds": [
{
"port": 1080, // 待ち受けポート番号
"listen": "127.0.0.1", // 待ち受けIPアドレス (省略時は全インターフェース)
"protocol": "socks", // 使用するプロトコル (socks, http, vmess, vlessなど)
"settings": { ... }, // プロトコル固有の設定
"streamSettings": { ... }, // トランスポート層の設定
"sniffing": { ... }, // TLS/HTTPスニッフィング設定 (オプション)
"tag": "socks-in" // このインバウンドを識別するためのタグ (ルーティングで使用)
},
// 他のインバウンド設定...
]
port
: v2rayが接続を待ち受けるポート番号。listen
: 接続を待ち受けるIPアドレス。"127.0.0.1"
はローカルホストのみ、"0.0.0.0"
または省略は全てのインターフェースで待ち受けます。サーバーでは通常"0.0.0.0"
か省略ですが、クライアントでは"127.0.0.1"
が一般的です。protocol
: 使用する受信プロトコル。よく使われるのはsocks
,http
(ローカルプロキシとして)、vmess
,vless
,trojan
(リモートサーバーとして)などです。settings
: 選択したプロトコルに固有の設定です。例えば、SocksやHTTPの場合は認証情報、VMessやVLESSの場合はユーザー情報のリストなどを設定します。詳細はプロトコルの詳細設定セクションで後述します。streamSettings
: トランスポート層の設定です。TCP、WebSocket、HTTP/2、TLSなどの設定を行います。これも非常に重要で、後述します。sniffing
: クライアントが送信したパケットのTLSまたはHTTPヘッダーを検査し、実際の宛先ドメイン/IPを特定する機能です。SocksやHTTPプロキシ経由の通信で、クライアントが宛先IPしか指定しない場合などに便利です。デフォルトで有効にするのが推奨されます。
json
"sniffing": {
"enabled": true,
"destOverride": ["http", "tls"] // 検知した宛先情報を上書きする対象プロトコル
}tag
: このインバウンド設定を識別するための文字列タグです。ルーティング規則で、特定のインバウンドからの接続を区別するために使用します。例えば、ローカルのSocksプロキシからの通信と、別の用途からの通信を区別したい場合などに便利です。
4.2. Outbounds (送信設定)
outbounds
も配列になっており、複数の送信設定を記述できます。各要素は一つのアウトバウンド設定オブジェクトです。最低限、protocol: "freedom"
を持つタグ付きのアウトバウンドと、protocol: "blackhole"
を持つタグ付きのアウトバウンドが必要です。これらはルーティング規則でデフォルトの接続先やブロック先として利用されます。
json
"outbounds": [
{
"protocol": "vmess", // 使用するプロトコル (vmess, vless, trojan, freedom, blackholeなど)
"settings": { ... }, // プロトコル固有の設定
"streamSettings": { ... }, // トランスポート層の設定
"proxySettings": { ... }, // 別のプロキシを経由する場合の設定 (オプション)
"mux": { ... }, // Mux (多重化) 設定 (オプション)
"tag": "proxy" // このアウトバウンドを識別するためのタグ (ルーティングで使用)
},
{
"protocol": "freedom",
"tag": "direct" // 直接接続用
},
{
"protocol": "blackhole",
"tag": "blocked" // 接続拒否用
}
]
protocol
: 使用する送信プロトコル。vmess
,vless
,trojan
,shadowsocks
などがリモートサーバーへの接続に利用されます。freedom
は直接インターネットへ接続、blackhole
は接続を破棄します。settings
: 選択したプロトコルに固有の設定です。リモートサーバーのアドレス、ポート、ユーザー情報などを設定します。詳細はプロトコルの詳細設定セクションで後述します。streamSettings
: トランスポート層の設定です。インバウンドと同様に、TCP、WebSocket、HTTP/2、TLSなどの設定を行います。後述します。proxySettings
: このアウトバウンド自体を、さらに別のアウトバウンドを経由して接続する場合に設定します。アウトバウンドのチェインなどに使用します。mux
: 多重化設定です。複数のTCP接続を一つの基礎となるTCP接続にまとめることで、効率を高めることができます。VMessプロトコルなどで利用可能です。通常、"enabled": true
と設定します。
json
"mux": {
"enabled": true,
"concurrency": 8 // 同時接続数 (推奨値)
}tag
: このアウトバウンド設定を識別するための文字列タグです。ルーティング規則で、接続の転送先として指定するために使用します。一般的に、プロキシサーバーへの接続用には"proxy"
、直接接続用には"direct"
、ブロック用には"blocked"
といったタグが使われます。
4.3. Routing (ルーティング設定)
routing
セクションは、受信した接続をどのアウトバウンドに転送するかを決定するための規則を設定します。v2rayの柔軟性の要となる部分です。
json
"routing": {
"rules": [ // ルーティング規則のリスト
{
"type": "field", // ルールの種類 (field, adn, chinasites, chinaipなど)
"domain": [ // 宛先ドメインによる一致条件
"ext:routing/google.lst", // ファイルリスト参照
"regexp:\\.google\\.com$",
"google.com",
"google.co.jp"
],
"ip": [ // 宛先IPアドレスによる一致条件
"geoip:private", // プライベートIPアドレスを除外
"geoip:cn" // 中国国内のIPアドレスを除外 (chinaipリストを使用)
],
"port": "80,443", // 宛先ポートによる一致条件
"network": "tcp,udp", // ネットワークタイプによる一致条件
"source": [ ... ], // 送信元アドレスによる一致条件
"inboundTag": [ ... ], // 使用されたインバウンドタグによる一致条件
"protocol": [ ... ], // アプリケーションプロトコルによる一致条件 (tls, httpなど)
"outboundTag": "proxy" // 一致した場合に転送するアウトバウンドのタグ
},
// 他のルーティング規則...
],
"strategy": "rules", // ルーティング戦略 (rules: 規則リストを順番に評価)
"domainStrategy": "AsIs" // ドメイン解決戦略 (AsIs, UseIp, UseIp4, UseIp6など)
}
-
rules
: ルーティング規則のリストです。リストの先頭から順番に評価され、最初に一致した規則が適用されます。- 各規則オブジェクト内には、一致条件(
domain
,ip
,port
,network
,source
,inboundTag
,protocol
など)と、その条件に一致した場合の転送先(outboundTag
)を指定します。 outboundTag
: 接続を転送するアウトバウンドのタグを指定します。"proxy"
、"direct"
、"blocked"
などが使われます。type
: ルールの種類。"field"
は一般的な条件指定です。"adn"
はV2Ray Geositeフォーマットのドメインリストを参照します。"chinasites"
、"chinaip"
は組み込みまたは外部の中国関連ドメイン/IPリストを参照します。domain
: 宛先ドメイン名に基づく一致条件。完全一致、末尾一致 (.google.com
)、正規表現 (regexp:
)、GeoSiteリスト参照 (ext:
) などが指定できます。ip
: 宛先IPアドレスに基づく一致条件。CIDR形式 (192.168.1.0/24
)、IP範囲 (192.168.1.1-192.168.1.100
)、GeoIPリスト参照 (geoip:cn
,geoip:private
) などが指定できます。"geoip:private"
はローカルネットワークへの接続を識別するのに便利です。port
: 宛先ポート番号に基づく一致条件。単一ポート、ポート範囲 (1000-2000
)、カンマ区切りリスト (80,443,8080
) で指定できます。network
: ネットワークタイプ(tcp
またはudp
)に基づく一致条件。source
: 送信元IPアドレスに基づく一致条件(サーバー側で特定クライアントからの接続を区別したい場合などに使用)。inboundTag
: 接続を受け付けたインバウンドのタグに基づく一致条件。protocol
: アプリケーションプロトコルに基づく一致条件。tls
やhttp
などが指定可能です。sniffing
が有効な場合に利用できます。
- 各規則オブジェクト内には、一致条件(
-
strategy
: ルーティング規則を評価する戦略。通常"rules"
を指定します。これはrules
リストを上から順番に評価し、最初に一致した規則を採用することを意味します。 domainStrategy
: ドメイン名をIPアドレスに解決する際の戦略。"AsIs"
は元のドメイン名をそのままルーティングに利用し、"UseIp"
はドメイン名をIPアドレスに解決してからルーティングに利用します。後者はIPベースのルーティング規則と組み合わせる場合に便利ですが、DNSクエリが必要になります。
重要なルーティング規則の例:
- プライベートIPへの接続は直接: ローカルネットワークへの接続をプロキシしないようにするための必須設定。
json
{
"type": "field",
"ip": ["geoip:private"],
"outboundTag": "direct"
} - 特定ドメインはプロキシ経由: 例: Google関連サイトはプロキシする。
json
{
"type": "field",
"domain": [
"ext:routing/google.lst", // GeoSiteファイルを使用
"google.com",
"google.co.jp"
],
"outboundTag": "proxy"
} - 中国国内IPは直接接続: GeoIPリストを利用して中国国内IPへの接続をプロキシしないようにする(中国国外から中国国内サイトにアクセスする場合などに便利)。
json
{
"type": "field",
"ip": ["geoip:cn"],
"outboundTag": "direct"
} - その他すべての通信はデフォルトアウトバウンドへ: ルールリストの最後に記述します。
json
{
"type": "field",
"outboundTag": "proxy" // または必要に応じて "direct"
}
この最後のルールは、どの規則にも一致しなかった接続のデフォルトの転送先を決定します。通常はプロキシサーバーへのアウトバウンドを指定しますが、全ての通信を直接接続したい場合は"direct"
を指定し、特定のルールに一致するものだけをプロキシする、といった構成も可能です。
ルーティング規則はリストの上から順に評価されるため、より限定的な規則を先に記述する必要があります。例えば、「全ての通信はプロキシ経由」という規則を先に記述してしまうと、「プライベートIPは直接接続」という規則が評価される前に接続がプロキシされてしまいます。
4.4. DNS設定 (dns
)
v2rayがドメイン名をIPアドレスに解決する際に使用するDNSサーバーを設定します。
json
"dns": {
"servers": [
"1.1.1.1", // Cloudflare DNS (プライマリ)
{
"address": "8.8.8.8", // Google DNS (セカンダリ)
"domains": [ // 特定のドメインはこのサーバーを使用
"geosite:google"
],
"expectIPs": [ // このサーバーからの応答IPが期待されるドメインリスト
"geoip:us"
]
},
{
"address": "114.114.114.114", // 中国国内DNS
"domains": [
"geosite:cn"
]
},
"localhost" // システムのDNS設定を使用
],
"hosts": { // 静的なホスト名解決 (オプション)
"mydomain.com": "1.2.3.4"
},
"clientIp": "10.0.0.1", // クライアントのIPを指定 (EDNS Client Subnet用, オプション)
"disableCache": false // DNSキャッシュを無効にするか
}
servers
: 使用するDNSサーバーのリスト。- 文字列でIPアドレスを指定した場合、そのDNSサーバーがリスト順に使用されます。
- オブジェクトで指定した場合、
address
でサーバーを指定し、domains
でそのサーバーを使用するドメインのリストを指定できます。expectIPs
で、応答として期待されるIPアドレスの範囲を指定することも可能です。 "localhost"
を指定すると、システムのDNS設定が使用されます。
hosts
: 静的なホスト名解決リスト。指定されたドメイン名は、リストされたIPアドレスに直接解決され、外部DNSサーバーは使用されません。clientIp
: EDNS Client Subnet (ECS) を使用する場合に、クライアントのIPアドレスを指定します。これにより、DNSサーバーが応答をクライアントの地理的な位置に合わせて最適化できます。disableCache
: v2rayの内部DNSキャッシュを無効にするかどうか。通常は有効にしておくことでパフォーマンスが向上します。
適切なDNS設定は、ルーティングの精度やパフォーマンスに影響します。例えば、中国国内のサイトにアクセスする際に、中国国外のDNSサーバーを使用すると遅延が発生したり、誤ったIPアドレスが返される可能性があります。このような場合は、特定のドメインリスト(geosite:cn
など)に対して国内のDNSサーバーを使用するように設定すると良いでしょう。
5. プロトコルの詳細設定 (settings
)
inbounds
とoutbounds
の各設定内にあるsettings
フィールドは、使用するプロトコル固有の詳細設定を指定します。ここでは主要なプロトコルの設定を解説します。
5.1. VMess
v2ray独自のプロトコルです。UUIDとAlterIdによるユーザー認証、各種暗号化方式をサポートします。
Inbound (サーバー側):
json
"settings": {
"clients": [
{
"id": "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx", // UUID
"level": 0, // ユーザーレベル (policyで利用)
"alterId": 64 // AlterId
},
// 他のユーザー...
],
"defaultLevel": 0,
"disableInsecureEncryption": false // 安全でない暗号化を無効にするか
}
clients
: 許可するクライアントのリスト。各クライアントはid
(UUID) とalterId
を持ちます。UUIDは一意である必要があり、v2ray uuid
コマンドなどで生成できます。alterId
は、リプレイ攻撃を防ぐためのオフセットです。同じサーバーに複数のクライアントが接続する場合、alterId
は同じ値を使用します。推奨値は32または64です。streamSettings
でTLSを使用しない場合は0に設定します。disableInsecureEncryption
: 安全でない暗号化方式(none
,chacha20-poly1305
など)を無効にするか。セキュリティ向上のためtrue
が推奨されることもありますが、互換性の問題が発生する可能性があります。
Outbound (クライアント側):
json
"settings": {
"vnext": [
{
"address": "your_server_ip_or_domain", // サーバーアドレス
"port": 443, // サーバーポート
"users": [
{
"id": "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx", // サーバー側のUUIDと一致させる
"level": 0,
"alterId": 64, // サーバー側のAlterIdと一致させる
"security": "auto" // 使用する暗号化方式 (auto, aes-128-gcm, noneなど)
}
]
}
]
}
vnext
: 接続先サーバーのリスト。通常は一つのサーバーを指定します。address
: リモートv2rayサーバーのIPアドレスまたはドメイン名。port
: リモートv2rayサーバーのポート番号。users
: 接続に使用するユーザー情報。id
とalterId
はサーバー側の設定と完全に一致させる必要があります。security
は使用する暗号化方式を指定します。"auto"
はサーバーとクライアントの設定に基づいて最適なものを選択します。推奨は"aes-128-gcm"
または"chacha20-poly1305"
ですが、streamSettings
でTLSを使用する場合は、暗号化をTLSに任せるため"none"
または"auto"
(結果的にnoneになることが多い) でも問題ありません。
5.2. VLESS
VMessよりもシンプルで、特にXTLSとの連携に優れたプロトコルです。VMessのAlterIdのようなオフセットは使用しません。
Inbound (サーバー側):
json
"settings": {
"clients": [
{
"id": "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx", // UUID
"level": 0,
"flow": "xtls-rprx-origin" // XTLSフロー制御 (streamSettingsでTLSが有効な場合)
}
// 他のユーザー...
],
"decryption": "none", // 常にnone (VLESSはデータを暗号化しない)
"defaultLevel": 0
}
clients
: 許可するクライアントのリスト。id
(UUID) とlevel
を指定します。flow
はXTLSに関連する設定で、streamSettings
でTLSが有効な場合に使用します。よく使われる値に"xtls-rprx-origin"
や"xtls-rprx-direct"
があります。これらのフロー制御は、XTLSによるTLSレコードサイズの識別や、不必要な復号化/暗号化の回避に利用され、パフォーマンス向上や検閲耐性向上に寄与します。decryption
: VLESSプロトコル自体はデータを暗号化しないため、常に"none"
です。暗号化はTLSで行われます。
Outbound (クライアント側):
json
"settings": {
"vnext": [
{
"address": "your_server_ip_or_domain",
"port": 443,
"users": [
{
"id": "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx", // サーバー側のUUIDと一致させる
"level": 0,
"flow": "xtls-rprx-origin" // サーバー側のflowと一致させる
}
]
}
]
}
vnext
: 接続先サーバーリスト。address
,port
はVMessと同様です。users
: 接続に使用するユーザー情報。id
はサーバー側のUUIDと一致させます。flow
はサーバー側の設定と一致させる必要があります。
5.3. Trojan
TLS over TCP上に構築された軽量なプロトコルです。パスワードによる認証を行います。通信全体がTLSで暗号化されるため、別途TLS設定は必要ありません(streamSettings
でTLSを有効にする)。
Inbound (サーバー側):
json
"settings": {
"clients": [
{
"password": "your_secure_password", // パスワード
"level": 0,
"email": "[email protected]" // オプション
}
// 他のユーザー...
],
"fallbacks": [ // フォールバック設定 (TLSで指定ドメイン以外がアクセスした場合など)
{
"alpn": "h2", // 指定ALPNで一致
"path": "/ws", // 指定パスで一致 (WebSocketの場合)
"dest": 80 // 転送先ポート (例: 80番ポートのWebサーバー)
},
{
"dest": "www.example.com:80" // デフォルトのフォールバック (ドメイン指定)
}
]
}
clients
: 許可するクライアントのリスト。各クライアントはpassword
を持ちます。パスワードは強力なものを使用してください。fallbacks
: Trojanプロトコルは通常TLSポートで待ち受けますが、TLSハンドシェイク時にTrojanプロトコルとして識別されなかった接続を、別のポートやドメインに転送する設定です。例えば、同じポートでv2rayのTrojanとWebサーバーを共存させる場合などに利用できます。ALPNやパスに基づいて転送先を指定できます。
Outbound (クライアント側):
json
"settings": {
"servers": [
{
"address": "your_server_ip_or_domain",
"port": 443,
"password": "your_secure_password", // サーバー側のパスワードと一致させる
"level": 0
}
]
}
servers
: 接続先サーバーリスト。address
,port
はVMessと同様です。password
: サーバー側のパスワードと一致させます。
Trojanでは、クライアントとサーバーのstreamSettings
でTLSを有効にする必要があります。
5.4. Socks / HTTP
ローカルプロキシとしてv2rayを使用する場合によく設定されるインバウンドプロトコルです。
Inbound (クライアント側):
json
"settings": {
"auth": "noauth", // 認証方式 (noauth, password)
"accounts": [ // password認証の場合のユーザーリスト
{
"user": "myuser",
"pass": "mypassword"
}
],
"udp": true, // UDPプロキシを有効にするか
"timeout": 300 // タイムアウト (秒)
}
auth
: 認証方式。"noauth"
は認証なし(LAN内で使用する場合など)、"password"
はユーザー名/パスワード認証を要求します。accounts
:"password"
認証の場合に、許可するユーザーのリストを指定します。udp
: UDPプロキシを有効にするか。オンラインゲームなどでUDP通信が必要な場合にtrue
に設定します。timeout
: アイドル接続のタイムアウト時間。
Outbound (ルーティングによって使用される):
通常、SocksやHTTPプロキシはローカルインバウンドとして使用されることが主であり、アウトバウンドとして使用する場合は別のプロキシサーバーへ接続することになります。その場合の設定は複雑になるため、ここでは割愛します。
5.5. Freedom / Blackhole
これらは特定のアドレスへの接続ではなく、v2rayの内部的な動作を制御するためのプロトコルです。ルーティング規則の転送先(outboundTag
)として指定されます。
- Freedom: 指定された宛先IP/ドメインに直接接続します。
"protocol": "freedom"
のみで、追加のsettings
は通常必要ありません。ルーティングの"direct"
タグに紐付けられます。 - Blackhole: 指定された接続を破棄(切断)します。
"protocol": "blackhole"
のみで、追加のsettings
は通常必要ありません。ルーティングの"blocked"
タグに紐付けられます。不正なサイトや広告ドメインへのアクセスをブロックする際に利用できます。
6. トランスポート層の詳細設定 (streamSettings
)
inbounds
とoutbounds
の各設定にあるstreamSettings
フィールドは、TCPやUDPといった基盤となるトランスポート層、およびその上のWebSocketやHTTP/2、さらにはTLSによる暗号化を設定します。v2rayの検閲耐性やパフォーマンスに大きく影響するため、非常に重要な設定項目です。
json
"streamSettings": {
"network": "tcp", // 使用するネットワークタイプ (tcp, kcp, ws, http, quic, grpc)
"security": "none", // セキュリティ設定 (none, tls)
"tlsSettings": { ... }, // TLS設定 (securityがtlsの場合)
"tcpSettings": { ... }, // TCP設定 (networkがtcpの場合)
"kcpSettings": { ... }, // mKCP設定 (networkがkcpの場合)
"wsSettings": { ... }, // WebSocket設定 (networkがwsの場合)
"httpSettings": { ... }, // HTTP/2設定 (networkがhttpの場合)
"quicSettings": { ... }, // QUIC設定 (networkがquicの場合)
"grpcSettings": { ... }, // gRPC設定 (networkがgrpcの場合)
"sockopt": { ... } // ソケットオプション (TOS, マークなど)
}
network
: 使用するトランスポートプロトコルを指定します。security
: セキュリティ設定。"none"
または"tls"
を指定します。"tls"
を指定すると、TLSによる暗号化と認証が有効になります。特に理由がない限り、セキュリティ確保のために"tls"
を選択することを強く推奨します。- その他の
*Settings
フィールドは、network
で選択したトランスポートプロトコルの詳細設定を指定します。
以下に主要なトランスポートとTLS設定の詳細を解説します。
6.1. TCP
最も基本的なトランスポートです。streamSettings
で"network": "tcp"
を指定します。
TCP設定 (tcpSettings
):
json
"tcpSettings": {
"header": { // HTTP偽装
"type": "http",
"request": {
"method": "GET",
"path": ["/"],
"headers": {
"Host": ["www.example.com"]
}
},
"response": {
"version": "1.1",
"status": "200",
"reason": "OK",
"headers": {
"ContentType": ["application/octet-stream"],
"Connection": ["keep-alive"]
}
}
}
}
header
: TCPトラフィックをHTTPトラフィックに偽装するための設定です。これにより、ポートスキャンなどで単なるHTTPトラフィックに見せかけることができます。"type": "http"
を指定し、request
(クライアント側)とresponse
(サーバー側)のHTTPヘッダー情報を設定します。path
やheaders
は配列で複数指定できます。
6.2. WebSocket (WS)
TCPの上にWebSocketプロトコルを重ねて使用します。Webブラウザの通信として認識されやすいため、ファイアウォール回避に有効です。streamSettings
で"network": "ws"
を指定します。WebSocketは通常TLSと組み合わせて使用します ("security": "tls"
)。
WebSocket設定 (wsSettings
):
json
"wsSettings": {
"path": "/your_websocket_path", // パス
"headers": { // 追加ヘッダー
"Host": "your_domain.com" // Hostヘッダー (TLSと組み合わせる場合に重要)
}
}
path
: WebSocket接続のパスを指定します。サーバーとクライアントで一致させる必要があります。/
以外のパスを指定することで、より特定のサービスに見せかけることができます。headers
: 追加のHTTPヘッダーを指定します。TLSを使用する場合、Host
ヘッダーに接続先ドメイン名を指定することが重要です。これはTLSのSNI (Server Name Indication) とも関連します。
6.3. HTTP/2 (H2)
TCPの上にHTTP/2プロトコルを重ねて使用します。これも一般的なWebトラフィックに見せかけるのに有効です。streamSettings
で"network": "http"
を指定します。HTTP/2は常にTLSと組み合わせて使用する必要があります ("security": "tls"
)。
HTTP/2設定 (httpSettings
):
json
"httpSettings": {
"host": ["your_domain.com"], // Hostヘッダー (配列)
"path": "/your_h2_path" // パス
}
host
: Hostヘッダーの値を指定します。配列で複数指定できます。TLSのSNIと一致させる必要があります。path
: HTTP/2のパスを指定します。WebSocketと同様に、特定のサービスに見せかけるのに使用できます。
6.4. mKCP
UDPの上に実装された信頼性の高いトランスポートプロトコルです。TCPよりも低遅延・高効率を目指しており、ネットワーク状況が不安定な環境で有用な場合があります。streamSettings
で"network": "kcp"
を指定します。UDPベースのため、TLSではなく、独自の暗号化設定 (security
) や偽装ヘッダー設定 (header
) を行います。
mKCP設定 (kcpSettings
):
json
"kcpSettings": {
"mtu": 1350, // 最大転送ユニット
"tti": 50, // 転送時間間隔 (ミリ秒)
"uplinkCapacity": 5, // 上り帯域幅 (MB/s)
"downlinkCapacity": 100, // 下り帯域幅 (MB/s)
"congestion": false, // 輻輳制御を有効にするか
"readBufferSize": 1, // 読み込みバッファサイズ (MB)
"writeBufferSize": 1, // 書き込みバッファサイズ (MB)
"header": { // 偽装ヘッダー
"type": "srtp" // 偽装タイプ (none, srtp, utp, wechat-video, dtls, wireguard)
},
"security": "none", // mKCP独自の暗号化 (none, aes-128-gcm, chacha20-poly1305)
"seed": "random_string" // シード値 (セキュリティがnoneでない場合必須)
}
mtu
,tti
,uplinkCapacity
,downlinkCapacity
,congestion
,readBufferSize
,writeBufferSize
: mKCPのパフォーマンスパラメータです。ネットワーク環境に合わせて調整することでパフォーマンスが変わります。header
: mKCPパケットのヘッダーを特定のプロトコル(SRTP, uTP, WeChat Videoなど)に偽装します。security
: mKCPレベルでの暗号化を設定します。"none"
以外を指定する場合、seed
にランダムな文字列を指定する必要があります。TLSとは異なり、これはmKCPレイヤーでの暗号化です。
mKCPはTCPに比べて設定項目が多く、最適な値を見つけるのが難しい場合があります。
6.5. TLS
通信を暗号化し、認証を行うための設定です。streamSettings
で"security": "tls"
を指定し、詳細設定をtlsSettings
で行います。特にリモートサーバーとの通信では、セキュリティ確保のためにほぼ必須と言えます。
TLS設定 (tlsSettings
):
json
"tlsSettings": {
"serverName": "your_domain.com", // SNI (Server Name Indication)
"allowInsecure": false, // 不正な証明書を許可するか (非推奨)
"showCertificate": false, // 証明書情報を表示するか
"certificates": [ // サーバー側の証明書設定
{
"certificateFile": "/path/to/your/cert.pem", // 証明書ファイルパス
"keyFile": "/path/to/your/key.pem" // 秘密鍵ファイルパス
}
],
"disableSystemRoot": false, // システムのルート証明書ストアを使用しないか (クライアント側)
"pinnedPeerCertificateChain": [ ... ], // 証明書ピンニング (クライアント側)
"alpn": ["h2", "http/1.1"], // ALPN (Application-Layer Protocol Negotiation)
"rejectUnknownSni": false, // 不明なSNIを拒否するか (サーバー側)
"fingerprint": "chrome" // TLSクライアントフィンガープリント偽装 (クライアント側)
}
serverName
: SNIを指定します。TLSハンドシェイク時にサーバーへ送られるドメイン名です。クライアント側では、サーバー証明書の検証に使用されます。サーバー側では、同じポートで複数の証明書をホストする場合にクライアントがどの証明書を要求しているかを判断するために使用されます。Webサイトに偽装する場合、この値は偽装先のドメインと一致させる必要があります。allowInsecure
: サーバー証明書の検証エラーを無視するかどうか。セキュリティ上のリスクが非常に高いため、本番環境では絶対にfalse
にしてください。 テスト目的以外では使用しないべきです。certificates
: サーバー側でv2rayが使用する証明書と秘密鍵のパスを指定します。Let’s Encryptなどで取得した正規の証明書を使用することを強く推奨します。disableSystemRoot
: クライアント側で、システムのルート証明書ストアを使用せず、指定された証明書のみを信頼するかどうか。pinnedPeerCertificateChain
: クライアント側で、特定のサーバー証明書のハッシュなどを指定し、それ以外の証明書を受け付けないようにする証明書ピンニング設定。セキュリティをさらに高めます。alpn
: ALPNを指定します。HTTP/2 (h2
) やHTTP/1.1 (http/1.1
) などを指定できます。WebSocket over TLSの場合は通常http/1.1
を指定します。サーバーとクライアントで一致させる必要があります。rejectUnknownSni
: サーバー側で、設定されたserverName
以外のSNIを持つTLS接続を拒否するかどうか。不要な接続をブロックできます。fingerprint
: クライアント側で、TLSハンドシェイク時のClientHelloメッセージに含まれるフィンガープリントを、特定のブラウザ(chrome
,firefox
など)に偽装します。これにより、v2rayクライアントの通信が特定の種類のTLSクライアントとして識別されるのを防ぐ効果が期待できます。
6.6. XTLS (VLESS + TLS)
VLESSプロトコルとTLSを組み合わせた場合に利用できる特別な機能です。streamSettings
内のtlsSettings
にXTLS関連の設定が追加されます。
json
"tlsSettings": {
// ... (通常のTLS設定)
"settings": { // XTLS設定
"serverName": "your_domain.com",
"alpn": ["h2", "http/1.1"],
"rejectUnknownSni": false,
"fingerprint": "chrome" // クライアント側のみ
}
}
XTLSは、TLSプロトコルとVLESSプロトコルの特性を組み合わせ、データの復号化を一度だけで済ませることで、パフォーマンスを向上させたり、一部の検閲手法を回避したりする仕組みです。settings
内の項目は、通常のtlsSettings
の同じ名前の項目を上書きします。特にfingerprint
はクライアント側で重要です。サーバー側では、VLESSプロトコル設定のflow
フィールドと組み合わせて使用します ("flow": "xtls-rprx-origin"
など)。
XTLSを有効にするには、VLESSプロトコルを使用し、streamSettings
で"security": "tls"
を指定し、tlsSettings
内にsettings
フィールドを追加し、クライアントとサーバーで適切なflow
設定を行う必要があります。また、サーバー証明書はcertificates
フィールドで指定する必要があります(disableSystemRoot: true
と組み合わせることも)。
7. DNS設定 (dns
) の詳細
前述の通り、dns
セクションではドメイン名解決の動作を設定します。より詳細な設定について補足します。
7.1. DNSサーバーの指定
servers
リストでは、IPアドレス、またはIPアドレスとそれに紐づくドメイン/IPリストを指定できます。
json
"servers": [
"8.8.8.8:53", // ポートを指定することも可能
{
"address": "114.114.114.114",
"domains": [
"geosite:cn", // 中国国内サイトのドメインリスト
"baidu.com"
],
"expectIPs": [
"geoip:cn" // このサーバーからの応答が中国国内IPであると期待する場合
]
},
{
"address": "1.1.1.1",
"domains": [
"geosite:!cn" // 中国国外サイトのドメインリスト (geosite:cnの逆)
],
"expectIPs": [
"!geoip:cn", // このサーバーからの応答が中国国外IPであると期待する場合
"geoip:private" // プライベートIPも期待する場合
]
},
"localhost" // 最後のサーバーとしてシステムのDNSを使用
]
リストの上から順番に、domains
またはexpectIPs
の条件に一致するか、あるいは条件が指定されていない場合に、そのサーバーが使用されます。どのサーバーの条件にも一致しない場合は、条件が指定されていないサーバーがリスト順に使用されます。localhost
は通常、どの条件にも一致しない場合の最終フォールバックとしてリストの最後に置かれます。
7.2. GeoSite と GeoIP
v2rayは、ドメインリスト (geosite:
) やIPリスト (geoip:
) の外部ファイルをサポートしています。これらはv2rayのデータディレクトリ(通常/usr/local/share/v2ray/
)に配置されるgeoip.dat
やgeosite.dat
といったファイルに含まれており、特定の国や用途(広告、中国サイトなど)に関連するドメインやIPのリストを簡単に参照できます。
"geosite:cn"
: 中国国内の主要なドメインリスト"geosite:google"
: Google関連のドメインリスト"geosite:facebook"
: Facebook関連のドメインリスト"geosite:private"
: プライベートIPアドレスのリスト"geoip:cn"
: 中国国内のIPアドレスリスト"geoip:private"
: プライベートIPアドレスのリスト
これらのリストをDNS設定やルーティング規則で活用することで、きめ細やかな制御が可能になります。!
を前に付けることで、そのリストに含まれないもの、という意味になります ("geosite:!cn"
)。
8. セキュリティに関する重要な設定と注意点
v2rayは強力なツールですが、不適切な設定はセキュリティリスクを高める可能性があります。以下の点に特に注意してください。
- TLSの利用: リモートサーバーとの通信では、
streamSettings
で必ず"security": "tls"
を有効にしてください。これにより通信内容が暗号化され、傍受や改ざんを防ぐことができます。特にVMessやVLESSを使用する場合でも、TLSは必須と考えてください。 - 正規の証明書の取得と更新: サーバー側でTLSを使用する場合、Let’s Encryptのような無料サービスを利用して正規のドメイン証明書を取得し、それを使用することを強く推奨します。自己署名証明書はセキュリティ警告の原因となり、検閲の対象となりやすいため避けるべきです。証明書は定期的に更新する必要があります。
- 強力なUUID/Passwordの利用: VMessやVLESSのUUID、Trojanのパスワードは、推測されにくいランダムな文字列を使用してください。これらの情報は接続の認証に使用されるため、漏洩は第三者による不正利用につながります。
- AlterIdの役割 (VMess): AlterIdはVMessプロトコルにおけるリプレイ攻撃対策です。
streamSettings
でTLSを使用しない場合に必要ですが、TLSを使用する場合はTLS自体がリプレイ攻撃対策を提供するため、AlterIdは0でも問題ありません。ただし、一部のクライアント実装はAlterId=0に対応していない場合があります。VMessよりも新しいVLESSやTrojanプロトコルは、AlterIdのようなオフセットは使用しません。 - WebSocket / HTTP/2 + TLS: これらのトランスポートとTLSを組み合わせることで、通信が一般的なHTTPSトラフィックに見えるため、ファイアウォールによるプロトコル識別の回避に有効です。ただし、トラフィック量のパターンなど、他の要素で識別される可能性はあります。
- 偽装ヘッダー / パス: TCPのHTTP偽装、WebSocket/HTTP/2のパスやHostヘッダー設定、mKCPのヘッダー偽装は、通信内容をより「自然」に見せかけるための手段です。偽装先のドメインやパスは、実際に存在するサービスのものにすると、より効果が高い場合があります。
- SNI (Server Name Indication): TLSハンドシェイク時にクライアントがサーバーに伝える接続先ドメイン名です。検閲システムはしばしばこのSNIを監視しています。クライアント側では
tlsSettings
のserverName
を、プロキシしたい本来のドメイン名ではなく、別のドメイン名に偽装することも可能ですが、これは証明書の検証に影響を与える可能性があります。サーバー側では、指定されたserverName
以外のSNIを持つ接続を拒否する設定(rejectUnknownSni: true
)が有効な場合があります。 - TLSクライアントフィンガープリント偽装: クライアント側で
tlsSettings
のfingerprint
を設定することで、v2rayクライアントが特定のブラウザ(Chrome, Firefoxなど)のTLSスタックを使用しているように見せかけることができます。これにより、v2ray独自のTLSフィンガープリントによる識別を回避する効果が期待できます。XTLSを使用する場合に特に重要視される設定です。 - ルーティングの精度: 不適切なルーティング設定は、意図しない通信がプロキシされたり、逆にプロキシされるべき通信が直接接続されたりする「リーク」につながります。特に、プライベートIPアドレスへの接続は必ず
direct
アウトバウンドにルーティングするように設定してください ("geoip:private"
)。また、VPNやプロキシの通信自体が、そのルーティング規則によって他のアウトバウンドに転送されないように注意が必要です。 - ログの活用: v2rayのログ設定(
log
セクション)を適切に行い、定期的にログを確認してください。エラーメッセージは設定ミスや接続問題を特定する重要な手がかりになります。ただし、ログレベルをdebug
などに設定すると、通信内容の一部や機密情報がログに出力される可能性があるため、注意が必要です。通常はwarning
またはerror
レベルで十分です。 - APIと統計情報 (
api
,stats
): これらの機能はv2rayの監視や管理に役立ちますが、認証設定なしで有効にすると、外部からv2rayの状態を監視されたり、設定を変更されたりするリスクがあります。利用する場合は、適切な認証設定を行うか、信頼できるネットワーク内のみで利用してください。 - Policy設定 (
policy
): 接続のアイドルタイムアウトやバッファサイズなどを調整できます。これにより、リソースの効率的な利用やDoS攻撃への耐性を向上させることができます。 - ポートの選択: 標準的なポート(80, 443など)を使用すると、Webトラフィックに紛れ込みやすいため検閲回避に有利ですが、そのポートで他のサービス(Webサーバーなど)を同時に実行する場合は、設定(Trojanのfallbacksなど)に注意が必要です。非標準ポートは比較的ブロックされやすい傾向があります。
9. パフォーマンスに関する設定
設定はセキュリティだけでなく、パフォーマンスにも影響します。
- トランスポートの選択:
- TCP + TLS: 最も一般的で安定しています。HTTP/2やWebSocketと組み合わせることで、ある程度の検閲耐性も確保できます。
- mKCP: ネットワーク状況が不安定な場合や、低遅延が重要な場合に有効な可能性があります。ただし、UDPベースのため安定性に欠ける場合や、UDPトラフィック自体が制限される環境では不利になることがあります。
- WebSocket / HTTP/2 + TLS: 一般的なWebトラフィックに紛れ込みやすい反面、プロトコルのオーバーヘッドがTCP単体より大きくなる可能性があります。
- XTLS (VLESS + TLS): VMess + TLSと比較して、XTLSはデータの暗号化/復号化プロセスを最適化することで、特に高帯域幅環境でのパフォーマンス向上に寄与するとされています。互換性や設定の複雑さも考慮して選択します。
- Mux (多重化):
outbounds
のmux
設定を有効にすることで、複数のTCP接続を一つの基盤接続にまとめ、効率を高めたり接続数を減らしたりできます。特にクライアント側で多くの接続を行う場合に有効です。 - DNSキャッシュ (
dns
):disableCache: false
(デフォルト) にしておくことで、DNSクエリの結果がキャッシュされ、同じドメインへのアクセス時にDNS解決にかかる時間を短縮できます。 - バッファサイズ (
policy
): 読み書きバッファサイズを適切に設定することで、スループットに影響を与える可能性があります。ただし、メモリ使用量も増加するため、サーバーのリソースと相談して調整します。
パフォーマンス設定はネットワーク環境やサーバーのリソース、使用するプロトコルやトランスポートの組み合わせによって最適解が異なります。ベンチマークツールなどを利用して、様々な設定を試しながら調整するのが良いでしょう。
10. ローカルプロキシとしての設定例 (クライアント側)
一般的なクライアント側の設定は、ローカルのSocks/HTTPポートでv2rayを待ち受け、その接続をリモートのv2rayサーバーへ転送するという構成です。
json
{
"log": {
"loglevel": "warning" // 通常はwarningかerrorで十分
},
"dns": {
"servers": [
"1.1.1.1", // リモートDNSサーバー
"localhost" // システムのDNS
]
},
"routing": {
"rules": [
{ // プライベートIPは直接接続
"type": "field",
"ip": ["geoip:private"],
"outboundTag": "direct"
},
{ // 特定ドメイン/IPはブロック (例: 広告)
"type": "field",
"domain": ["geosite:ads"],
"outboundTag": "blocked"
},
{ // その他すべての通信はプロキシサーバーへ
"type": "field",
"outboundTag": "proxy"
}
]
},
"inbounds": [
{ // ローカルのSocksプロキシ
"port": 1080,
"listen": "127.0.0.1",
"protocol": "socks",
"settings": {
"auth": "noauth",
"udp": true // UDPプロキシを有効にする場合
},
"sniffing": {
"enabled": true,
"destOverride": ["http", "tls"]
},
"tag": "socks-in"
},
{ // ローカルのHTTPプロキシ (必要な場合)
"port": 8080,
"listen": "127.0.0.1",
"protocol": "http",
"settings": {
"auth": "noauth"
},
"sniffing": {
"enabled": true,
"destOverride": ["http", "tls"]
},
"tag": "http-in"
}
],
"outbounds": [
{ // リモートのv2rayサーバーへの接続 (例: VLESS+TLS+WS)
"protocol": "vless",
"settings": {
"vnext": [
{
"address": "your_server_domain.com",
"port": 443,
"users": [
{
"id": "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx" // サーバー側のUUID
}
]
}
]
},
"streamSettings": {
"network": "ws",
"security": "tls",
"tlsSettings": {
"serverName": "your_server_domain.com", // サーバー証明書のドメイン名
"allowInsecure": false,
"fingerprint": "chrome" // オプション: クライアントフィンガープリント偽装
},
"wsSettings": {
"path": "/your_websocket_path" // サーバー側と一致させる
}
},
"mux": {
"enabled": true,
"concurrency": 8
},
"tag": "proxy" // ルーティングで指定するタグ
},
{ // 直接接続用
"protocol": "freedom",
"tag": "direct"
},
{ // 接続拒否用
"protocol": "blackhole",
"tag": "blocked"
}
]
}
この設定では、ローカルの1080番ポート(Socks)および8080番ポート(HTTP)で待ち受け、これらのポートに来た通信のうち、プライベートIP以外、広告ドメイン以外を、リモートのv2rayサーバー(your_server_domain.com:443
)へVLESS+TLS+WebSocketで転送します。
11. リモートサーバーとしての設定例
リモートサーバーは、クライアントからのVMess/VLESS/Trojanなどの接続を受け付け、その通信をインターネット上の本来の宛先へ転送します。
json
{
"log": {
"loglevel": "warning",
"access": "/var/log/v2ray/access.log", // アクセスログの出力先
"error": "/var/log/v2ray/error.log" // エラーログの出力先
},
"dns": {
"servers": [
"114.114.114.114", // 国内DNS (オプション、中国国内ユーザー向けの場合)
"8.8.8.8", // 外部DNS
"1.1.1.1" // 外部DNS
]
},
"routing": {
"rules": [
{ // プライベートIPへの接続は直接接続
"type": "field",
"ip": ["geoip:private"],
"outboundTag": "direct"
},
{ // 中国国内IPへの接続は直接接続 (オプション、サーバーが海外にある場合)
"type": "field",
"ip": ["geoip:cn"],
"outboundTag": "direct"
},
{ // その他すべての通信はインターネットへ直接接続
"type": "field",
"outboundTag": "direct" // ここはdirectを指定
}
]
},
"inbounds": [
{ // クライアントからのVLESS+TLS+WS接続を受け付ける
"port": 443,
"protocol": "vless",
"settings": {
"clients": [
{
"id": "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx", // クライアントに配布するUUID
"level": 0
// "flow": "xtls-rprx-origin" // XTLSを有効にする場合
}
],
"decryption": "none"
},
"streamSettings": {
"network": "ws",
"security": "tls",
"tlsSettings": {
"certificates": [ // 証明書ファイルパス
{
"certificateFile": "/path/to/your/cert.pem",
"keyFile": "/path/to/your/key.pem"
}
],
"alpn": ["h2", "http/1.1"], // クライアントと一致させる
"rejectUnknownSni": false, // 不明なSNIを拒否するか (必要に応じてtrue)
"serverName": "your_server_domain.com" // 証明書のドメイン名
// XTLSを有効にする場合の追加設定
// "settings": {
// "serverName": "your_server_domain.com"
// }
},
"wsSettings": {
"path": "/your_websocket_path", // クライアントと一致させる
"headers": {
"Host": "your_server_domain.com" // 証明書のドメイン名
}
}
},
"tag": "vless-in" // クライアントからの接続を識別するタグ
}
// 他のプロトコル (VMess, Trojanなど) のインバウンドを追加することも可能
],
"outbounds": [
{ // 最終的な宛先 (インターネット) への直接接続
"protocol": "freedom",
"tag": "direct"
},
{ // ブロック用 (使用しないが必須)
"protocol": "blackhole",
"tag": "blocked"
}
]
}
サーバー側のルーティングは、クライアントからの接続(vless-in
タグのインバウンドから)を受け付けた後、特定のIP(プライベートIP、中国国内IPなど)は直接接続し、それ以外のすべての通信はインターネットへ直接転送する(direct
アウトバウンドを使用する)というシンプルな構成になります。
12. 実践的な手順とトラブルシューティング
12.1. v2rayのインストール
v2rayは様々な方法でインストールできます。公式サイト(Project V)のインストールスクリプトを使用するのが最も一般的です。
bash
bash <(curl -L https://raw.githubusercontent.com/v2fly/fhs-install-v2ray/master/install-release.sh)
これにより、v2rayバイナリと設定ファイルテンプレート、GeoIP/GeoSiteファイルなどが適切な場所にインストールされます。設定ファイルは通常/usr/local/etc/v2ray/config.json
に配置されます。
12.2. 設定ファイルの作成と編集
上記の例を参考に、テキストエディタでconfig.json
を作成または編集します。クライアント用とサーバー用で必要な設定が異なります。
12.3. 設定ファイルの文法チェック
設定ファイルを編集したら、v2rayバイナリを使って文法が正しいかチェックできます。
bash
/usr/local/bin/v2ray -test -config /usr/local/etc/v2ray/config.json
Configuration OK.
と表示されれば文法は正しいです。エラーが表示された場合は、JSONの構文エラーや設定項目名の誤りなどを修正してください。
12.4. v2rayサービスの起動と停止
システムにサービスとしてインストールされている場合、systemdなどのサービスマネージャーを使ってv2rayを起動/停止/再起動できます。
bash
sudo systemctl start v2ray # 起動
sudo systemctl stop v2ray # 停止
sudo systemctl restart v2ray # 再起動
sudo systemctl status v2ray # 状態確認
12.5. ログの確認
ログ設定で指定したパスにログファイルが出力されます。
bash
tail -f /var/log/v2ray/error.log
tail -f /var/log/v2ray/access.log # accessログを有効にした場合
ログはトラブルシューティングの最も重要な情報源です。エラーメッセージを注意深く確認してください。
12.6. クライアント側の設定
PCやスマートフォンでv2rayクライアントアプリ(V2RayN/V2RayW (Windows), Qv2ray/V2RayA (Linux/macOS), Kitsunebi/shadowrocket/v2rayNG/v2rayA (モバイル) など)を使用する場合、通常はリモートサーバーの情報をGUIで入力します。アプリによっては、v2rayのconfig.jsonを直接読み込めるものもあります。
12.7. トラブルシューティングのヒント
- ログを確認する: 何か問題が発生したら、まずv2rayのログ(特にエラーログ)を確認してください。
- 設定ファイルの文法チェック:
v2ray -test
コマンドでJSON構文と基本的な設定の整合性を確認します。 - ポートの確認: サーバー側で指定したポートがファイアウォールで開いているか確認してください。AWS/Google Cloudなどのクラウドサービスでは、セキュリティグループの設定が必要です。
- 証明書の確認 (TLS使用時): 証明書が有効期限切れでないか、ファイルパスが正しいか、ドメイン名が証明書に含まれているかを確認してください。SNI (
serverName
) が正しいドメイン名になっているか、クライアントとサーバーで一致しているかも重要です。 - UUID/Passwordの一致: VMess/VLESSのUUID、Trojanのパスワードが、クライアントとサーバーで完全に一致しているか確認してください。VMessの場合はAlterIdも一致が必要です。
- トランスポート設定の一致:
network
,security
,path
,host
,alpn
などのstreamSettings
内の設定が、クライアントとサーバーで一致しているか確認してください。 - ルーティングの確認: 意図した通信が正しいアウトバウンドに転送されているか、ルーティング規則を見直してください。アクセスログがルーティング判断の参考になります。
- ネットワーク環境: 一部のネットワーク環境では、特定のポートやプロトコルが制限されている場合があります。異なるポートやトランスポート(WebSocket/HTTP/2など)を試してみてください。
- クライアントアプリ: 使用しているクライアントアプリの設定が正しいか、最新バージョンかを確認してください。アプリ自体の問題である可能性もゼロではありません。
13. よくある質問 (FAQ)
- Q: VMess, VLESS, Trojanの違いは?
- A: VMessはv2ray独自の歴史あるプロトコルで、AlterIdを使用します。VLESSはVMessよりシンプルで軽量化され、XTLSとの連携に優れています。TrojanはTLS over TCP上に構築されたプロトコルで、パスワード認証を行います。一般的に、VLESSまたはTrojan+TLS+WS/H2の組み合わせが、現在の検閲環境において最も推奨される構成の一つとされています。
- Q: TLSはなぜ必要なの?
- A: TLSは通信内容を暗号化し、サーバーの正当性を証明することで、傍受や改ざん、中間者攻撃を防ぎます。また、通信が一般的なHTTPSトラフィックに見えるため、プロトコル識別による検閲を回避する効果も期待できます。セキュリティとプライバシーのために必須の設定です。
- Q: 設定ファイルが長くて複雑…
- A: v2rayは多機能ゆえに設定項目が多いですが、ほとんどのユーザーは基本的な設定(
inbounds
,outbounds
,routing
,dns
)を理解すれば十分利用できます。最初はシンプルな設定から始め、必要に応じて徐々に複雑な機能を追加していくのが良いでしょう。インターネット上には多くの設定例が公開されているので、それらを参考にすることも有効です。
- A: v2rayは多機能ゆえに設定項目が多いですが、ほとんどのユーザーは基本的な設定(
- Q: 接続が遅い、不安定です。
- A: サーバーの場所、サーバーとクライアント間のネットワーク状況、サーバーのリソース不足、v2rayの設定(トランスポート選択、バッファサイズ、Muxなど)など、様々な原因が考えられます。mKCPを試したり、XTLSを有効にしたり、他のトランスポート(WebSocket/HTTP/2)を試したり、サーバーのスペックを確認したりしてください。
- Q: 特定のサイトにアクセスできません。
- A: ルーティング設定が適切か確認してください。アクセスしたいサイトが
direct
アウトバウンドやblocked
アウトバウンドにルーティングされていないか、あるいはproxy
アウトバウンドで接続しているリモートサーバーからそのサイトへのアクセスが許可されているかなどを確認します。DNS設定も影響する場合があります。
- A: ルーティング設定が適切か確認してください。アクセスしたいサイトが
14. まとめ
v2rayは、その強力な機能と柔軟性により、インターネット上の自由とセキュリティを確保するための優れたツールです。しかし、その能力を最大限に引き出すためには、設定に関する正確な理解が不可欠です。
この記事では、v2rayの基本的なアーキテクチャから始まり、JSON設定ファイルの構造、主要な設定項目(Inbounds, Outbounds, Routing, DNS)、各種プロトコル(VMess, VLESS, Trojanなど)やトランスポート層(TCP, WebSocket, HTTP/2, mKCP, TLS, XTLS)の詳細、さらにはセキュリティやパフォーマンスに関する重要な考慮事項まで、網羅的に解説しました。
v2rayの設定は複雑に見えるかもしれませんが、各セクションの役割と、設定項目がどのように連携しているかを一つずつ理解していけば、決して難しいものではありません。特に、セキュリティのためにTLSを適切に設定すること、そして自身のネットワーク環境や目的に合わせてルーティング規則を正確に記述することが、安全かつ快適なv2ray利用の鍵となります。
この記事が、あなたがv2rayの設定を理解し、自身のニーズに合ったv2ray環境を構築するための一助となれば幸いです。v2rayの世界は常に進化しており、新しい機能や設定が追加されることもあります。公式ドキュメントやコミュニティからの最新情報を追跡し、継続的に学習していくことを推奨します。