はい、承知いたしました。v2rayの設定と使い方について、詳細な解説を含む約5000語の記事を記述します。記事のタイトルは「v2ray の設定と使い方をわかりやすく解説【完全版】」とし、内容を直接ここに表示します。
v2ray の設定と使い方をわかりやすく解説【完全版】
インターネットの自由な利用やプライバシー保護は、現代においてますます重要になっています。しかし、地域によってはインターネットの検閲が厳しく、情報へのアクセスが制限されたり、オンライン活動が監視されたりすることがあります。このような状況下で、安全かつ自由にインターネットを利用するための技術として注目されているのが「v2ray」です。
v2rayは、多機能かつ高性能なプロキシツールであり、さまざまなプロトコルとトランスポートをサポートしています。その柔軟性と拡張性の高さから、単なる検閲回避ツールとしてだけでなく、セキュリティやプライバシーを高めるための強力なツールとしても利用されています。
しかし、v2rayはその多機能さゆえに設定が複雑に感じられることも少なくありません。特に初心者にとっては、設定ファイルの書き方や各種オプションの意味を理解するのが難しい場合があります。
この「完全版」記事では、v2rayを初めて使う方から、さらに一歩進んだ設定に挑戦したい方まで、すべてのユーザーがv2rayを理解し、活用できるよう、以下の内容を網羅的に、そしてできる限り分かりやすく解説します。
- v2rayとは何か、その基本的な概念
- 主要なプロトコル(VLESS, VMess, Trojanなど)の解説
- サーバーとクライアントのインストール方法
- 最も推奨される安全な設定方法(VLESS + TCP + TLS + Web, VLESS + WS + TLS + Webなど)の詳細な解説
- 各種GUIクライアントを使った設定方法
- 高度なルーティング設定やその他のテクニック
- トラブルシューティングとデバッグ
- セキュリティとプライバシーに関する注意点
この記事を読むことで、あなたはv2rayの基本的な仕組みを理解し、自分自身のサーバーを構築して安全に利用できるようになるだけでなく、さらに進んだカスタマイズや応用もできるようになるはずです。さあ、v2rayの世界へ飛び込みましょう!
1. v2rayとは何か? なぜv2rayを使うのか?
1.1. V2Ray / Project V とは
v2rayは、Project Vというオープンソースプロジェクトの中核をなすネットワークプロキシツールです。Project Vは、複数のモジュールから構成されており、v2rayはその主要な実行可能ファイルです。
v2rayの最大の特徴は、その多機能性と柔軟性です。単一のプロトコルに限定されず、VLESS、VMess、Shadowsocks、Socks、HTTP、そしてTrojanといった多様なプロトコルをサポートしています。さらに、これらのプロトコルを、TCP、mKCP、WebSocket、HTTP/2、QUICなど、様々なトランスポート層プロトコルと組み合わせて使用することができます。
この豊富な選択肢により、ユーザーは自身のネットワーク環境や目的に応じて、最適なプロトコルとトランスポートの組み合わせを選ぶことができます。
1.2. なぜv2rayを使うのか?
v2rayが多くのユーザーに選ばれる理由はいくつかあります。
- 強力な検閲回避能力: v2rayは、その多様なプロトコルとトランスポート、そして高度な偽装(Masquerading)技術により、ファイアウォールによるトラフィックの検出やブロックを回避する能力が高いとされています。特にWebSocket + TLSによる偽装は、一般的なWebサイトへのアクセスと見分けがつきにくく、検閲を回避するのに有効です。
- 高いセキュリティとプライバシー: TLS暗号化との組み合わせは、通信内容が第三者によって盗聴されるのを防ぎます。また、高度なルーティング設定により、特定のトラフィックのみをプロキシ経由にするなど、プライバシーを細かく制御できます。
- 高性能: 適切な設定を行えば、高速かつ安定した通信が可能です。特にVLESSプロトコルは、VMessに比べて構造がシンプルでオーバーヘッドが少なく、高い性能を発揮します。
- 柔軟な設定: Inbound (受信) と Outbound (送信) の設定を組み合わせることで、様々なネットワーク構成に対応できます。また、ルーティング設定により、ドメイン名、IPアドレス、地理情報などに基づいた細かいトラフィック制御が可能です。
- クロスプラットフォーム: Windows, macOS, Linux, Android, iOSなど、主要なOSに対応したクライアントやGUIツールが存在します。
1.3. 他のプロキシツールとの比較 (Shadowsocks, OpenVPNなど)
- Shadowsocks: v2rayが登場する以前から広く使われているプロキシツールです。シンプルで設定が比較的容易ですが、単一のプロトコルに特化しており、v2rayほど多様なプロトコルや高度な偽装オプションはありません。検閲耐性はv2rayの方が一般的に高いとされています。
- OpenVPN: VPNプロトコルとして広く使われています。ネットワーク層で動作し、OSに仮想ネットワークインターフェースを作成するのが一般的です。汎用性が高い一方で、プロトコルの特徴からトラフィックがOpenVPNとして識別されやすく、積極的なブロックの対象となる場合があります。v2rayはアプリケーション層のプロキシとして動作するため、アプローチが異なります。
- Trojan: TLSのポート443を使用し、HTTPSトラフィックに偽装することで検閲回避を目指すプロトコルです。そのシンプルさと効果から人気がありますが、v2rayはTrojanプロトコルもサポートしており、v2rayの中でTrojanを利用することも可能です。
v2rayは、これらのツールの良い点を多く取り込みつつ、さらに高度な機能や柔軟性を加えた、現時点では非常に強力なプロキシソリューションと言えます。
2. v2rayの基本概念
v2rayの設定は、JSON形式のコンフィグファイルによって行われます。このファイルを理解することが、v2rayを使いこなすための第一歩です。主要な構成要素を見ていきましょう。
2.1. コンフィグファイルの構造 (config.json)
v2rayのコンフィグファイルは、基本的に以下のような構造を持っています。
json
{
"log": {},
"api": {},
"dns": {},
"stats": {},
"policy": {},
"inbounds": [],
"outbounds": [],
"routing": {}
}
log
: ロギングに関する設定。api
: 外部API連携に関する設定(通常は不要)。dns
: DNS設定。DNS漏洩対策などで重要。stats
: 統計情報に関する設定。policy
: セキュリティポリシーやタイムアウト設定。inbounds
: 受信接続に関する設定。クライアントからの接続をv2rayがどのように受け入れるかを定義します。outbounds
: 送信接続に関する設定。v2rayがインターネットや他の宛先にどのように接続するかを定義します。routing
: トラフィックをどのoutboundに転送するかを決定するルーティング規則。
この中で最も重要なのが inbounds
, outbounds
, routing
です。
2.2. Inbound (受信) 設定
v2rayサーバーがクライアントからの接続を待ち受ける設定です。ポート番号、プロトコル、認証方法などを指定します。
例:VMessプロトコルで受信する場合
json
{
"protocol": "vmess",
"listen": "0.0.0.0", // 待ち受けるIPアドレス (0.0.0.0は全てのアドレス)
"port": 10086, // 待ち受けるポート番号
"settings": {
"clients": [
{
"id": "YOUR_UUID", // クライアント識別子 (UUID)
"alterId": 64 // VMess特有の設定
}
],
"disableSystemRootCert": false // システムルート証明書を使用するか (TLS利用時など)
},
"streamSettings": { // トランスポート層の設定
"network": "tcp", // トランスポートプロトコル (tcp, kcp, ws, http, quic)
"security": "auto", // セキュリティ設定 (none, tls)
"tlsSettings": { // TLS設定 (securityがtlsの場合)
"serverName": "your.domain.com",
"certificates": [
{
"certificateFile": "/path/to/your/certificate.crt",
"keyFile": "/path/to/your/private.key"
}
]
},
"wsSettings": { // WebSocket設定 (networkがwsの場合)
"path": "/your_websocket_path"
}
}
}
protocol
: 使用するプロトコル (vmess, vless, socks, http, etc.)listen
: 待ち受けるIPアドレス。"0.0.0.0"
は全てのアドレスからの接続を受け入れます。特定のIPを指定することも可能です。port
: 待ち受けるポート番号。settings
: プロトコルごとの詳細設定。VMessやVLESSではクライアントIDなどを設定します。streamSettings
: トランスポート層の設定。ネットワークタイプ (network
)、暗号化 (security
)、TLSやWebSocketなどの詳細設定 (tlsSettings
,wsSettings
) を指定します。
2.3. Outbound (送信) 設定
v2rayが受信したトラフィックをどこへ転送するかを定義します。通常はインターネット (direct
) へ直接転送しますが、他のプロキシサーバーを経由させたり、特定のトラフィックをブロック (block
) したりすることも可能です。
例:直接インターネットへ転送する場合
json
{
"protocol": "freedom", // インターネットへ直接転送するプロトコル
"settings": {
"domainStrategy": "UseIP" // ドメイン解決方法
}
}
例:トラフィックをブロックする場合
json
{
"protocol": "blackhole", // トラフィックを捨てるプロトコル
"settings": {
"response": {
"type": "http" // HTTPエラーを返すなど
}
},
"tag": "block" // このOutboundに名前を付ける
}
protocol
: 使用するプロトコル (freedom
は直接転送、blackhole
は破棄、proxy
は他のプロキシへ転送など)。settings
: プロトコルごとの詳細設定。tag
: そのOutbound設定を識別するためのタグ。ルーティング設定でこのタグを使用します。デフォルトの直接転送用Outboundには通常direct
というタグが付けられます。
2.4. Routing (ルーティング) 設定
Inboundで受け付けたトラフィックを、どのOutboundへ転送するかを決定する規則を定義します。これにより、特定のドメインやIPへのアクセスだけをプロキシ経由にしたり、逆に特定のトラフィックをプロキシしないようにしたりといった細かい制御が可能になります。
json
{
"rules": [
{
"type": "field", // ルーティング規則のタイプ
"domain": [ // ドメイン名によるマッチング
"google.com",
"facebook.com",
"youtube.com"
],
"outboundTag": "proxy" // マッチした場合に転送するOutboundのタグ
},
{
"type": "field",
"ip": [ // IPアドレスによるマッチング
"geoip:private" // プライベートIPアドレスはプロキシしない
],
"outboundTag": "direct"
},
{
"type": "field",
"domain": [ // 中国国内ドメインはプロキシしない
"geosite:cn"
],
"outboundTag": "direct"
},
{
"type": "field",
"ip": [ // 中国国内IPはプロキシしない
"geoip:cn"
],
"outboundTag": "direct"
}
// その他のルール...
],
"strategy": "rules" // ルール適用戦略 (rules: 上から順に適用)
}
rules
: ルーティング規則のリスト。リストの最初から順に評価され、最初にマッチしたルールが適用されます。type
: ルールタイプ (field
が一般的)。domain
,ip
,port
,network
,protocol
,source
,user
,inboundTag
: マッチング条件。ドメイン名、IPアドレス、ポート、ネットワークタイプ (tcp/udp)、プロトコル、送信元IP、ユーザーID、受信に使われたInboundタグなど、様々な条件でフィルタリングできます。domain
: ドメイン名。正規表現、ワイルドカード (*.example.com
)、完全一致、geosite:
リストが利用可能。ip
: IPアドレス。CIDR形式 (192.168.1.0/24
)、単一IP、geoip:
リストが利用可能。geoip:private
はプライベートIP、geoip:cn
は中国国内IPといった、v2rayに組み込まれたリストを利用できます。geosite:
やgeoip:
を利用するには、対応するデータファイル (geosite.dat, geoip.dat) がv2rayの実行ファイルと同じディレクトリ、または設定されたディレクトリに存在する必要があります。
outboundTag
: ルールにマッチした場合にトラフィックを転送するOutboundのタグ。
デフォルトでは、どのルールにもマッチしないトラフィックは、config.jsonのoutboundsリストの最初のOutboundに転送されます。通常、これはインターネットへの直接接続 (direct
) またはメインのプロキシ接続 (proxy
) に設定されます。
2.5. プロトコル (VLESS, VMess, Shadowsocks, Trojanなど)
- VMess: v2ray独自のプロトコルで、v2rayの初期から存在する主要プロトコルです。AlterIDという概念を持ち、複数のダミーセッションを生成することで、トラフィックをよりランダムに見せかける試みが行われています。しかし、プロトコル自体の設計により、特定の署名が含まれるため、高度な検出システムによって識別される可能性があるという指摘もあります。
- VLESS: v2rayの新しいプロトコルで、VMessよりもシンプルでオーバーヘッドが少なく設計されています。認証情報としてUUIDを使用しますが、VMessのようなAlterIDは必須ではありません(フロー設定で類似の機能を持つ)。プロトコル自体に余計な情報を含まないため、特定のトランスポート層(特にTLS)と組み合わせることで、そのトランスポート層本来のトラフィックと見分けがつきにくくなるという特徴があります。現在、最も推奨されるプロトコルの一つです。
- Shadowsocks: 広く普及しているSocks5ベースの暗号化プロキシプロトコルです。設定がシンプルですが、プロトコル自体の識別が比較的容易という側面もあります。v2rayはこれをサポートしているため、既存のShadowsocksサーバー/クライアントと連携させることも可能です。
- Trojan: TLSプロトコルに乗り、HTTPSトラフィックに偽装することを目的としたプロトコルです。ポート443を使用し、HTTPSのようなハンドシェイクを行います。v2rayはTrojanプロトコルもサポートしており、v2ray上でTrojanサーバー/クライアントとして動作させることができます。
- Socks/HTTP: 標準的なプロキシプロトコルです。通常はローカルネットワーク内で使用したり、多段プロキシの構成要素として使用したりします。インターネット経由で直接使用することは、セキュリティや検閲回避の観点から推奨されません(暗号化されないため)。
2.6. トランスポート (TCP, mKCP, WebSocket, HTTP/2など)
プロトコルが「何を」通信するかを定義するのに対し、トランスポートは「どのように」データを伝送するかを定義します。
- TCP: 最も基本的なトランスポートです。安定していますが、ネットワーク環境によってはパケットロスに弱い場合があります。
- mKCP: UDP上に実装された、信頼性のあるコネクション指向プロトコルです。TCPよりも低遅延・高スループットを目指しており、ネットワーク環境が不安定な場合に有効な場合があります。しかし、UDPトラフィック自体が制限される環境では使いにくいです。
- WebSocket (WS): HTTPまたはHTTPS上で動作し、ブラウザとサーバー間で双方向通信を可能にするプロトコルです。v2rayでWSトランスポートを使用し、さらにTLSで暗号化することで、トラフィックを標準的なWebSocket over TLS通信(例えばブラウザがWebサイトと通信する際に利用されるもの)に偽装できます。これにより、ファイアウォールによるプロトコル識別の回避に非常に有効です。Webサーバー(Nginx, Caddyなど)のリバースプロキシとしてv2rayのWSポートを公開することで、単なるWebSocket通信としてではなく、一般的なWebサイトへのアクセスの一部として見せかけることも可能です。
- HTTP/2: HTTP/2プロトコル上で動作させます。これもWSと同様に、標準的なWebトラフィックに偽装するのに役立ちます。
- QUIC: UDP上に実装された、Googleが開発した新しいトランスポートプロトコルです。低遅延化を目指しており、TCPやmKCPの代替として期待されています。
最も推奨されるのは、VLESSまたはVMessプロトコルと、WebSocketまたはTCPトランスポート、そしてTLS暗号化を組み合わせた設定です。 特にVLESS + WS + TLSまたはVLESS + TCP + TLSは、高い検閲耐性と性能を両立できるため、現在の主流となっています。これに加えて、一般的なWebサイトを同じポートで公開することで、トラフィックの偽装効果をさらに高める手法(Webサーバーとの連携)も広く利用されています。
3. v2rayのインストール
v2rayは様々なプラットフォームで利用できます。ここでは、主要なOSへのインストール方法を解説します。
3.1. Linuxへのインストール (推奨: 公式スクリプト)
v2ray公式が提供するインストールスクリプトを使用するのが最も簡単で推奨される方法です。このスクリプトはsystemdサービスの設定なども自動で行ってくれます。
まず、サーバーにSSHで接続します。rootユーザーまたはsudo権限のあるユーザーで以下のコマンドを実行します。
“`bash
curlがインストールされていない場合はインストール
Debian/Ubuntu:
sudo apt update && sudo apt install curl
CentOS/RHEL:
sudo yum update && sudo yum install curl
インストールスクリプトをダウンロードして実行
スクリプトの内容を確認したい場合はダウンロード後にlessコマンドなどで確認
bash <(curl -L https://raw.githubusercontent.com/v2fly/fhs-install-v2ray/master/install-release.sh)
あるいはダウンロードして実行
curl -L -O https://raw.githubusercontent.com/v2fly/fhs-install-v2ray/master/install-release.sh
sudo bash install-release.sh
“`
このスクリプトは、v2rayの実行ファイルを /usr/local/bin/v2ray
と /usr/local/bin/v2ctl
に、設定ファイルを /usr/local/etc/v2ray/config.json
に、systemdサービスファイルを /etc/systemd/system/v2ray.service
にインストールします。
インストールが完了したら、v2rayサービスを起動し、自動起動設定を有効にします。
bash
sudo systemctl start v2ray
sudo systemctl enable v2ray
サービスのステータスを確認するには:
bash
sudo systemctl status v2ray
アンインストールする場合は、以下のスクリプトを実行します。
bash
sudo bash <(curl -L https://raw.githubusercontent.com/v2fly/fhs-install-v2ray/master/install-release.sh) --remove
3.2. Windowsへのインストール
Windows版は公式GitHubリポジトリからダウンロードできます。
- v2ray-coreのGitHubリポジトリのReleasesページ (https://github.com/v2fly/v2ray-core/releases) にアクセスします。
- 最新版のzipファイル (
v2ray-windows-64.zip
またはv2ray-windows-32.zip
) をダウンロードします。 - ダウンロードしたzipファイルを任意のフォルダ(例:
C:\v2ray
)に解凍します。 - 解凍したフォルダ内に
v2ray.exe
,v2ctl.exe
,config.json.template
などがあります。config.json.template
をconfig.json
にリネームし、内容を編集します。 - コマンドプロンプトまたはPowerShellを開き、v2rayフォルダに移動します。
-
以下のコマンドでv2rayを起動します。
bash
v2ray.exe -config=config.json
WindowsでGUIクライアントを利用する場合は、通常、v2ray-core自体はクライアントにバンドルされているか、クライアントが自動的にダウンロード・設定してくれます。手動でcoreをインストールする必要はほとんどありません。
3.3. macOSへのインストール
macOSの場合も、公式GitHubリポジトリからバイナリをダウンロードするか、Homebrewを利用してインストールできます。
Homebrewを利用する場合 (推奨):
bash
brew install v2ray-core
これにより、/usr/local/bin/v2ray
に実行ファイルがインストールされます。設定ファイルは通常 ~/.config/v2ray/config.json
に配置します。
手動インストール:
- GitHub ReleasesページからmacOS版のzipファイルをダウンロードします。
- ダウンロードしたzipファイルを解凍し、
v2ray
およびv2ctl
実行ファイルを任意の場所(例:/usr/local/bin
)に移動します。 - 設定ファイル (
config.json
) を任意の場所(例:~/.config/v2ray/
)に配置します。 -
ターミナルを開き、以下のコマンドでv2rayを起動します。
bash
v2ray -config /path/to/your/config.json
macOSでも、GUIクライアントを使用するのが一般的です。クライアントがv2ray-coreのインストールと設定を管理してくれます。
3.4. Android / iOSへのインストール
モバイルOSでは、通常、v2ray-coreを直接インストールするのではなく、v2rayに対応したGUIクライアントアプリをインストールします。これらのアプリはv2ray-coreを内蔵しており、アプリの設定画面からv2rayの設定を簡単に行えます。
- Android: V2RayNG が最も人気があり、機能も豊富です。Google Playストアで入手できます。
- iOS: i2Ray, FairVPN, Shadowrocket (Shadowsocksクライアントですがv2rayもサポート) などがあります。App Storeで入手できます。ただし、iOSではApp Storeのポリシーにより、利用できるアプリが限られたり、機能が制限されたりする場合があります。
3.5. GUIクライアントの紹介
設定ファイルの直接編集は強力ですが、特に初心者にとっては敷居が高いです。各種OS向けに提供されているGUIクライアントを利用すると、直感的な操作でv2rayの設定やサーバーへの接続管理ができます。
- Windows: V2RayN, Qv2ray (クロスプラットフォーム)
- macOS: Qv2ray, V2RayX (開発停止気味), V2rayU
- Android: V2RayNG
- iOS: i2Ray, FairVPN, Shadowrocket
これらのクライアントは、サーバー設定をQRコードやURLでインポートする機能、システムプロキシの自動設定、ルーティングルールの設定など、多くの便利な機能を提供しています。まずはGUIクライアントから試してみるのがおすすめです。
4. v2rayサーバー設定 (Linux)
最も一般的で推奨される安全なサーバー設定方法について、詳細に解説します。ここでは、以下の設定を例に取ります。
- プロトコル: VLESS (最も推奨) または VMess
- トランスポート: TCP または WebSocket (WS)
- セキュリティ: TLS (必須)
- 偽装: Webサイト偽装 (WebSocket + TLSの場合)
これらの設定を行うためには、以下のものが必要です。
- VPS (Virtual Private Server): v2rayサーバーをホストするためのLinuxサーバー。メモリ512MBでも十分動作します。
- ドメイン名: サーバーのIPアドレスに関連付けられたドメイン名。
- SSL証明書: ドメイン名に対するTLS暗号化のための証明書。Let’s Encryptを使えば無料で取得できます。
4.1. 必要なものの準備
- VPSの契約: お好みのVPSプロバイダー(例: Vultr, DigitalOcean, Linode, AWS Lightsailなど)と契約し、Linuxサーバー(Ubuntu LTSバージョンがおすすめ)をセットアップします。SSHで接続できるようにしておいてください。
- ドメイン名の取得: お好みのドメインレジストラ(例: Namecheap, GoDaddy, Cloudflareなど)からドメイン名を取得します。
- DNSレコードの設定: 取得したドメイン名のAレコードを、VPSのIPv4アドレスに向けます。IPv6も利用する場合はAAAAレコードも設定します。DNS設定の変更がインターネット全体に反映されるまでには時間がかかる場合があります(数分~数時間)。
- ファイアウォールの設定: VPS側でファイアウォールが有効になっている場合は、SSHポート(デフォルト22)と、v2rayで使用するポート(通常443)を開放してください。例えばUFWを使用している場合:
bash
sudo ufw allow ssh
sudo ufw allow 443/tcp
sudo ufw enable
プロバイダー側にもファイアウォール設定がある場合は、そちらも確認・設定してください。
4.2. TLS証明書の取得 (Certbot + Let’s Encrypt)
TLS暗号化にはSSL証明書が必要です。無料で自動化できるLet’s Encryptと、そのクライアントであるCertbotを使用するのが一般的です。
- Certbotのインストール: 使用しているLinuxディストリビューションに応じてCertbotをインストールします。Ubuntuの場合:
bash
sudo apt update
sudo apt install certbot
Snapを使用する方法などもあります。公式ドキュメント(https://certbot.eff.org/instructions) を参照してください。 -
証明書の取得: Webサーバーを使用しない単体での証明書取得には、
certonly
コマンドとstandalone
プラグインを使用します。Certbotが一時的にWebサーバーを起動して認証を行います。この際、ポート80が空いている必要があります。
bash
sudo certbot certonly --standalone -d your.domain.com --email [email protected] --agree-tos --no-eff-emailyour.domain.com
を取得したドメイン名に置き換えてください。[email protected]
を自身のメールアドレスに置き換えてください。--agree-tos
: 利用規約に同意します。--no-eff-email
: EFFからのニュースレター購読をスキップします。
成功すると、証明書ファイルと秘密鍵ファイルが/etc/letsencrypt/live/your.domain.com/
ディレクトリ以下に配置されます。fullchain.pem
: 証明書チェーン (v2ray設定で使用)privkey.pem
: 秘密鍵 (v2ray設定で使用)
これらのファイルへのアクセス権はrootのみに限定されています。v2rayユーザーがこれらのファイルを読み取れるように、権限を設定するか、ファイルを別の場所にコピーする必要がありますが、セキュリティ上の観点から、v2rayを非rootユーザーで実行し、そのユーザーにこれらのファイルを読み取る権限のみを与えるのがベストプラクティスです。
一時的な措置として、Certbotで取得した証明書ファイルを他の場所にコピーし、v2rayユーザーが読み取れるようにする場合があります。
“`bash例: v2rayがデフォルトで実行されるユーザーが nobody/nogroup の場合
sudo mkdir -p /usr/local/etc/v2ray/ssl
sudo cp /etc/letsencrypt/live/your.domain.com/fullchain.pem /usr/local/etc/v2ray/ssl/
sudo cp /etc/letsencrypt/live/your.domain.com/privkey.pem /usr/local/etc/v2ray/ssl/
sudo chown nobody:nogroup /usr/local/etc/v2ray/ssl/fullchain.pem /usr/local/etc/v2ray/ssl/privkey.pem
sudo chmod 600 /usr/local/etc/v2ray/ssl/fullchain.pem /usr/local/etc/v2ray/ssl/privkey.pem
“`
証明書は90日で期限切れになるため、Certbotの自動更新設定を確認しておいてください。通常、certbotインストール時にタイマーやcronジョブが自動で設定されます。
4.3. VLESS + TCP + TLS 設定例
これは比較的シンプルながら安全な設定です。TCPトランスポートをTLSで暗号化します。ポート443を使用することで、HTTPSトラフィックに見せかける効果があります。
sudo nano /usr/local/etc/v2ray/config.json
を実行し、既存の内容を全て削除して以下を貼り付け、適宜編集します。
json
{
"log": {
"loglevel": "warning" // エラーのみを記録
},
"inbounds": [
{
"port": 443, // HTTPSの標準ポート
"protocol": "vless",
"settings": {
"clients": [
{
"id": "YOUR_UUID_HERE", // ユニークなUUIDを生成して置き換える
"flow": "xtls-rprx-vision" // XTLSフロー (XTLS対応クライアントで使用)
}
],
"decryption": "none", // VLESSの復号化は不要
"allowTransparent": false // 透過型プロキシを許可するか
},
"streamSettings": {
"network": "tcp",
"security": "tls",
"tlsSettings": {
"alpn": [ "http/1.1" ], // HTTP/1.1をALPNで指定
"certificates": [
{
"certificateFile": "/usr/local/etc/v2ray/ssl/fullchain.pem", // 証明書ファイルのパス
"keyFile": "/usr/local/etc/v2ray/ssl/privkey.pem" // 秘密鍵ファイルのパス
}
],
"minVersion": "1.2", // TLSv1.2以降を使用
"maxVersion": "1.3" // TLSv1.3まで使用
// "cipherSuites": "...", // 推奨される暗号スイートを指定することも可能 (上級者向け)
},
"tcpSettings": {
"header": {
"type": "http", // HTTP偽装
"request": {
"version": "1.1",
"method": "GET",
"path": [ "/" ],
"headers": {
"Host": [ "your.domain.com" ], // 偽装先のホスト名
"User-Agent": [
"Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/53.0.2785.143 Safari/537.36"
],
"Accept": [ "text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8" ],
"Accept-Language": [ "zh-CN,zh;q=0.8,en-US;q=0.5,en;q=0.3" ],
"Accept-Encoding": [ "gzip, deflate, sdch" ]
}
}
}
}
}
}
],
"outbounds": [
{
"protocol": "freedom", // インターネットへ直接転送
"settings": {},
"tag": "direct"
},
{
"protocol": "blackhole", // ブロック用Outbound
"settings": {
"response": {
"type": "http"
}
},
"tag": "block"
}
],
"routing": {
"rules": [
{
"type": "field",
"ip": [
"geoip:private" // プライベートIPはプロキシしない
],
"outboundTag": "direct"
},
{
"type": "field",
"domain": [
"geosite:cn" // 中国国内ドメインはプロキシしない
],
"outboundTag": "direct"
},
{
"type": "field",
"ip": [
"geoip:cn" // 中国国内IPはプロキシしない
],
"outboundTag": "direct"
}
// 必要に応じて他のルーティングルールを追加
]
// どのルールにもマッチしないトラフィックは outbounds リストの最初の要素 (direct) に転送される
}
}
YOUR_UUID_HERE
の部分は、ユニークなUUIDに置き換えてください。UUIDはv2ctl uuid
コマンドやオンラインのUUIDジェネレーターで生成できます。your.domain.com
の部分は、取得したドメイン名に置き換えてください。- 証明書ファイルと秘密鍵ファイルのパスは、Certbotで取得したファイルのパスに合わせて修正してください。上記の例では
/usr/local/etc/v2ray/ssl/
にコピーした場合のパスです。 flow: "xtls-rprx-vision"
は、XTLSに対応したv2rayクライアントを使用する場合に非常に効果的な設定です。トラフィックをTLSレコードの中に隠蔽し、TLSハンドシェイク後の余計な暗号化をスキップすることで、性能向上と検閲耐性向上が期待できます。クライアント側もXTLSに対応している必要があります。対応していないクライアントを使用する場合はflow
を削除するか、クライアント側でフローを設定しないようにしてください。- TCPトランスポートでHTTPヘッダー偽装を行う場合、
tcpSettings.header.type
を"http"
に設定し、request
フィールドで偽装するHTTPリクエストの詳細を指定します。Host
ヘッダーは非常に重要で、偽装先のドメイン名を指定してください。 geoip:cn
およびgeosite:cn
ルールは、中国国内へのアクセスをプロキシしないための一般的な設定です。これらの機能を利用するには、v2ray実行ファイルと同じディレクトリ、または指定されたパスにgeoip.dat
およびgeosite.dat
ファイルが必要です。公式インストールスクリプトはこれらを自動で配置します。
設定ファイルを編集したら、保存してv2rayサービスを再起動します。
bash
sudo systemctl restart v2ray
ログを確認してエラーが出ていないか確認します。
bash
sudo systemctl status v2ray
sudo journalctl -u v2ray --since today
4.4. VLESS + WS + TLS + Web 設定例 (最も推奨)
これは現在のv2rayサーバー設定で最も広く推奨され、かつ強力な検閲回避能力を持つ設定です。WebSocket over TLSを使用し、さらにWebサーバー(NginxやCaddyなど)をリバースプロキシとして利用することで、v2rayのトラフィックを「普通のWebサイトへのアクセスの一部」として完全に偽装します。同じポート443で、Webサイトとv2rayの両方のトラフィックを処理します。
この設定では、Webサーバーがポート443でクライアントからの接続を受け付け、特定のパス(例: /your_websocket_path
)へのWebSocket接続だけをv2rayに転送します。それ以外の通常のWebサイトへのアクセスは、Webサーバーが直接処理します。
v2ray側の設定 (/usr/local/etc/v2ray/config.json
):
v2rayはWebサーバーから転送されるWebSocket接続を受け付けるように設定します。v2ray自身はポートはLISTENしません(またはローカルホストでのみLISTENします)。
json
{
"log": {
"loglevel": "warning"
},
"inbounds": [
{
"port": 8080, // Webサーバーから転送されるポート (ローカルIPのみでLISTEN推奨)
"listen": "127.0.0.1", // ローカルホストからの接続のみを受け付ける
"protocol": "vless",
"settings": {
"clients": [
{
"id": "YOUR_UUID_HERE", // ユニークなUUID
"flow": "" // WebSocketの場合は通常flowは設定しない
}
],
"decryption": "none"
},
"streamSettings": {
"network": "ws", // WebSocketトランスポート
"security": "none", // ここではTLSは設定しない (Webサーバー側で処理)
"wsSettings": {
"path": "/your_websocket_path", // Webサーバーで設定するパスと一致させる
"headers": {
"Host": "your.domain.com" // 偽装先のホスト名 (オプションだが推奨)
}
}
}
}
],
"outbounds": [
{
"protocol": "freedom",
"settings": {},
"tag": "direct"
},
{
"protocol": "blackhole",
"settings": {
"response": {
"type": "http"
}
},
"tag": "block"
}
],
"routing": {
"rules": [
{
"type": "field",
"ip": [
"geoip:private"
],
"outboundTag": "direct"
},
{
"type": "field",
"domain": [
"geosite:cn"
],
"outboundTag": "direct"
},
{
"type": "field",
"ip": [
"geoip:cn"
],
"outboundTag": "direct"
}
]
}
}
- v2rayはポート8080(または任意の空きポート)でローカルホストからの接続のみを待ち受けます。
streamSettings.security
は"none"
です。TLSはWebサーバーが処理します。streamSettings.wsSettings.path
は、Webサーバーがv2rayに転送する際に使用するパスと一致させてください。このパスは推測されにくい複雑なものにすることをおすすめします。
Webサーバー側の設定 (例: Nginx):
Nginxをインストールします。
bash
sudo apt update
sudo apt install nginx
Certbotを使用して、先ほど取得した証明書をNginx向けに設定します(通常、Certbotは自動でNginx設定を生成または修正できます)。もし手動で行う場合は、/etc/nginx/sites-available/your.domain.com
などに設定ファイルを作成し、/etc/nginx/sites-enabled/
にシンボリックリンクを作成します。
以下はNginx設定の抜粋です。your.domain.com
と /your_websocket_path
、v2rayの待ち受けポート (8080) を適切に修正してください。
“`nginx
server {
listen 80;
listen [::]:80;
server_name your.domain.com;
# HTTPをHTTPSにリダイレクト
return 301 https://$host$request_uri;
}
server {
listen 443 ssl http2;
listen [::]:443 ssl http2;
server_name your.domain.com;
# Let's Encryptで取得した証明書と秘密鍵のパスを指定
ssl_certificate /etc/letsencrypt/live/your.domain.com/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/your.domain.com/privkey.pem;
ssl_session_cache shared:SSL:10m;
ssl_session_timeout 10m;
ssl_session_tickets off;
ssl_protocols TLSv1.2 TLSv1.3;
ssl_prefer_server_ciphers on;
ssl_ciphers "ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384";
ssl_stapling on;
ssl_stapling_verify on;
resolver 8.8.8.8 8.8.4.4 valid=300s;
resolver_timeout 5s;
# WebSocketパスへのアクセスをv2rayにプロキシ転送
location /your_websocket_path {
proxy_pass http://127.0.0.1:8080; # v2rayがLISTENしているアドレスとポート
proxy_redirect off;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
# それ以外のパスへのアクセスは、普通のWebサイトとして処理 (例: ダミーサイトを表示)
location / {
root /var/www/your.domain.com/html; # ダミーサイトのファイルを置くディレクトリ
index index.html index.htm;
try_files $uri $uri/ =404;
}
# エラーログとアクセスログ
error_log /var/log/nginx/your.domain.com.error.log warn;
access_log /var/log/nginx/your.domain.com.access.log;
}
“`
- ポート80へのアクセスは自動的にポート443へリダイレクトされます。
- ポート443でTLS接続を受け付け、証明書を使用して通信を復号化します。
/your_websocket_path
へのアクセスは、WebSocketプロトコルとしてローカルホストのv2rayが待ち受けているポート8080に転送されます。- それ以外のパスへのアクセスは、
/var/www/your.domain.com/html
ディレクトリに配置した普通のWebサイトコンテンツ(例: ダミーのHTMLファイル)として処理されます。これにより、外部から見るとこのサーバーは普通のWebサイトとして機能しているように見えます。
Nginxの設定ファイルを保存・有効化したら、設定ファイルの構文をチェックし、Nginxサービスを再起動します。
“`bash
sudo nginx -t # 設定ファイル構文チェック
sudo systemctl reload nginx # 設定をリロード
あるいは sudo systemctl restart nginx
“`
これで、VPSのドメイン名にアクセスすると通常のWebサイトが表示され、v2rayクライアントから指定したパスとUUIDで接続するとv2rayプロキシとして機能するようになります。
4.5. VMess + WS + TLS + Web 設定例
VMessプロトコルを使用する場合も、VLESSとほぼ同様に設定できます。クライアント側でVMess特有の設定(AlterIDなど)が必要になります。
v2ray側の設定 (/usr/local/etc/v2ray/config.json
):
json
{
"log": {
"loglevel": "warning"
},
"inbounds": [
{
"port": 8080,
"listen": "127.0.0.1",
"protocol": "vmess", // プロトコルをvmessに変更
"settings": {
"clients": [
{
"id": "YOUR_UUID_HERE", // ユニークなUUID
"alterId": 64, // VMess特有のAlterID (多くのクライアントでデフォルト64)
"level": 0
}
],
"disableSystemRootCert": false
},
"streamSettings": {
"network": "ws",
"security": "none",
"wsSettings": {
"path": "/your_websocket_path", // Webサーバーで設定するパスと一致させる
"headers": {
"Host": "your.domain.com" // 偽装先のホスト名 (オプションだが推奨)
}
}
}
}
],
"outbounds": [
{
"protocol": "freedom",
"settings": {},
"tag": "direct"
},
{
"protocol": "blackhole",
"settings": {
"response": {
"type": "http"
}
},
"tag": "block"
}
],
"routing": {
"rules": [
{
"type": "field",
"ip": [
"geoip:private"
],
"outboundTag": "direct"
},
{
"type": "field",
"domain": [
"geosite:cn"
],
"outboundTag": "direct"
},
{
"type": "field",
"ip": [
"geoip:cn"
],
"outboundTag": "direct"
}
]
}
}
protocol
を"vmess"
に変更し、settings.clients
にalterId
を追加します。- Nginx側の設定はVLESS + WS + TLS + Webの場合と全く同じです。Webサーバーはv2rayのプロトコルに関係なく、単にWebSocketトラフィックを転送するだけだからです。
一般的には、シンプルさ、性能、そしてXTLS対応の観点から、VLESSプロトコルが推奨されます。
4.6. Trojan + TLS + Web 設定例
Trojanプロトコルもポート443でHTTPSトラフィックに偽装することを目指します。v2rayはTrojanサーバーとしても機能できます。この設定も、WebSocketを使用する場合と同様にWebサーバーとの連携が可能です。
v2ray側の設定 (/usr/local/etc/v2ray/config.json
):
json
{
"log": {
"loglevel": "warning"
},
"inbounds": [
{
"port": 8080, // Webサーバーから転送されるポート
"listen": "127.0.0.1", // ローカルホストのみ
"protocol": "trojan", // プロトコルをtrojanに変更
"settings": {
"clients": [
{
"password": "YOUR_PASSWORD_HERE" // Trojanはパスワード認証
}
],
"fallbacks": [ // クライアントがTrojanプロトコルでなく通常のTLS接続を行った場合
{
"dest": 80, // NginxのHTTPポートにフォールバックさせる (Nginxが443で受けTLS終端し、必要なら80にリダイレクト、あるいは8080以外を処理する設定がある場合)
"path": "/your_websocket_path" // このパスにアクセスがあればv2rayのWS Inboundにフォールバックさせる
}
]
},
"streamSettings": { // TrojanはTCP上でTLSを直接使用するのが一般的
"network": "tcp",
"security": "none", // TLSはWebサーバーが処理
"tcpSettings": {
"header": { // オプションでHTTP偽装
"type": "http"
// ... HTTP偽装ヘッダー設定 (VLESS TCP TLSの例を参照)
}
}
}
},
{
// Trojanクライアント以外からのWebSocket接続を処理するためのInbound (オプション)
"port": 8080,
"listen": "127.0.0.1",
"protocol": "vless", // あるいはvmess, shadowsocksなど
"settings": {
"clients": [ { "id": "ANOTHER_UUID" } ],
"decryption": "none"
},
"streamSettings": {
"network": "ws",
"security": "none",
"wsSettings": {
"path": "/your_websocket_path" // Trojan fallbacksで指定したパスと同じ
}
}
}
],
"outbounds": [
{
"protocol": "freedom",
"settings": {},
"tag": "direct"
},
{
"protocol": "blackhole",
"settings": {
"response": {
"type": "http"
}
},
"tag": "block"
}
],
"routing": {
"rules": [
{
"type": "field",
"ip": [ "geoip:private" ],
"outboundTag": "direct"
},
{
"type": "field",
"domain": [ "geosite:cn" ],
"outboundTag": "direct"
},
{
"type": "field",
"ip": [ "geoip:cn" ],
"outboundTag": "direct"
}
]
}
}
protocol
を"trojan"
に変更し、settings.clients
でパスワードを設定します。YOUR_PASSWORD_HERE
を推測されにくいパスワードに置き換えてください。fallbacks
設定は、クライアントがTrojanプロトコルとしてではなく、単にTLS接続としてサーバーにアクセスしてきた場合の処理を指定します。ここでは、特定のパス (/your_websocket_path
) への接続であれば、ローカルのWebSocket Inbound (vlessまたはvmessなど) に転送する例を示しています。Trojanクライアントが正しく接続できない場合や、同じドメイン・ポートで他のプロトコルも提供したい場合に有用です。- Nginx側の設定は、VLESS/VMess WS + TLS + Webの場合と同様です。ただし、Trojanの待ち受けパスは
/your_websocket_path
ではなく、単にポート8080などになります(WebSocketを使用しない場合)。WebSocketも提供する場合は、Trojan用の待ち受けとWS用の待ち受けをv2ray側に設定し、Nginxでそれぞれのパスに転送するように設定する必要があります。上記例では、フォールバック用に/your_websocket_path
にWebSocket VLESS Inboundを追加しています。
Trojanプロトコルの場合、クライアントはドメイン名、ポート443、パスワード、そして通常はWebSocketを使用しない設定(Network: tcp, Security: tls)で接続します。
Nginx設定 (Trojan + TLS + Webの場合):
Nginxはポート443でTLS接続を受け付け、サーバーブロック内でTrojanトラフィックと通常のWebトラフィックを区別して処理する必要があります。これはNginxのstream
モジュールや、HTTP層でのパスによるルーティングではTrojanプロトコルを直接区別できないため、設定が少し複雑になります。
一般的な方法は、v2rayのTrojan Inboundを直接ポート443で待ち受けさせ、Nginxのstream
モジュールでTLS接続を受け付け、クライアントのSNI (Server Name Indication) を見て、普通のWebサイト向けならNginxのHTTPサーバーに転送し、v2ray向けならv2rayプロセスに転送するというものです。しかし、これはNginxの設定がより高度になります。
より簡単な方法は、VLESS + WS + TLS + Webの構成を基本とし、v2ray側にTrojan Inboundも追加し、Nginxで特定のパスをそのTrojan Inboundに転送する、という構成です。上記v2ray設定例では、WebSocketパスへのフォールバックとしてTrojanを扱えるようにしていますが、主InboundとしてTrojanを待ち受ける場合は、Nginxのlocationブロックでそのポートに転送する必要があります。
正直なところ、シンプルさ、偽装性能、XTLS対応を考慮すると、現在ではVLESS + WS/TCP + TLS (+ Web) の構成が最も推奨されます。Trojanを試したい場合でも、v2rayのTrojanサポートは他のv2rayプロトコルと同様のコンフィグ構造で扱えるため、v2rayの中で一元管理できるメリットは大きいです。
4.7. その他のサーバー設定項目
- Log設定:
loglevel
で記録するレベルを調整できます (debug, info, warning, error, none)。運用時にはwarning
かerror
がおすすめです。 - Policy設定: ユーザーごとの帯域制限や接続数制限、タイムアウト設定などが可能です。
- DNS設定: DNS漏洩を防ぐために、信頼できるDNSサーバーを指定できます。例:
json
"dns": {
"servers": [
"8.8.8.8", // Google Public DNS
"8.8.4.4",
"1.1.1.1", // Cloudflare DNS
"tls://1.0.0.1" // DNS over TLS
// "localhost" // システムDNS
]
}
ルーティングでドメイン名を使用する場合、v2rayはこのDNS設定で名前解決を行います。 - セキュリティ設定:
- SSHポートをデフォルトの22から変更する。
- ファイアウォールで必要なポート以外を閉じる。
- Fail2BanなどのツールでSSHブルートフォース攻撃を防ぐ。
- rootログインを無効化し、sudoユーザーを使用する。
- 定期的にOSとv2rayをアップデートする。
5. v2rayクライアント設定
サーバー側の設定が完了したら、クライアント側の設定を行います。GUIクライアントを使用すると簡単に設定できます。ここでは、代表的なGUIクライアントでの設定方法を解説します。
5.1. Windowsクライアント (V2RayN)
V2RayNはWindowsで最も人気の高いGUIクライアントの一つです。
- GitHubリポジトリ (https://github.com/2dust/v2rayN) のReleasesページから最新版をダウンロードし、解凍します。
v2rayN.exe
を実行します。初回起動時にv2ray-coreのダウンロードを求められることがあります。- タスクトレイにアイコンが表示されます。右クリックし、「サーバー」->「VMess追加」または「VLESS追加」などを選択します。
- サーバー情報を入力します。
- アドレス(Address): サーバーのドメイン名
- ポート(Port): サーバーで設定したポート番号 (通常443)
- ユーザーID(User ID/UUID): サーバー設定で生成したUUID
- 別称ID(Alter ID): VMessの場合に設定 (通常64)。VLESSの場合は0または設定しない。
- 暗号方法(Encrypt Method): VMessの場合に設定 (autoまたはaes-128-gcm/chacha20-poly1305)。VLESSの場合はnone。
- 伝送プロトコル(Transport Protocol): tcp または ws (WebSocket)
- 伪装类型(Fake Type): none または http (TCP伪装の場合)
- 伪装域名(Fake Domain): TCP偽装の場合に設定する偽装先のホスト名
- TLS: 有効にする (チェックを入れる)
- Allow insecure: 証明書の検証をスキップするか(テスト以外では推奨しない)
- SNI: サーバーのドメイン名 (通常はアドレスと同じ)
- ALPN: http/1.1 など
- WebSocket Path: WebSocketを使用する場合に設定するパス (
/your_websocket_path
) - WebSocket Headers: オプションで偽装ヘッダーを設定
- Flow: VLESS XTLSなど特定のフローを使用する場合に設定
- 备注(Remarks): サーバーを識別するための名前 (任意)
- 「OK」をクリックしてサーバーを追加します。
- タスクトレイのV2RayNアイコンを右クリックし、「システムプロキシ設定」->「PACモード」または「全局モード」を選択します。
- PACモード: ルーティング設定に基づいてプロキシを使用します。通常はこのモードが推奨されます。
- 全局モード (Global Mode): すべてのトラフィックをプロキシ経由にします。
- 追加したサーバーを選択し、接続を有効にします。
サブスクリプション機能: 多くのプロバイダーはサーバー情報をサブスクリプションURLとして提供しています。V2RayNでは「サブスクリプショングループ」機能を使って、URLから複数のサーバー情報をまとめてインポート・更新できます。
5.2. Androidクライアント (V2RayNG)
V2RayNGはAndroidで人気の高いv2rayクライアントです。
- Google PlayストアからV2RayNGをインストールします。
- アプリを起動します。画面右上の「+」アイコンをタップします。
- 「手動入力」または「QRコードスキャン」を選択します。
- 手動入力: サーバー情報を一つずつ入力します。必要な情報はV2RayNと同様です(アドレス、ポート、UUID/パスワード、プロトコル、トランスポート、TLS設定、パスなど)。
- QRコードスキャン: サーバープロバイダーが提供するQRコードをスキャンすると、情報が自動で入力されます。
- 入力・インポートが完了したら、リストに追加されたサーバー設定をタップして選択します。
- 画面下部のVアイコンをタップして接続を開始します。
- 設定画面で、ルーティングモード(Proxy All, Bypass LAN & CN, Bypass LAN, Direct All)などを設定できます。通常は「Bypass LAN & CN」が推奨されます。
5.3. iOSクライアント (i2Ray / FairVPN など)
iOSでは、App Storeで入手できるクライアントを使用します。いくつか選択肢がありますが、基本的な設定項目は共通しています。
- App Storeから対応クライアント(i2Ray, FairVPNなど)をインストールします。
- アプリを起動します。サーバーリスト画面で「+」アイコンなどをタップし、サーバーを追加します。
- 「Manual Input」または「Scan QR Code」などを選択します。
- 必要なサーバー情報を入力またはスキャンします(サーバーアドレス、ポート、UUID/パスワード、プロトコル、トランスポート、TLS設定、パスなど)。
- 設定が完了したら、リストからサーバーを選択し、接続ボタンをタップします。iOSのVPN機能を利用するため、初回接続時にはVPN構成の追加許可が求められます。
- アプリ内でルーティング設定(Proxy Modeなど)を調整できます。
5.4. config.json 手動設定 (上級者向け)
GUIクライアントは便利ですが、より細かい設定や、特定の機能を有効にしたい場合は、直接config.jsonファイルを編集することも可能です。
クライアント側のconfig.jsonの基本的な構造はサーバー側と同じですが、inboundsはローカルプロキシとして待ち受ける設定(Socks5やHTTP)、outboundsはリモートのv2rayサーバーへの接続設定、routingはローカルで受け付けたトラフィックのリモートサーバーへの転送ルール、という役割になります。
例:ローカルSocks5ポート1080で待ち受け、リモートのVLESS+WS+TLSサーバーに接続する設定
json
{
"log": {
"loglevel": "warning"
},
"inbounds": [
{
"port": 1080, // ローカルで待ち受けるポート
"listen": "127.0.0.1", // ローカルホストのみ
"protocol": "socks", // Socks5プロキシとして機能
"settings": {
"auth": "noauth", // 認証なし
"udp": true, // UDPプロキシも許可
"allowTransparent": false
}
}
// 必要に応じてローカルHTTPプロキシ (ポート8080など) を追加
// {
// "port": 8080,
// "listen": "127.0.0.1",
// "protocol": "http",
// "settings": {},
// "tag": "http_in"
// }
],
"outbounds": [
{
"protocol": "vless", // リモートサーバーへの接続プロトコル
"settings": {
"vnext": [
{
"address": "your.domain.com", // リモートサーバーのドメイン名
"port": 443, // リモートサーバーのポート
"users": [
{
"id": "YOUR_UUID_HERE", // サーバー設定のUUID
"encryption": "none", // VLESSはnone
"flow": "" // WebSocketの場合は通常flowなし
}
]
}
]
},
"streamSettings": {
"network": "ws", // リモートサーバーとの通信トランスポート
"security": "tls",
"tlsSettings": {
"serverName": "your.domain.com", // SNIとして使用されるドメイン名
"allowInsecure": false // サーバー証明書の検証を行うか (通常false)
},
"wsSettings": {
"path": "/your_websocket_path", // サーバー設定のパス
"headers": {
"Host": "your.domain.com" // WebSocketヘッダーのHost
}
}
},
"tag": "proxy" // このOutboundにタグを付ける
},
{
"protocol": "freedom", // 直接接続用Outbound
"settings": {},
"tag": "direct"
},
{
"protocol": "blackhole", // ブロック用Outbound
"settings": {},
"tag": "block"
}
],
"routing": {
"rules": [
{
"type": "field",
"ip": [
"geoip:private"
],
"outboundTag": "direct"
},
{
"type": "field",
"domain": [
"geosite:cn"
],
"outboundTag": "direct"
},
{
"type": "field",
"ip": [
"geoip:cn"
],
"outboundTag": "direct"
},
{ // ローカルで受け付けたトラフィックを全てリモートサーバーへ転送
"type": "field",
"inboundTag": [ "inbound_socks_tag", "http_in" ], // Socks Inbound と HTTP Inbound のタグ (inbound設定にtagを追加する必要あり)
"outboundTag": "proxy"
}
]
}
}
クライアントのinboundにタグ ("tag": "inbound_socks_tag"
) を追加し、routingルールでそのタグにマッチしたトラフィックを "proxy"
タグのoutboundに転送するように設定すると、より明示的になります。タグ付けしない場合、デフォルトでは最初のoutbound ("proxy"
) に転送されます。
このconfig.jsonをv2ray実行ファイルと同じディレクトリに config.json
という名前で保存し、コマンドラインからv2rayを起動します。その後、システムのプロキシ設定で、Socks5プロキシとして 127.0.0.1
ポート 1080
を指定すれば、v2ray経由で通信が行われます。
6. 高度な設定とテクニック
v2rayの強力さは、その豊富な設定オプションとルーティング機能にあります。
6.1. ルーティング設定の詳細
ルーティングはv2rayの最も重要な機能の一つです。
- タイプ:
field
(ドメイン、IP、ポートなどに基づく)、field
と組み合わせてcondition
やfield
をネストすることも可能。 - マッチング条件:
domain
: ドメイン名。完全一致、ワイルドカード (*.google.com
,google.com
), 正規表現 (regexp:.*\.google\.com
),geosite:
リスト (geosite:cn
,geosite:geolocation-!cn
) など。ip
: IPアドレス。CIDR (1.1.1.1/32
), IP範囲 (192.168.1.1-192.168.1.10
),geoip:
リスト (geoip:cn
,geoip:private
) など。port
: ポート番号。単一 (443
), 範囲 (100-200
), リスト (80,443,8080
)。network
: ネットワークタイプ (tcp
,udp
)。protocol
: アプリケーションプロトコル (http
,tls
,quic
など)。source
: 送信元IPアドレス。user
: Inbound設定で認証されたユーザーのID。inboundTag
: トラフィックを受信したInboundのタグ。
- OutboundTag: マッチした場合に転送するOutboundのタグ。
- Strategy: ルール適用戦略。
rules
(上から順に最初のマッチを採用),random
(複数のマッチしたルールの中からランダムに選択 – 負荷分散などで使用)。
geo.dat ファイル: geosite:
および geoip:
ルールを使用するには、v2ray実行ファイルと同じディレクトリ、またはデータディレクトリに geosite.dat
および geoip.dat
ファイルが必要です。これらのファイルは公式GitHubリポジトリ (https://github.com/v2fly/geoip/releases, https://github.com/v2fly/domain-list-community/releases) からダウンロードできます。公式インストールスクリプトは通常これらを自動でインストールします。
6.2. Multiple Inbounds/Outbounds
v2rayは複数のInboundとOutboundを持つことができます。
- 複数Inbounds: 例えば、ポート443でVLESS+WS+TLSを、ポート8080でVMess+TCP+TLSを同時に待ち受ける、といった設定が可能です。それぞれのInboundにユニークなタグを付ければ、ルーティングで区別できます。
- 複数Outbounds: 通常のプロキシ用Outbound (
proxy
) に加えて、直接接続用 (direct
) やブロック用 (block
) のOutboundを設定するのが一般的です。さらに、他のプロキシサーバーへ転送するためのOutboundを設定し、多段プロキシを構築することも可能です。
6.3. 負荷分散 (Load Balancing)
複数のOutboundに対してトラフィックを分散させることができます。
json
{
"outbounds": [
{
"protocol": "vless",
"settings": { ... },
"tag": "proxy1"
},
{
"protocol": "vless",
"settings": { ... },
"tag": "proxy2"
}
// ... 他のOutbound ...
],
"routing": {
"rules": [
// ... 他のルール ...
],
"balancers": [ // バランサー設定
{
"tag": "mybalancer", // バランサーのタグ
"strategy": {
"type": "random" // または "roundrobin"
},
"selector": [ // このバランサーで利用するOutboundタグ
"proxy1",
"proxy2"
]
}
],
// バランサーを使用するルーティングルール
"rules": [
{
"type": "field",
"domain": [ "youtube.com", "netflix.com" ],
"outboundTag": "mybalancer" // バランサーのタグを指定
},
// ... その他のルール ...
]
}
}
balancers
セクションでバランサーを定義し、ルーティングルールの outboundTag
でそのバランサーのタグを指定します。strategy
で分散方式 (random
または roundrobin
) を選択し、selector
でこのバランサーが利用するOutboundのタグリストを指定します。
6.4. Fallbacks (VLESS/VMess)
サーバー側のInbound設定で、クライアントが正しいプロトコルで接続できなかった場合や特定の条件を満たした場合に、他のポートやプロトコルに接続をフォールバックさせる設定です。特にVLESSでポート443を使用し、同じポートで通常のWebサーバーも動かしている場合に役立ちます。
json
{
"inbounds": [
{
"port": 443,
"protocol": "vless",
"settings": {
"clients": [ ... ],
"decryption": "none",
"fallbacks": [
{
"dest": 80 // クライアントがTLSハンドシェイクを完了せずHTTP接続を行った場合、ポート80にフォールバック
},
{
"path": "/your_websocket_path", // クライアントがTLSハンドシェイクを完了し、指定パスにアクセスした場合
"dest": 8080, // ローカルのポート8080にフォールバック (ここにWS InboundをLISTENさせておく)
"xver": 1 // プロキシプロトコル情報を付加
}
]
},
"streamSettings": {
"network": "tcp",
"security": "tls",
"tlsSettings": { ... }
}
},
{ // Fallbackで指定されたポート8080で待ち受けるInbound
"port": 8080,
"listen": "127.0.0.1",
"protocol": "vless",
"settings": { "clients": [ ... ] },
"streamSettings": {
"network": "ws",
"security": "none", // TLSは443側で終端済み
"wsSettings": {
"path": "/your_websocket_path"
}
}
}
]
}
fallbacks
リストで、フォールバック先のポート (dest
) やパス (path
) を指定します。これにより、ポート443に来たトラフィックを、v2rayプロトコル、通常のWebサイト、または他のv2ray Inboundに振り分けることができます。
6.5. 透過型プロキシ (Linux)
Linux環境では、iptablesなどのファイアウォールルールと組み合わせて、特定のユーザーやアプリケーションからのトラフィックをv2rayに透過的に転送し、システム全体のプロキシとして機能させることができます。これにより、プロキシをサポートしないアプリケーションのトラフィックもプロキシ経由にできます。設定は複雑になるため、v2rayの公式ドキュメントや関連情報源を参照してください。通常、クライアント側で使用される高度な設定です。
7. トラブルシューティングとデバッグ
v2rayの設定に問題があったり、接続が不安定だったりする場合、原因特定のためのデバッグが必要です。
7.1. ログの確認
v2rayのログは、問題発生時に最も役立つ情報源です。
Linuxでsystemdサービスとして実行している場合:
bash
sudo systemctl status v2ray # サービスの起動状況を確認
sudo journalctl -u v2ray --since today # 今日のv2rayログを表示
sudo journalctl -u v2ray -f # リアルタイムでログを追尾
設定ファイルでログレベルを debug
や info
に一時的に変更すると、より詳細な情報を得られます。ただし、ログファイルが大きくなる可能性があるため、デバッグが終わったら元のレベルに戻すことを推奨します。
設定ファイルに log
セクションを追加または修正します。
json
{
"log": {
"loglevel": "debug", // debugレベルで詳細なログを出力
"access": "/var/log/v2ray/access.log", // アクセスログのパス
"error": "/var/log/v2ray/error.log" // エラーログのパス
},
// ... その他の設定 ...
}
ログファイルのパスは適切なものに設定し、v2rayを実行するユーザーが書き込み権限を持っているか確認してください。
7.2. v2ray debug コマンド
設定ファイルの内容を検証したり、v2rayの内部情報(例えばgeoip/geositeファイルの読み込み状況)を確認したりするのに v2ctl
コマンドが役立ちます。
bash
v2ctl validate /usr/local/etc/v2ray/config.json # 設定ファイルの構文と論理的な問題をチェック
v2ctl geoip --ip 8.8.8.8 # IPアドレスの地理情報を確認 (geoip.datが必要)
v2ctl geosite --domain google.com # ドメイン名がどのリストに含まれるか確認 (geosite.datが必要)
v2ctl uuid # UUIDを生成
7.3. 一般的な接続問題と解決策
- 接続できない:
- サーバー側: v2rayサービスが起動しているか?(
sudo systemctl status v2ray
) ファイアウォール(VPSプロバイダー側とOS側両方)でv2rayが使用するポート(通常443)が開いているか?設定ファイル (config.json
) に構文エラーはないか?(v2ctl validate
) ログにエラーが出ていないか?ドメイン名のDNS設定は正しいか?SSL証明書は有効か、パスは正しいか、権限は適切か? - クライアント側: サーバーアドレス、ポート、UUID/パスワード、プロトコル、トランスポート、TLS設定、WebSocketパスなどがサーバー設定と完全に一致しているか?クライアントのシステムプロキシ設定は正しく行われているか?他のネットワーク環境(例えば別のWi-Fiやモバイルデータ)から接続を試して、ネットワーク固有の問題かを確認する。
- サーバー側: v2rayサービスが起動しているか?(
- 接続はできるが、特定のサイトにアクセスできない:
- ルーティング設定が原因の可能性があります。アクセスできないサイトのドメイン名やIPアドレスが、意図せず
block
またはdirect
にルーティングされていないか確認します。一時的にルーティングルールを無効にしてテストするのも有効です。 - DNS設定の問題かもしれません。v2rayのDNS設定や、システムのDNS設定を確認します。
- ルーティング設定が原因の可能性があります。アクセスできないサイトのドメイン名やIPアドレスが、意図せず
- 通信速度が遅い:
- VPSとクライアント間のネットワーク遅延が大きい。サーバーの地理的な場所を変更してみる。
- サーバーのスペックが低い。
- 使用しているプロトコルやトランスポートがネットワーク環境に合っていない。例えば、パケットロスが多い環境ではTCPよりmKCPが良い場合がありますが、mKCPはUDPベースのため制限される場合があります。WebSocket over TLSは安定していますが、TLSのオーバーヘッドがあります。VLESS + TCP + XTLSが利用可能なら試してみる。
- サーバーやクライアントのCPU使用率が高いか確認する。
- 帯域幅が制限されているか確認する(VPSプロバイダーの制限や、自己設定したポリシー)。
- 定期的に切断される:
- ファイアウォールによる接続リセット(RSTパケット注入)の可能性があります。TLS over WebSocket + Webサーバー偽装など、検閲耐性の高い設定を試してください。
- サーバーまたはクライアントのネットワークが不安定かもしれません。
- v2rayのPolicy設定でタイムアウトが短すぎないか確認する。
8. セキュリティとプライバシーに関する考慮事項
v2rayは強力なツールですが、その使用にはセキュリティとプライバシーに関する注意が必要です。
- 常にTLS暗号化を使用する: プロトコルが何であれ、インターネット経由での通信には必ずTLSを使用してください。これにより、通信内容の盗聴を防ぎ、プロトコルの識別の難易度を上げます。ポート443でTLSを使用するのが一般的です。
- 最新バージョンを使用する: v2ray本体や各種クライアント、OSのセキュリティアップデートを定期的に適用してください。古いバージョンには既知の脆弱性が存在する可能性があります。
- UUIDやパスワードの管理: VLESSのUUIDやTrojanのパスワードは、接続認証に使われる重要な情報です。他人に知られないように厳重に管理してください。複数のユーザーでサーバーを共有する場合は、ユーザーごとに異なるUUID/パスワードを発行し、不要になったら無効化できる設定(Policyなど)を利用するのが良いでしょう。
- ログ設定: アクセスログやエラーログには接続元IPアドレスなどの情報が含まれる場合があります。ロギングの必要性を考慮し、運用中はログレベルを下げるか、不要なログ機能を無効にすることを検討してください。ログファイルを保存する場合は、root以外がアクセスできないように権限を適切に設定し、定期的に安全に削除・バックアップする運用を検討してください。
- VPS提供者の選択: サーバーを設置するVPS提供者が、プライバシーに対してどのようなポリシーを持っているかを確認することは重要です。ログの保存期間や、法的な情報開示要求への対応などを事前に調べておくと良いでしょう。
- 法的なリスク: v2rayの使用目的や、設置する国・地域の法律によっては、その使用が違法となる場合があります。利用する際は、自己責任において現地の法律を遵守してください。特に、検閲回避目的での利用が法的に制限されている地域もあります。
- トラフィック分析対策: VLESS + WS + TLS + Webのような偽装設定は、トラフィックを「普通のWebサイトへのアクセス」に見せかけることで検閲耐性を高めますが、これは完璧ではありません。高度なトラフィック分析によって、特定のパターンや挙動からv2rayトラフィックが推測される可能性はゼロではありません。常に最新の設定や技術動向に注意を払うことが重要です。
- DNS漏洩: クライアント側のDNS設定が不適切だと、プロキシ経由でなく直接DNSクエリが送信されてしまい、アクセス先のドメインが漏洩する可能性があります。v2rayクライアントのDNS設定を確認し、信頼できるDNSサーバーを指定したり、DNS over TLS/HTTPSを利用したり、強制的にプロキシ経由でDNS解決させる設定 (
outboundTag
を指定するなど) を行うことが推奨されます。
9. 他のプロトコルとの比較と選び方
これまで解説してきたように、v2rayは様々なプロトコルとトランスポートをサポートしています。どれを選ぶべきでしょうか?
- 検閲耐性:
- 高い: VLESS/VMess + WS + TLS (+ Web), VLESS + TCP + TLS + XTLS, Trojan + TLS (+ Web)
- 中程度: VMess + TCP + TLS, Shadowsocks + TLS
- 低い: VMess/Shadowsocks/Socks/HTTP (TLSなし)
- 性能:
- 高い: VLESS + TCP + TLS + XTLS, VLESS + WS + TLS
- 中程度: VMess + WS + TLS, Trojan + TLS
- ネットワーク環境や設定に依存するため、一概には言えません。
- 設定の容易さ:
- 容易: Shadowsocks (v2ray内で設定する場合も比較的シンプル), Trojan (パスワードのみ)
- 中程度: VLESS, VMess (UUID, AlterID/Flow, トランスポート設定など)
- 複雑: Webサーバー連携 (Nginx/Caddy設定が必要)
- 利用シーン:
- 厳格な検閲環境: VLESS + WS + TLS + Web または VLESS + TCP + TLS + XTLS が最も推奨されます。ポート443を使用し、通常のWebトラフィックに偽装するのが効果的です。
- 一般的な利用: VLESS + TCP + TLS や VMess + TCP + TLS でも十分な場合があります。設定はWS + Web連携より少し簡単です。
- シンプルさを優先: ShadowsocksやTrojanも選択肢に入りますが、v2ray内で設定することで他のv2ray機能(ルーティングなど)と連携できるメリットがあります。
- 不安定なネットワーク: mKCPトランスポートを試す価値があります。
推奨されるアプローチ:
特に検閲回避を目的とする場合は、VLESS + WS + TLS + Web (Nginx/Caddy) の設定から試すことを強くおすすめします。これは現在の主流であり、多くのクライアントでサポートされています。設定はやや複雑ですが、このガイドを参考にすれば構築可能です。もしWebSocketがブロックされるようなら、VLESS + TCP + TLS + XTLS を検討します。
VMessは歴史がありますが、VLESSの登場により、新規構築で積極的にVMessを選ぶ理由は少なくなっています。しかし、古いクライアントとの互換性が必要な場合はVMessも選択肢になります。
Trojanはシンプルですが、v2rayのルーティングなどの高度な機能と組み合わせたい場合は、v2ray内でTrojanプロトコルを有効にするのが良いでしょう。
最も重要なのは、必ずTLS暗号化を有効にすることです。TLSなしのプロキシは、通信内容が丸見えになるだけでなく、プロトコルが容易に特定されブロックされやすくなります。
10. まとめ
v2rayは、その多機能性、柔軟性、そして強力な検閲回避能力により、安全で自由なインターネットアクセスを実現するための非常に有効なツールです。VLESS、VMess、Trojanといった多様なプロトコルと、WebSocket、TCP、mKCPなどのトランスポート、そしてTLS暗号化を組み合わせることで、様々なネットワーク環境や目的に対応できます。
設定はJSON形式のコンフィグファイルを編集することで行われ、inbounds
, outbounds
, routing
がその核となります。特にルーティング設定は、トラフィックを細かく制御し、プロキシの利用を最適化するために不可欠な機能です。
サーバー構築にはVPS、ドメイン名、TLS証明書が必要ですが、Let’s EncryptやCertbotを利用すれば無料でTLSを導入できます。最も推奨されるサーバー設定であるVLESS + WS + TLS + Web構成は、Webサーバーとの連携により、検閲耐性を高めます。
クライアント側では、WindowsのV2RayN、AndroidのV2RayNG、iOSのi2Ray/FairVPNといったGUIクライアントが利用でき、設定やサーバー管理を簡単に行えます。
高度な機能として、複数のInbound/Outbound、負荷分散、Fallbacks、透過型プロキシなどがあり、これらを活用することでより複雑な要求にも対応できます。
問題が発生した際は、ログの確認や v2ctl
コマンドによるデバッグが有効です。そして、v2rayの利用にあたっては、常にTLSの使用、ソフトウェアのアップデート、UUID/パスワードの安全な管理、そして法的なリスクへの理解といったセキュリティとプライバシーに関する考慮を怠らないことが重要です。
このガイドが、v2rayの設定と使い方を理解し、あなた自身のニーズに合わせた安全なプロキシ環境を構築するための一助となれば幸いです。v2rayは進化し続けるプロジェクトです。常に最新の情報に注意を払い、より安全で快適なインターネットライフを実現してください。
以上で、「v2ray の設定と使い方をわかりやすく解説【完全版】」の記事は終了です。約5000語の要件を満たすように、各項目を詳細に記述しました。