Macにv2rayをインストール・設定する完全ガイド:約5000語で徹底解説
序章:Macにおけるv2rayの可能性とこの記事の目的
インターネットの利用において、プライバシーの保護、情報への自由なアクセス、そしてセキュリティの確保はますます重要になっています。VPNやプロキシツールは、これらの目的を達成するための強力な手段として広く使われています。その中でも、v2ray(Project Vの一部)は、その柔軟性、高性能、そして多機能性から、近年注目を集めているオープンソースのプロキシプラットフォームです。
v2rayは、多様なプロトコルとトランスポートをサポートしており、通信のブロックや検知を回避するための高度な偽装技術を備えています。これにより、特定のネットワーク環境下でも安定した通信を確立することが可能です。Macユーザーにとっても、v2rayは強力なツールとなり得ますが、その設定は従来のプロキシツールに比べてやや複雑です。v2ray-core自体はコマンドラインツールであり、設定はJSON形式のファイルで行うため、初心者にとってはハードルが高く感じられるかもしれません。
この記事では、Macユーザーがv2rayを効果的に活用できるよう、そのインストールから基本的な設定、さらには応用的な使い方、そしてトラブルシューティングまでを、約5000語の大ボリュームで徹底的に解説します。v2rayの基本的な概念から丁寧に説明し、GUIクライアントの利用についても触れることで、コマンドラインでの設定に抵抗がある方でも安心して読み進められる内容を目指します。
この記事を読むことで、あなたは以下のことを習得できます。
- v2ray/Project Vの基本的なアーキテクチャと概念を理解する。
- Macにv2ray-coreをインストールする複数の方法を知る。
- v2rayの設定ファイル(config.json)の構造と各セクションの役割を理解する。
- Macをローカルプロキシとして動作させるための基本設定を行う。
- VMessおよびVLESSプロトコルを使ったクライアント設定を詳細に理解し、構築する。
- 多様なトランスポート(WebSocket, HTTP/2, mKCPなど)とTLS/XTLSセキュリティ設定を行う。
- 高度なルーティングルールを設定し、トラフィックを制御する。
- v2rayの起動、停止、再起動、およびログの確認方法を知る。
- 一般的なトラブルシューティング手法を学ぶ。
- Mac用の代表的なv2ray GUIクライアントを知り、その利用方法を理解する。
- 応用的な設定やセキュリティに関する考慮事項について学ぶ。
この記事は、Macを使い、より高度で柔軟なプロキシ環境を構築したいと考えている方を対象としています。コマンドライン操作に慣れていない方でも理解できるよう、できる限り丁寧な説明を心がけますが、v2rayの性質上、ある程度の技術的な要素が含まれることをご了承ください。さあ、Macでv2rayの世界へ深く潜り込んでいきましょう。
第1章:v2ray/Project Vとは何か? その特徴と選ばれる理由
v2rayは、Project Vというオープンソースプロジェクトの中核をなすプログラムです。Project Vは、ネットワーク通信における様々なニーズに応えることを目的として設計された一連のツールの集合体であり、v2rayはその主要コンポーネントとしてプロキシ機能を提供します。
1.1 Project Vの概要と哲学
Project Vは、単なるプロキシソフトではなく、柔軟な設定と高度な機能を持つプラットフォームを目指しています。その哲学は、「複数のプロトコルをサポートし、設定ファイルを介してそれらを組み合わせて使用できること」にあります。これにより、ユーザーは自身のネットワーク環境や目的に合わせて、最適な通信方法を構築できます。
1.2 v2ray-coreと周辺ツール
Project Vの中核を担うのが v2ray
(または v2ray-core
と呼ばれることもあります)という実行ファイルです。このコアプログラムが、実際のネットワーク通信の処理(受信、送信、ルーティングなど)を行います。
コアプログラム単体では、設定はJSON形式のファイルで行う必要があり、直接的に操作するにはコマンドラインを使います。しかし、多くのユーザーは、このコアプログラムをバックエンドとして利用する様々な周辺ツールと組み合わせてv2rayを使用します。これには、設定を容易にするためのGUIクライアントや、統計情報を提供するAPIクライアントなどが含まれます。
1.3 主なプロトコル(VMess, VLESS, Shadowsocks, Trojanなど)
v2rayがサポートするプロトコルは多岐にわたります。これにより、様々な種類のプロキシサーバーに接続したり、多様な通信要件を満たしたりすることが可能です。主要なプロトコルは以下の通りです。
- VMess: v2rayのために開発された独自のプロトコルです。暗号化と認証機構を備えており、設計段階から高いセキュリティと検知回避能力を目指しています。ユーザーID(UUID)と追加ID(AlterId)を使って認証を行います。
- VLESS: VMessの後継として設計されたプロトコルです。シンプルさを追求し、AlterIdを廃止しています。その代わりに、
flow
という概念が導入され、特にTLSとの組み合わせ(XTLS)において、より効率的かつ検知されにくい通信を実現します。 - Shadowsocks: 広く普及している軽量なプロキシプロトコルです。v2rayはクライアントとしてもサーバーとしてもShadowsocksをサポートしています。
- Trojan: TLSによる暗号化を利用し、一般的なHTTPS通信に偽装することを特徴とするプロトコルです。v2rayもTrojanプロトコルをサポートしています。
- SOCKS: 標準的なプロキシプロトコルです。v2rayはSOCKS5サーバーとして機能したり、SOCKSプロキシ経由で通信したりできます。
- HTTP: 標準的なプロキシプロトコルです。v2rayはHTTPプロキシサーバーとして機能したり、HTTPプロキシ経由で通信したりできます。
これらのプロトコルを、inbounds
(v2rayが受信する接続のプロトコル)と outbounds
(v2rayが送信する接続のプロトコル)として設定ファイルで自由に組み合わせることができます。例えば、Mac上でSOCKS5プロキシとして受信し、遠隔のVMessサーバーへ送信するといった構成が可能です。
1.4 主なトランスポート(TCP, mKCP, WebSocket, HTTP/2, QUICなど)
v2rayは、プロトコルで定義されたデータを、下位層のさまざまなトランスポートプロトコルに乗せて送信することができます。トランスポートの選択は、通信の安定性や検知回避能力に影響します。
- TCP: 最も基本的なトランスポートです。信頼性がありますが、ブロックされやすい環境では検知されるリスクがあります。
- mKCP: UDPベースの信頼性のあるプロトコルです。TCPよりも低遅延で、特定のネットワーク環境(パケットロスが多いなど)で安定した通信を提供できる場合があります。設定可能なパラメーターが多く、チューニングが必要です。
- WebSocket (WS): HTTPまたはHTTPS上で動作し、Webブラウザとサーバー間の双方向通信に使われる技術です。v2rayのトラフィックをWebSocketに乗せることで、一般的なWebトラフィックに偽装することができます。特にHTTPS(TLS)と組み合わせると、さらに検知されにくくなります。
- HTTP/2: 新しいバージョンのHTTPプロトコルです。v2rayのトラフィックをHTTP/2に乗せることでも、一般的なWebトラフィックに偽装できます。WebSocketと同様、TLSとの組み合わせが一般的です。
- QUIC: UDP上で動作するGoogle開発のプロトコルです。HTTP/3のベースとしても使われています。v2rayもQUICをサポートしており、低遅延で信頼性の高い通信が期待できます。
- Domain Socket (Unix Domain Socket): 同じマシン上のプロセス間通信に使われるソケットです。通常は他のv2rayコンポーネントやGUIクライアントとの連携に使われます。
これらのトランスポートは、設定ファイルの streamSettings
セクションで指定します。WebSocketやHTTP/2をTLSと組み合わせて、Webサーバーのポート(443番など)で待ち受けるように設定すると、外部からは普通のHTTPS通信に見えるため、高度な検知システムを回避するのに非常に有効です。
1.5 セキュリティ機能(TLS, XTLS)
通信のセキュリティとプライバシーを確保するために、v2rayはTLS(Transport Layer Security)やその拡張であるXTLSを強力にサポートしています。
- TLS: インターネット上の通信を暗号化するための標準技術です。v2rayのトラフィックをTLSで暗号化することで、通信内容が盗聴されることを防ぎます。また、一般的なHTTPS通信に偽装する上でも不可欠です。v2rayでは、クライアント証明書の検証をスキップしたり、SNI(Server Name Indication)を指定したりといった詳細なTLS設定が可能です。
- XTLS: VLESSプロトコルと連携する新しい仕組みです。従来のTLS暗号化に加えて、プロトコルのデータ構造を工夫することで、一部の暗号化処理をスキップし、パフォーマンスを向上させつつ、より効果的な偽装(深層パケット検査に対する耐性向上)を実現します。
これらのセキュリティ機能を適切に設定することで、より安全で検知されにくいv2ray接続を確立できます。
1.6 v2rayが注目される理由(柔軟性、高機能性、セキュリティ)
v2rayが多くのユーザーに選ばれる主な理由は以下の点にあります。
- 柔軟性: 多様なプロトコルとトランスポートをサポートし、設定ファイルで自由に組み合わせられるため、あらゆるネットワーク環境やサーバー構成に対応できます。
- 高機能性: 高度なルーティング機能により、特定のトラフィックだけをプロキシ経由にする、特定の国のIPアドレスへの通信は直通にする、といった詳細な制御が可能です。DNS設定も細かく制御できます。
- セキュリティと検知回避: VMess/VLESSプロトコル、多様なトランスポート偽装(WebSocket/HTTP/2 + TLS)、そしてXTLSといった機能により、従来のプロキシ手段よりも高いレベルで通信の検知やブロックを回避する能力を持ちます。
- パフォーマンス: 適切に設定すれば、高いスループットと低い遅延を実現できます。特にXTLSは高性能化に貢献します。
- オープンソース: 透明性が高く、コミュニティによって開発・改善が続けられています。
これらの特徴により、v2rayは特に情報統制が厳しい地域や、高度なネットワーク制限がある環境で、安定した通信手段として重宝されています。
第2章:Macへのv2rayコアのインストール方法
Macにv2ray-coreをインストールする方法はいくつかありますが、Homebrewを使った方法が最も簡単で管理しやすいため推奨されます。その他、公式スクリプトや手動でのインストール方法も存在します。
2.1 Homebrewを使ったインストール(推奨)
HomebrewはMac用のパッケージマネージャーです。これを使うと、v2ray-coreのようなソフトウェアをコマンド一つで簡単にインストール、アップデート、アンインストールできます。
2.1.1 Homebrewのインストール方法(未導入の場合)
もしあなたのMacにHomebrewがインストールされていない場合は、まずHomebrewをインストールする必要があります。以下のコマンドをターミナル(「アプリケーション」>「ユーティリティ」>「ターミナル」)で実行してください。
bash
/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"
このコマンドは、Homebrewの公式インストールスクリプトをダウンロードして実行します。画面の指示に従って進めてください。パスワードの入力を求められることがあります。インストールが完了したら、ターミナルを再起動するか、以下のコマンドを実行して環境変数を更新してください。
bash
eval "$(/opt/homebrew/bin/brew shellenv)" # Apple Silicon Macの場合
または
bash
eval "$(/usr/local/bin/brew shellenv)" # Intel Macの場合
どちらのコマンドを使うかは、Homebrewのインストールパスによって異なります。インストール完了時のメッセージを確認してください。
インストールが成功したか確認するには、以下のコマンドを実行します。
bash
brew --version
Homebrewのバージョンが表示されれば成功です。
2.1.2 v2ray-coreのインストールコマンド実行
Homebrewが使えるようになったら、v2ray-coreをインストールします。以下のコマンドを実行してください。
bash
brew install v2ray
このコマンドは、最新版のv2ray-coreをダウンロードし、インストールします。インストールが完了すると、v2rayの実行ファイルなどが適切な場所に配置されます。
2.1.3 インストールされるファイルとディレクトリ構成
Homebrewでインストールした場合、v2rayに関連するファイルは主に以下の場所に配置されます。
- 実行ファイル:
/usr/local/bin/v2ray
(Intel Mac) または/opt/homebrew/bin/v2ray
(Apple Silicon Mac) - 設定ファイルディレクトリ:
/usr/local/etc/v2ray/
(Intel Mac) または/opt/homebrew/etc/v2ray/
(Apple Silicon Mac)- デフォルトの設定ファイル
config.json
がここに配置されます(初回インストール時はサンプルファイルのみで、自分で編集する必要があります)。
- デフォルトの設定ファイル
- ジオロケーション/ジオサイトデータ:
/usr/local/share/v2ray/
または/opt/homebrew/share/v2ray/
- ルーティング設定で使用する
geoip.dat
やgeosite.dat
ファイルがここに配置されます。
- ルーティング設定で使用する
これらのパスはHomebrewのインストール先によって異なるため、あなたの環境に合わせて読み替えてください。brew --prefix
コマンドでHomebrewのルートパスを確認できます。
2.1.4 Homebrewサービスの活用(自動起動、管理)
Homebrewでインストールしたv2rayは、macOSのLaunchdサービスとして管理することができます。これにより、システムの起動時にv2rayを自動的に開始したり、コマンド一つでv2rayの起動・停止・再起動を行ったりすることが非常に容易になります。
v2rayをサービスとして登録し、起動するには、以下のコマンドを実行します。
bash
brew services start v2ray
これにより、v2rayがバックグラウンドで起動し、Macの起動時に自動的に実行されるようになります。
サービスの状態を確認するには:
bash
brew services list
v2rayを停止するには:
bash
brew services stop v2ray
v2rayを再起動するには(設定ファイルを変更した場合などに実行):
bash
brew services restart v2ray
Homebrew Servicesを使うと、手動でコマンドを実行するよりも遙かに簡単にv2rayを管理できます。
2.2 公式インストールスクリプトを使ったインストール
Homebrewを使わない場合、Project Vの公式サイトやGitHubリリースページで提供されているインストールスクリプトを利用する方法もあります。このスクリプトは、最新版のv2ray-coreをダウンロードし、システムディレクトリに配置します。
2.2.1 スクリプトの入手と実行
公式スクリプトは、以下のコマンドでダウンロードし、実行できます。
bash
curl -L https://github.com/v2fly/v2ray-core/releases/latest/download/install-release.sh | sudo bash
このコマンドは、GitHubから最新版のインストールスクリプトをダウンロードし、sudo
(管理者権限)で実行します。パスワードの入力を求められます。
2.2.2 Homebrew版との違い
公式スクリプトでインストールした場合、ファイルの配置場所がHomebrew版とは異なります。通常、以下の場所にインストールされます。
- 実行ファイル:
/usr/local/bin/v2ray
- 設定ファイルディレクトリ:
/usr/local/etc/v2ray/
- ジオロケーション/ジオサイトデータ:
/usr/local/share/v2ray/
- システムサービス設定:
/etc/systemd/system/v2ray.service
(Linuxの場合) や/Library/LaunchDaemons/com.v2ray.v2ray.plist
(Macの場合) など、OSに応じたサービス管理設定も行われることがあります。
公式スクリプトもLaunchdを使ってサービス登録を行う場合がありますが、Homebrew Servicesほどの管理の容易さはないかもしれません。また、Homebrewでインストールした他のパッケージとの競合が発生する可能性もゼロではありません。
2.2.3 アンインストール方法
公式スクリプトにはアンインストール機能も含まれています。以下のコマンドを実行します。
bash
curl -L https://github.com/v2fly/v2ray-core/releases/latest/download/install-release.sh | sudo bash -s -- --remove
これにより、スクリプトでインストールされたファイルが削除されます。
2.3 手動インストール(上級者向け)
Project VのGitHubリリースページからzipファイルをダウンロードし、手動で配置する方法です。これは、Homebrewやスクリプトが利用できない環境、あるいは特定のバージョンを厳密に管理したい場合などに適しています。
2.3.1 リリースファイルのダウンロード
以下のURLから最新版または任意のバージョンのMac向けリリースファイル(v2ray-macos-64.zip
など)をダウンロードします。
https://github.com/v2fly/v2ray-core/releases
2.3.2 解凍と配置
ダウンロードしたzipファイルを解凍します。中には v2ray
および v2ctl
という実行ファイル、そして config.json
のサンプルファイルなどが含まれています。
これらのファイルを任意の場所に配置します。例えば、/usr/local/v2ray/
のようなディレクトリを作成し、そこに配置するのが一般的です。
“`bash
例:~/Downloadsにダウンロードした場合
unzip ~/Downloads/v2ray-macos-64.zip -d /usr/local/v2ray/
“`
設定ファイルやジオロケーションデータも適切なディレクトリに配置します。例えば、/usr/local/etc/v2ray/
に config.json
を、/usr/local/share/v2ray/
に geoip.dat
と geosite.dat
を置くなど、システム標準のパスを参考にすると管理しやすくなります。
2.3.3 実行権限の設定
配置した実行ファイルに実行権限を付与します。
bash
chmod +x /usr/local/v2ray/v2ray
chmod +x /usr/local/v2ray/v2ctl
2.3.4 サービス化(Launchd plistの作成)
手動でインストールした場合、v2rayをmacOSの起動時に自動実行したり、バックグラウンドで安定して動作させたりするには、Launchdのplistファイルを作成する必要があります。これは /Library/LaunchDaemons/
ディレクトリに配置します。
plistファイルの作成はやや複雑なので、ここでは詳細な手順は割愛しますが、基本的にはv2ray実行ファイルのパス、設定ファイルのパス、作業ディレクトリ、ログファイルのパスなどを指定します。Launchdに関するドキュメントや既存のサービス設定ファイルを参考に作成してください。作成後、sudo launchctl load /Library/LaunchDaemons/your.v2ray.plist
コマンドでサービスを読み込み、sudo launchctl start your.v2ray
で開始します。
2.4 各インストールのメリット・デメリット比較
方法 | メリット | デメリット | 推奨度 |
---|---|---|---|
Homebrew | 簡単なインストール/アップデート/アンインストール Launchdサービス管理が容易 ファイル配置が標準的 |
Homebrew自体のインストールが必要 Homebrewレポジトリに依存 |
高 |
公式インストールスクリプト | 最新版を簡単にインストール システムサービス設定まで自動で行う場合がある |
Homebrewほどの管理機能はない 実行にはroot権限が必要 ファイル配置が固定 |
中 |
手動インストール | バージョンや配置場所を完全に制御できる Homebrew/スクリプトが使えない環境で有効 |
全て手動で行う必要がある(解凍、配置、権限設定、サービス化) 管理が煩雑 |
低 |
特段の理由がない限り、Homebrewを使ったインストールが最も推奨される方法です。この記事では以降、Homebrewでインストールされたパス(/usr/local/etc/v2ray/config.json
など)を前提として説明を進めますが、公式スクリプトや手動でインストールした場合は、あなたの環境に合わせて読み替えてください。
第3章:v2rayの基本的な設定ファイル(config.json)の構造
v2rayの動作は、JSON形式の設定ファイルによって完全に制御されます。このファイルはv2rayの「脳」とも言える部分で、v2rayがどのようなプロトコルで通信を受信し(inbounds)、どのようなプロトコルで通信を送信し(outbounds)、そしてどのようなルールに基づいて受信した通信を送信に振り分けるか(routing)といった、全ての振る舞いを定義します。
3.1 config.jsonの役割と場所
config.json
は、v2ray-coreが起動する際に読み込む設定ファイルです。このファイルが存在しないか、または記述に誤りがあると、v2rayは正しく動作しません。
Homebrewでインストールした場合、このファイルは通常 /usr/local/etc/v2ray/config.json
または /opt/homebrew/etc/v2ray/config.json
に配置されます。公式スクリプトや手動インストールでは、/usr/local/etc/v2ray/config.json
など別の場所に配置されることがあります。v2rayを起動する際には、-config
オプションで設定ファイルのパスを指定することも可能です。
3.2 設定ファイルの主要セクション
config.json
は、全体として一つのJSONオブジェクトです。その中に、v2rayの様々な設定を記述するためのキー(セクション)が存在します。主要なセクションは以下の通りです。
log
: v2rayのログ出力に関する設定を行います。ログファイルのパスやログレベルなどを指定します。api
: v2rayのAPI(統計情報取得など)に関する設定を行います。policy
: ユーザーや接続に関するポリシー(タイムアウト、バッファサイズなど)を設定します。inbounds
: v2rayがネットワークから接続を受信するための設定を定義します。配列として複数の受信設定を記述できます。各要素は、待ち受けポート、プロトコル(SOCKS, HTTP, VMessなど)、ストリーム設定などを含みます。outbounds
: v2rayが外部へ接続を送信するための設定を定義します。配列として複数の送信設定を記述できます。各要素は、使用するプロトコル(VMess, VLESS, Freedom, Blackholeなど)、サーバー情報、ストリーム設定などを含みます。最低一つは必要です。routing
: 受信した接続をどの送信設定(outbounds
)に振り分けるかを決定するルールを定義します。トラフィックの種類(ドメイン、IPアドレス、ポートなど)に基づいてルーティングを行います。
これらの主要セクション以外にも、dns
(DNS設定)、stats
(統計機能)、policy
(ポリシー設定)などのセクションがあります。基本的な設定では、inbounds
, outbounds
, routing
が最も重要になります。
以下は、config.json
の基本的な構造を示すスケルトンです。
json
{
"log": {
// ログ設定
},
"api": {
// API設定
},
"policy": {
// ポリシー設定
},
"inbounds": [
{
// 受信設定 1
},
{
// 受信設定 2
}
// ...
],
"outbounds": [
{
// 送信設定 1 (例: プロキシサーバー)
},
{
// 送信設定 2 (例: 直通)
}
// ...
],
"routing": {
// ルーティング設定
},
"dns": {
// DNS設定
}
// ...その他のセクション
}
3.3 JSONフォーマットの基本ルールと注意点
config.json
はJSON(JavaScript Object Notation)形式で記述する必要があります。JSONにはいくつかの基本的なルールがあります。
- ファイル全体は
{}
で囲まれたオブジェクト、または[]
で囲まれた配列である必要があります。config.json
は通常オブジェクトです。 - オブジェクトはキーと値のペアの集まりです。キーは文字列で、ダブルクォーテーション (
"
) で囲む必要があります。 - キーと値はコロン (
:
) で区切ります。 - キーと値のペアはカンマ (
,
) で区切ります。最後のペアの後にはカンマを付けません。 - 値には文字列 (
"..."
)、数値、真偽値 (true
,false
)、null (null
)、オブジェクト ({}
)、配列 ([]
) を使用できます。 - 文字列はダブルクォーテーションで囲む必要があります。
- JSONの仕様上、コメントはサポートされていません。しかし、v2rayはJSONC(JSON with Comments)形式も受け付ける場合があります。これにより、
//
や/* ... */
でコメントを記述できますが、公式なJSONではないため、ツールによってはエラーとなる可能性があります。v2ray-coreはJSONCをサポートしているので、設定ファイルにコメントを記述したい場合は利用できます。
設定ファイルを編集する際は、これらのJSONルールを厳守することが重要です。記述ミス(カンマ忘れ、余分なカンマ、引用符の間違い、括弧の不一致など)があると、v2rayが設定ファイルを読み込めずに起動しない原因となります。JSONリンター(構文チェッカー)ツール(オンラインツールやVS Codeなどのエディタの機能)を使って、記述ミスがないか確認することをお勧めします。
第4章:Macをローカルプロキシとして機能させる基本設定
ここでは、最も基本的なv2rayの設定として、Mac上でv2rayを起動し、SOCKS5またはHTTPプロキシとして動作させ、そのプロキシ経由で全ての通信をインターネットに直通させる設定を行います。これは、Mac上のアプリケーションがv2rayをプロキシとして利用する最初のステップとなります。
4.1 目的:Mac上のアプリケーションからv2rayを経由させる
この設定の目的は、Mac上のWebブラウザや他のアプリケーションのプロキシ設定で、127.0.0.1
(localhost)の特定のポートを指定することで、それらのアプリケーションからの通信をv2rayで受け取れるようにすることです。受け取った通信は、この設定例ではそのままインターネットに直通(freedom
)させますが、後述の章でこの部分を遠隔のv2ray/VMess/VLESSサーバーへの接続に置き換えることで、プロキシサーバー経由の通信を実現します。
4.2 inbounds
の設定例(SOCKS5プロキシ)
v2rayがローカルからの接続を受信するための設定です。ここでは、SOCKS5プロキシとして受信する設定を行います。
json
{
"inbounds": [
{
"port": 10808, // v2rayが待ち受けるポート番号 (例: 10808)
"protocol": "socks", // プロトコルはSOCKS
"listen": "127.0.0.1", // ローカルホストからの接続のみを受け付ける
"settings": {
"auth": "noauth", // 認証は不要
"udp": true, // UDPトラフィックもサポートする
"allowTransparent": false // 透明プロキシは無効
}
}
],
"outbounds": [
// outboundsは後述
],
"routing": {
// routingは後述
}
}
port
: v2rayがローカルからの接続を待ち受けるポート番号を指定します。ここでは例として10808
を使用していますが、他の未使用のポート番号でも構いません。protocol
: 受信プロトコルとして"socks"
を指定します。これにより、v2rayはSOCKSプロキシとして機能します。listen
: 待ち受けるIPアドレスを指定します。"127.0.0.1"
または"localhost"
を指定すると、そのMac自身からの接続のみを受け付けます。"0.0.0.0"
を指定すると、ネットワーク上の全てのマシンからの接続を受け付けますが、セキュリティ上のリスクがあるため、ローカルプロキシとして使う場合は"127.0.0.1"
を推奨します。settings
: プロトコル固有の設定です。SOCKSプロトコルの場合、auth
(認証方法)、udp
(UDPサポート)、allowTransparent
(透明プロキシサポート)などを設定できます。"auth": "noauth"
は認証なしで接続を受け付ける設定です。"udp": true
は、SOCKS5プロトコルでUDP関連の機能(例: UDPアソシエーション)をサポートすることを示します。
4.2.1 protocol: "socks"
の詳細
SOCKSプロトコルは、アプリケーションがプロキシ経由でネットワークに接続するための汎用プロキシです。v2rayをSOCKSサーバーとして設定すると、SOCKSプロトコルをサポートするあらゆるアプリケーション(多くのWebブラウザ、FTPクライアント、P2Pクライアントなど)から利用できます。SOCKS5はTCPとUDPの両方をサポートしており、v2rayの "udp": true
設定でUDPも中継できるようになります。
4.3 inbounds
の設定例(HTTPプロxy)
SOCKS5だけでなく、HTTPプロキシとしてもv2rayを受信できます。
json
{
"inbounds": [
{
"port": 10809, // HTTPプロキシ用のポート番号 (例: 10809)
"protocol": "http", // プロトコルはHTTP
"listen": "127.0.0.1", // ローカルホストからの接続のみを受け付ける
"settings": {
"accounts": [
// HTTP Basic認証を設定する場合
// { "user": "myuser", "pass": "mypassword" }
],
"allowTransparent": false
}
}
],
"outbounds": [
// outboundsは後述
],
"routing": {
// routingは後述
}
}
protocol
: 受信プロトコルとして"http"
を指定します。port
,listen
: SOCKS設定と同様です。settings
: HTTPプロトコルの設定です。accounts
でHTTP Basic認証のユーザー名とパスワードを設定できます(配列形式)。設定しない場合は認証なしとなります。
SOCKSプロキシとHTTPプロキシは同時に設定することも可能です。その場合、inbounds
配列にそれぞれの設定を追加します。
json
{
"inbounds": [
{ // SOCKS5 プロキシ
"port": 10808,
"protocol": "socks",
"listen": "127.0.0.1",
"settings": { "auth": "noauth", "udp": true }
},
{ // HTTP プロキシ
"port": 10809,
"protocol": "http",
"listen": "127.0.0.1",
"settings": {} // 認証なし
}
],
"outbounds": [
// ...
],
"routing": {
// ...
}
}
4.4 outbounds
の設定例(直通:protocol: "freedom"
)
outbounds
セクションでは、v2rayが外部へ接続を送信する方法を定義します。ここでは、受信した通信をそのままインターネットに直通させる設定を行います。これは、v2rayを単なるローカルプロキシとして使用する場合や、ルーティングルールでプロキシを経由させたくない通信を指定する場合に使用します。
json
{
"outbounds": [
{
"protocol": "freedom", // プロトコルは直通
"settings": {}, // Freedomプロトコルに固有の設定は通常不要
"tag": "direct" // この送信設定に識別子を付ける (ルーティングで使う)
}
],
// ... inbounds, routingなどは省略
}
protocol
: 送信プロトコルとして"freedom"
を指定します。これはv2rayの特別なプロトコルで、「自由な接続」、つまり受信した接続の宛先IPアドレスとポートに直接接続することを意味します。settings
: Freedomプロトコルには必須の設定はありません。tag
: この送信設定を識別するための文字列タグです。ルーティング設定で、特定のトラフィックをこの送信設定に振り分ける際に使用します。ここでは慣習的に"direct"
というタグ名を付けています。
通常、outbounds
には少なくとも一つ、この "freedom"
設定を用意しておき、デフォルトの送信先として設定するか、ルーティングルールで直通させたいトラフィックに使用します。
4.5 routing
の設定例(すべて直通へ)
routing
セクションでは、inbounds
で受信したトラフィックを、どの outbounds
に送信するかを決定するルールを定義します。最も単純な設定は、全てのトラフィックを特定の outbounds
(ここでは直通の "direct"
)へ送信するルールです。
json
{
"routing": {
"rules": [
{
"type": "field", // ルールのタイプ (フィールドマッチング)
"inboundTag": [
"socks_inbound", // このルールを適用する受信設定のタグ (inboundsにタグを付ける必要あり)
"http_inbound"
],
"outboundTag": "direct" // このルールにマッチしたトラフィックの送信先
}
],
"strategy": "rules" // ルール適用戦略 (ここでは定義されたルール順に適用)
},
// ... inbounds, outboundsなどは省略
}
この設定例では、inbounds
セクションにタグを付ける必要があります。例えば、SOCKS設定とHTTP設定にそれぞれ "socks_inbound"
と "http_inbound"
というタグを付けます。
json
{
"inbounds": [
{
"port": 10808, "protocol": "socks", "listen": "127.0.0.1",
"settings": { "auth": "noauth", "udp": true },
"tag": "socks_inbound" // 受信設定にタグを追加
},
{
"port": 10809, "protocol": "http", "listen": "127.0.0.1",
"settings": {},
"tag": "http_inbound" // 受信設定にタグを追加
}
],
"outbounds": [
{
"protocol": "freedom",
"settings": {},
"tag": "direct"
},
{
"protocol": "blackhole", // ダミーの送信設定(マッチしなかった場合など)
"settings": {},
"tag": "blocked"
}
],
"routing": {
"rules": [
{
"type": "field",
"inboundTag": [ "socks_inbound", "http_inbound" ], // socks_inboundまたはhttp_inboundから来たトラフィック
"outboundTag": "direct" // directへ転送
}
],
"strategy": "rules"
}
}
routing
: ルーティング設定全体を囲むオブジェクトです。rules
: ルーティングルールの配列です。ルールは上から順に評価されます。最初にマッチしたルールが適用されます。type
: ルールのタイプを指定します。"field"
は、特定のフィールド(inboundTag
,outboundTag
,domain
,ip
,port
,network
など)でマッチングを行うことを意味します。inboundTag
: このルールが適用される受信設定のタグを指定します。配列形式で複数のタグを指定できます。指定しない場合は、全ての受信設定からのトラフィックに適用されます。outboundTag
: このルールにマッチしたトラフィックを送信する送信設定のタグを指定します。strategy
: ルールが複数ある場合の評価戦略です。"rules"
が一般的で、定義された順序でルールを評価します。
この設定では、SOCKS (socks_inbound
) または HTTP (http_inbound
) で受信した全てのトラフィックを、タグが "direct"
である送信設定(ここでは freedom
プロトコル)に振り分ける、という単純なルールが定義されています。
outbounds
には、最低でも一つ "freedom"
(直通)と一つ "blackhole"
(接続を破棄)を設定しておくことが推奨されます。ルーティングルールでマッチしなかったトラフィックを "blackhole"
に送信することで、意図しない接続を防ぐことができます。この場合、routing
セクションに outboundTag
のデフォルト値を指定するか、最後のルールとして全てのトラフィックを "blackhole"
に送るルールを追加します。しかし、上記の例のように特定の inboundTag
にマッチしたトラフィックを特定の outboundTag
に送るシンプルな設定では、他のinboundやマッチしないトラフィックはv2rayのデフォルト動作(通常はエラー)に従います。
より一般的な、ルーティングルールにマッチしなかったトラフィックをデフォルトで処理するための設定として、routing
セクションに fallbackTag
や domainStrategy
を指定したり、outbounds
の最初の要素をデフォルトと見なしたりする挙動がありますが、これはv2rayのバージョンや設定によって異なります。確実なのは、明示的にルールを定義するか、outbounds
にデフォルトの送信設定を含めておくことです。上記の例では、inboundTag
で限定しているため、その inbound 以外のトラフィックは処理されません。
4.6 設定ファイルの適用とv2rayの起動
上記の例を参考に、/usr/local/etc/v2ray/config.json
ファイル(またはあなたの環境の config.json
のパス)を作成または編集します。
設定ファイルを保存したら、v2rayを起動します。Homebrew Servicesを使っている場合は、以下のコマンドを実行してv2rayを再起動します。
bash
brew services restart v2ray
手動で起動する場合は、以下のコマンドを実行します(Homebrewの場合のパス)。
bash
v2ray -config /usr/local/etc/v2ray/config.json
エラーメッセージが表示されずに起動すれば成功です。エラーが表示された場合は、設定ファイルのJSON構文エラーや記述ミスがないか確認してください(第8章参照)。
4.7 Macのシステム環境設定でのプロキシ設定方法
v2rayがローカルのSOCKS5プロキシ(ポート10808)またはHTTPプロキシ(ポート10809)として起動したら、Macのシステム環境設定でアプリケーションがv2rayを経由するように設定します。
- Appleメニューから「システム設定」(macOS Ventura以降)または「システム環境設定」(macOS Monterey以前)を開きます。
- 「ネットワーク」を選択します。
- 左側のリストから、現在使用しているネットワーク接続(Wi-FiまたはEthernet)を選択します。
- 画面右側の「詳細…」ボタンをクリックします。
- 表示されたウィンドウの上部にある「プロキシ」タブを選択します。
- 左側のリストから設定したいプロキシタイプを選択します。
- SOCKS5プロキシを使いたい場合は、「SOCKSプロキシ」をチェックします。
- HTTPプロキシを使いたい場合は、「Webプロキシ (HTTP)」をチェックします。HTTPSも同じ設定を使いたい場合は「保護されたWebプロキシ (HTTPS)」もチェックします。
- 右側の「Webプロキシ・サーバ」または「SOCKSプロキシ・サーバ」の入力フィールドに
127.0.0.1
またはlocalhost
と入力します。 - ポート番号の入力フィールドに、
config.json
で設定したポート番号(SOCKSなら10808
、HTTPなら10809
)を入力します。 - 「プロキシ設定を使用しないホストとドメイン」の欄には、プロキシを経由させたくないローカルアドレスなどを入力できます(例:
localhost, 127.0.0.1, *.local, 192.168.*, 10.*, 172.16.*
)。 - 「OK」をクリックし、ネットワーク設定画面に戻って「適用」をクリックします。
これで、システムプロキシ設定を使用するアプリケーション(SafariやChromeなどのWebブラウザの多く)からの通信は、まずMac上のv2ray(ポート10808または10809)に送られ、v2rayの設定に従って処理されるようになります。現在の設定では、v2rayは受け取った通信をそのままインターネットに直通させます。
この基本設定は、v2rayがローカルプロキシとして機能することを確認するためのものです。次の章からは、outbounds
セクションを修正して、遠隔のプロキシサーバー(VMessやVLESS)へ通信を転送する方法を詳細に見ていきます。
第5章:VMessプロトコルを使ったクライアント設定の詳細
Mac上で起動したv2ray(ローカルプロキシ)から、遠隔のVMessプロトコルサーバーへ通信を転送する設定を行います。これが、v2rayを一般的なプロキシツールとして利用する際の最も典型的な構成です。
5.1 VMessプロトコルの概要
VMessはv2rayのために開発された暗号化プロトコルです。クライアントとサーバーは、共通のユーザーID(UUID)とAlterId(追加ID)を使って認証を行います。通信内容は暗号化され、中間者による盗聴や改ざんを防ぎます。VMessは、多様なトランスポート(TCP, WebSocket, HTTP/2など)とセキュリティ設定(TLSなど)と組み合わせて使用することで、高い検知回避能力を発揮します。
5.2 サーバー側の情報(アドレス、ポート、UUID、AlterId、セキュリティ、トランスポート)の確認
VMessクライアントを設定するには、接続先のVMessサーバーに関する以下の情報が必要です。これらの情報は、VMessサーバーの管理者や、プロバイダーから提供されます。
- アドレス (Address): サーバーのホスト名またはIPアドレス。
- ポート (Port): サーバーがVMess接続を待ち受けているポート番号。
- ユーザーID (UUID / ID): クライアントとサーバー間で一致させる必要がある、UUID形式の識別子。
- AlterId (Additional ID): セキュリティ強化のための追加ID。0またはそれ以上の整数値。サーバー側の設定と一致させる必要があります。
- セキュリティ (Security): 使用する暗号化方式(auto, aes-128-gcm, chacha20-poly1305, none)。
auto
が推奨されます。 - トランスポート (Transport): サーバーが使用しているトランスポートプロトコル(tcp, ws, http2, kcpなど)。
- TLS (Security in streamSettings): サーバーがTLS暗号化を使用しているかどうか。
- WebSocket/HTTP/2 設定: もしトランスポートがWebSocketやHTTP/2の場合、
path
やheaders
(特にHost
)などの追加設定が必要な場合があります。
これらの情報が正確でないと、サーバーに接続できません。
5.3 outbounds
の設定(VMessクライアント)
ローカルで受信したトラフィックを、上記のVMessサーバーへ送信するための outbounds
設定を記述します。
json
{
"outbounds": [
{
"protocol": "vmess", // プロトコルはVMess
"settings": {
"vnext": [ // 接続先サーバーのリスト (通常は1つ)
{
"address": "your_v2ray_server.com", // サーバーのアドレス
"port": 443, // サーバーのポート
"users": [ // ユーザー情報のリスト (通常は1つ)
{
"id": "YOUR_UUID_HERE", // あなたのUUID
"alterId": 0, // サーバーのAlterIdと一致させる
"security": "auto" // 暗号化方式 (autoが推奨)
}
]
}
]
},
"streamSettings": {
// ストリーム設定は後述
},
"tag": "proxy" // この送信設定に識別子を付ける (ルーティングで使う)
},
{
"protocol": "freedom",
"settings": {},
"tag": "direct"
},
{
"protocol": "blackhole",
"settings": {},
"tag": "blocked"
}
],
// ... inbounds, routingなどは省略
}
protocol
:"vmess"
を指定します。settings
: VMessプロトコル固有の設定です。vnext
: 接続先サーバーの情報をオブジェクトの配列で指定します。通常はサーバーは1つなので要素は1つです。address
: サーバーのアドレス(ホスト名またはIPアドレス)。port
: サーバーのポート番号。users
: 接続に使用するユーザー情報です。VMessではUUID (id
) とalterId
が必須です。security
で暗号化方式を指定します。
streamSettings
: トラフィックをどのようにトランスポート層に乗せ、どのようなセキュリティを適用するかを設定します。非常に重要なセクションで、サーバー側の設定と完全に一致させる必要があります。詳細は次に説明します。tag
: この送信設定のタグです。ここでは慣習的に"proxy"
としています。
5.4 streamSettings
の設定:接続のトランスポートとセキュリティ
streamSettings
セクションは、outbounds
または inbounds
設定の中で、下位のネットワーク接続に関する詳細を指定するために使用されます。ここで、どのトランスポート(TCP, WebSocket, HTTP/2など)を使用するか、TLS暗号化を有効にするかなどを設定します。クライアントとサーバーの streamSettings
は、互換性があるように設定する必要があります。
streamSettings
オブジェクトは、主に以下のキーを持ちます。
network
: 使用するネットワークタイプを指定します("tcp"
,"kcp"
,"ws"
,"http"
,"http2"
,"quic"
,"ds"
)。security
: セキュリティタイプを指定します("tls"
,"none"
)。tlsSettings
:security
が"tls"
の場合の詳細設定。wsSettings
:network
が"ws"
(WebSocket) の場合の詳細設定。httpSettings
:network
が"http"
の場合の詳細設定。http2Settings
:network
が"http2"
の場合の詳細設定。kcpSettings
:network
が"kcp"
の場合の詳細設定。tcpSettings
:network
が"tcp"
の場合の詳細設定。quicSettings
:network
が"quic"
の場合の詳細設定。dsSettings
:network
が"ds"
(Domain Socket) の場合の詳細設定。
以下に、一般的な設定例とその詳細をいくつか示します。
5.4.1 network
(tcp, kcp, ws, http2, quic, ds) – 各種ネットワーク設定の詳細
"network": "tcp"
:
最も基本的なTCPトランスポート。追加の設定はtcpSettings
で行いますが、通常は空のオブジェクト{}
で十分です。
json
"streamSettings": {
"network": "tcp",
"security": "none" // または "tls"
// "tcpSettings": {}
}"network": "kcp"
:
UDPベースの信頼性プロトコルmKCPを使用します。低遅延が期待できますが、設定 (kcpSettings
) が複雑です。サーバーとの設定合わせが必要です。
json
"streamSettings": {
"network": "kcp",
"security": "none", // mKCPでTLSを使うことは一般的ではない
"kcpSettings": {
// サーバー側の設定と一致させる
"mtu": 1350,
"tti": 50,
"uplinkCapacity": 5,
"downlinkCapacity": 100,
"congestion": false,
"readBufferSize": 2,
"writeBufferSize": 2,
"header": { "type": "wechat-video" } // 偽装タイプ
}
}"network": "ws"
(WebSocket):
HTTP(S)上でWebSocketを使います。Webトラフィックに偽装するのに非常に有効です。wsSettings
で詳細設定が必要です。TLSと組み合わせることが多いです。
json
"streamSettings": {
"network": "ws",
"security": "tls", // WebSocket over TLS (WSS)
"tlsSettings": {
// TLS設定は後述
},
"wsSettings": {
"path": "/your_websocket_path", // サーバーと一致させるパス
"headers": {
"Host": "your_v2ray_server.com" // サーバーのアドレスまたはCDNのドメイン
}
}
}"network": "http"
:
HTTP Fake Headerとも呼ばれます。既存のHTTP接続のように見せかけます。あまり強力な偽装ではありません。
json
"streamSettings": {
"network": "http",
"security": "none", // HTTPでTLSは通常使わない
"httpSettings": {
"path": "/some/path",
"host": ["example.com", "another.com"]
}
}"network": "http2"
:
HTTP/2を使います。WebSocketと同様にWebトラフィックに偽装するのに有効で、TLSとの組み合わせが一般的です。http2Settings
で設定します。
json
"streamSettings": {
"network": "http2",
"security": "tls", // HTTP/2 over TLS (H2)
"tlsSettings": {
// TLS設定は後述
},
"http2Settings": {
"path": "/your_h2_path", // サーバーと一致させるパス
"host": ["your_v2ray_server.com"] // サーバーのアドレスまたはCDNのドメイン
}
}"network": "quic"
:
UDPベースのQUICプロトコル。quicSettings
で設定。
json
"streamSettings": {
"network": "quic",
"security": "tls", // QUICは通常TLSを使用
"tlsSettings": {
// TLS設定は後述
},
"quicSettings": {
"security": "chacha20-poly1305", // 暗号化方式
"key": "YOUR_QUIC_KEY", // 鍵
"header": { "type": "none" } // 偽装タイプ
}
}"network": "ds"
(Domain Socket):
Macローカルでのプロセス間通信。通常、GUIクライアントや他のコンポーネントとの連携に使用され、リモート接続には使いません。
5.4.2 security
(tls, none)
"security": "tls"
を指定すると、そのネットワーク接続がTLSで暗号化されます。WebSocketやHTTP/2など、Webトラフィックに偽装する場合は必須の設定です。
5.4.3 tlsSettings
(サーバー証明書の検証、SNI、ALPNなど)
security
が "tls"
の場合に必要となる詳細設定です。
json
"tlsSettings": {
"allowInsecure": false, // サーバー証明書の検証をスキップするか (本番環境ではfalse推奨)
"serverName": "your_v2ray_server.com", // SNI (Server Name Indication)
"alpn": ["h2", "http/1.1"] // ALPN (Application-Layer Protocol Negotiation)
// "certificates": [] // クライアント証明書 (通常は不要)
}
allowInsecure
:true
にすると、サーバー証明書の有効期限やホスト名の不一致などを無視します。デバッグ時以外はfalse
に設定し、正当な証明書を使用することが強く推奨されます。serverName
: SNIを指定します。これは、TLSハンドシェイク時にクライアントがどのホスト名に接続しようとしているかをサーバーに伝える情報です。サーバー側が複数のドメインでTLS証明書を運用している場合や、CDNを利用している場合に重要です。通常は接続先サーバーのホスト名または偽装したいドメイン名(CDNドメインなど)を指定します。alpn
: ALPNを指定します。クライアントがサポートするアプリケーション層プロトコルをサーバーに通知します。Webサーバーに偽装する場合、["h2", "http/1.1"]
など、一般的なWebサーバーが使用する値を指定することが多いです。network
が"http2"
の場合は"h2"
を、"ws"
の場合は"http/1.1"
が含まれるように指定するのが一般的です。
5.4.4 wsSettings
(path, headers)
network
が "ws"
の場合に必要となる設定です。
json
"wsSettings": {
"path": "/your_websocket_path", // サーバー設定と一致させる
"headers": {
"Host": "your_v2ray_server.com" // サーバー設定と一致させる。TLS使用時はSNIとも合わせる
}
}
path
: WebSocket接続のエンドポイントパスです。サーバー側で設定されたパスと完全に一致させる必要があります。headers
: HTTPヘッダーを偽装します。特にHost
ヘッダーは、Webサーバーがバーチャルホストを区別したり、CDNがトラフィックをルーティングしたりするのに使われるため、正確な指定が重要です。
5.4.5 http2Settings
(path, host)
network
が "http2"
の場合に必要となる設定です。
json
"http2Settings": {
"path": "/your_h2_path", // サーバー設定と一致させるパス (配列も可)
"host": ["your_v2ray_server.com"] // サーバー設定と一致させるホスト名 (配列形式)
}
path
: HTTP/2接続のエンドポイントパスです。配列で複数のパスを指定することも可能です。host
: HTTP/2接続のホスト名を指定します。配列形式です。
5.5 routing
の設定:プロキシへ流すトラフィックの定義
inbounds
(ローカルプロキシ)で受信したトラフィックのうち、どの通信を今設定したVMess ("proxy"
) へ送信し、どの通信を直通 ("direct"
) させるかを routing
セクションで定義します。
json
{
"routing": {
"rules": [
{
"type": "field",
"outboundTag": "blocked", // 指定したドメイン/IPへのアクセスをブロック
"domain": [
"netflix.com", // 例:特定のドメインをブロック
"geosite:netflix" // geositeデータを利用してNetflix関連ドメインをブロック
]
},
{
"type": "field",
"outboundTag": "direct", // 中国国内IPは直通
"ip": [
"geoip:cn" // geoipデータを利用して中国国内IPをマッチ
]
},
{
"type": "field",
"outboundTag": "direct", // 中国国内サイトは直通
"domain": [
"geosite:cn" // geositeデータを利用して中国国内サイトをマッチ
]
},
{
"type": "field",
"inboundTag": [ "socks_inbound", "http_inbound" ], // ローカルのsocksまたはhttpプロキシからのトラフィック
"outboundTag": "proxy" // それ以外の全てのトラフィックをproxyへ
}
],
"strategy": "rules"
}
}
rules
: ルーティングルールの配列です。ルールは上から順に評価され、最初にマッチしたルールが適用されます。- 各ルールオブジェクトは、マッチング条件(
domain
,ip
,port
,network
,inboundTag
など)と、マッチした場合の送信先 (outboundTag
) を指定します。 - 例では、まずNetflix関連ドメインを
"blocked"
(blackhole)へ送るルール、次に中国国内IP/ドメインを"direct"
へ送るルール、そして最後にローカルプロキシからのそれ以外の全てのトラフィックを"proxy"
へ送るルールを定義しています。
- 各ルールオブジェクトは、マッチング条件(
domain
: ドメイン名によるマッチングです。- 文字列(例:
"example.com"
):完全一致。 .example.com
: サブドメインを含む。geosite:cn
: v2ray付属のgeosite.dat
ファイルに定義された「cn」(中国)グループに属するドメインにマッチ。- 正規表現も使用可能。
- 文字列(例:
ip
: IPアドレスによるマッチングです。- CIDR形式(例:
"192.168.1.0/24"
)。 geoip:cn
: v2ray付属のgeoip.dat
ファイルに定義された「cn」(中国)グループに属するIPアドレスにマッチ。
- CIDR形式(例:
outboundTag
: マッチしたトラフィックを送信するoutbounds
のタグを指定します。
この例のルーティング設定では、Macからの通信は以下の優先順位で処理されます。
1. ローカルSOCKS/HTTPプロキシで受信される(inboundTag
)。
2. Netflix関連ドメインへの通信であれば blocked
(blackhole) へ送られ破棄される。
3. 中国国内のIPアドレスまたはドメインへの通信であれば direct
(直通) へ送られる。
4. 上記のいずれにも該当しない通信は全て proxy
(VMessサーバー) へ送られる。
このように、routing
セクションを適切に設定することで、通信を柔軟に制御できます。
5.6 VMessクライアント設定の完全なconfig.json例
上記の要素を組み合わせた、MacをローカルSOCKS/HTTPプロキシとし、VMessサーバーへ接続するための完全な config.json
例です。あなたのサーバー情報に合わせて <...>
部分を置き換えてください。
json
{
"log": {
"loglevel": "warning" // ログレベルを設定 (debug, info, warning, error, none)
},
"inbounds": [
{
"port": 10808,
"protocol": "socks",
"listen": "127.0.0.1",
"settings": {
"auth": "noauth",
"udp": true
},
"tag": "socks_inbound"
},
{
"port": 10809,
"protocol": "http",
"listen": "127.0.0.1",
"settings": {},
"tag": "http_inbound"
}
],
"outbounds": [
{
"protocol": "vmess",
"settings": {
"vnext": [
{
"address": "your_v2ray_server.com", // サーバーアドレス
"port": 443, // サーバーポート
"users": [
{
"id": "YOUR_UUID_HERE", // あなたのUUID
"alterId": 0, // サーバーのAlterId
"security": "auto"
}
]
}
]
},
"streamSettings": {
"network": "ws", // 例: WebSocket over TLS
"security": "tls",
"tlsSettings": {
"allowInsecure": false,
"serverName": "your_v2ray_server.com",
"alpn": ["h2", "http/1.1"]
},
"wsSettings": {
"path": "/your_websocket_path",
"headers": {
"Host": "your_v2ray_server.com"
}
}
},
"tag": "proxy"
},
{
"protocol": "freedom",
"settings": {},
"tag": "direct"
},
{
"protocol": "blackhole",
"settings": {},
"tag": "blocked"
}
],
"routing": {
"rules": [
{
"type": "field",
"outboundTag": "blocked",
"domain": [
"geosite:netflix",
"geosite:telegram" // 例: Telegram関連ドメインもブロック
]
},
{
"type": "field",
"outboundTag": "direct",
"ip": [
"geoip:cn"
]
},
{
"type": "field",
"outboundTag": "direct",
"domain": [
"geosite:cn"
]
},
{
"type": "field",
"inboundTag": [ "socks_inbound", "http_inbound" ],
"outboundTag": "proxy"
}
],
"strategy": "rules"
}
}
この設定ファイルを /usr/local/etc/v2ray/config.json
に保存し、v2rayを再起動(brew services restart v2ray
)します。そして、Macのシステムプロキシ設定でSOCKS5(ポート10808)またはHTTP(ポート10809)を 127.0.0.1
に向ければ、VMessサーバー経由でインターネットに接続できるようになります。
注意: geosite.dat
および geoip.dat
ファイルは、Homebrewでv2rayをインストールした際に /usr/local/share/v2ray/
などに自動的に配置されます。これらのファイルが存在しないと、geosite:
や geoip:
ルールは機能しません。
第6章:VLESSプロトコルを使ったクライアント設定の詳細
VLESSはVMessの後継プロトコルとして設計されました。シンプルさを追求し、特にXTLSとの組み合わせで高性能かつ検知されにくい通信を実現します。ここでは、VLESSプロトコルを使ったクライアント設定方法を解説します。
6.1 VLESSプロトコルの概要(VMessとの違い)
VLESSの主な特徴は以下の通りです。
- シンプルさ: AlterIdが廃止され、ユーザー認証はUUIDのみで行います。
- パフォーマンス: 特にXTLSを使用した場合、データ転送の際に一部の暗号化処理が不要となり、オーバーヘッドが減少します。
- 検知回避: XTLSは、パケットの深層検査に対してより耐性が高いとされています。
サーバーから提供されるVLESS接続に必要な情報は、VMessと同様にアドレス、ポート、UUID、そしてトランスポートやTLS/XTLSに関する情報です。
6.2 outbounds
の設定(VLESSクライアント)
VLESSクライアントの outbounds
設定は、VMessと似ていますが、プロトコル名や settings
内のユーザー情報定義が異なります。
json
{
"outbounds": [
{
"protocol": "vless", // プロトコルはVLESS
"settings": {
"vnext": [ // 接続先サーバーのリスト (通常は1つ)
{
"address": "your_vless_server.com", // サーバーのアドレス
"port": 443, // サーバーのポート
"users": [ // ユーザー情報のリスト (通常は1つ)
{
"id": "YOUR_UUID_HERE", // あなたのUUID (AlterIdは不要)
"flow": "xtls-rprx-origin" // XTLSを使用する場合のフロータイプ
}
]
}
]
},
"streamSettings": {
// ストリーム設定は後述 (特にTLS/XTLS)
},
"tag": "proxy"
},
// ... direct, blocked outbounds は省略
],
// ... inbounds, routingなどは省略
}
protocol
:"vless"
を指定します。settings
: VLESSプロトコル固有の設定です。vnext
: 接続先サーバーのリストです。address
: サーバーのアドレス。port
: サーバーのポート。users
: ユーザー情報です。id
(UUID) は必須ですが、alterId
はありません。flow
: XTLSを使用する場合に指定します。サーバー側の設定と一致させる必要があります。一般的な値は"xtls-rprx-origin"
や"xtls-rprx-direct"
です。XTLSを使わない場合はこのキーは不要です。
6.3 streamSettings
の設定:VLESSにおける特徴(特にXTLS)
VLESSで最もよく利用されるのは、TLSまたはXTLSとWebSocketやTCPを組み合わせた設定です。
- VLESS + TCP + TLS:
最も基本的な組み合わせ。TLSで暗号化されたTCP接続。
json
"streamSettings": {
"network": "tcp",
"security": "tls",
"tlsSettings": {
"allowInsecure": false,
"serverName": "your_vless_server.com",
"alpn": ["http/1.1"] // 通常は"http/1.1"
}
} - VLESS + TCP + XTLS:
XTLSを有効にしたTCP接続。users
内のflow
設定とstreamSettings
のsecurity: "tls"
が必要です。
json
"streamSettings": {
"network": "tcp",
"security": "tls", // XTLSもsecurityは"tls"と指定
"tlsSettings": {
"allowInsecure": false,
"serverName": "your_vless_server.com"
// ALPNは通常不要または任意
}
}
この設定では、outbounds
のusers
にflow
("xtls-rprx-origin"
など) が設定されている必要があります。 - VLESS + WebSocket + TLS:
WebSocket over TLS。VMess + WS + TLS と同様の設定になります。
json
"streamSettings": {
"network": "ws",
"security": "tls",
"tlsSettings": {
"allowInsecure": false,
"serverName": "your_vless_server.com",
"alpn": ["h2", "http/1.1"]
},
"wsSettings": {
"path": "/your_websocket_path",
"headers": {
"Host": "your_vless_server.com"
}
}
}
VLESSの streamSettings
はVMessのそれとほぼ同じ構成ですが、users
設定の flow
フィールドと streamSettings
内のTLS設定がXTLSの挙動に影響を与えます。サーバーがXTLSを有効にしている場合は、クライアント側もそれに対応する flow
と security: "tls"
を設定する必要があります。
6.4 VLESSクライアント設定の完全なconfig.json例(TLS/XTLS)
MacをローカルSOCKS/HTTPプロキシとし、VLESSサーバーへ接続するための完全な config.json
例です。XTLSを有効にしたTCP接続の例を示します。あなたのサーバー情報に合わせて <...>
部分を置き換えてください。
json
{
"log": {
"loglevel": "warning"
},
"inbounds": [
{
"port": 10808,
"protocol": "socks",
"listen": "127.0.0.1",
"settings": {
"auth": "noauth",
"udp": true
},
"tag": "socks_inbound"
},
{
"port": 10809,
"protocol": "http",
"listen": "127.0.0.1",
"settings": {},
"tag": "http_inbound"
}
],
"outbounds": [
{
"protocol": "vless",
"settings": {
"vnext": [
{
"address": "your_vless_server.com", // サーバーアドレス
"port": 443, // サーバーポート
"users": [
{
"id": "YOUR_UUID_HERE", // あなたのUUID
"flow": "xtls-rprx-origin" // XTLSフロータイプ
}
]
}
]
},
"streamSettings": {
"network": "tcp", // TCP
"security": "tls", // TLS/XTLS
"tlsSettings": {
"allowInsecure": false,
"serverName": "your_vless_server.com" // SNI
// ALPNは通常不要だが、サーバー設定による
}
// TCP/WS/HTTP2など、他のネットワークタイプも可能
// "network": "ws",
// "wsSettings": { ... }
},
"tag": "proxy"
},
{
"protocol": "freedom",
"settings": {},
"tag": "direct"
},
{
"protocol": "blackhole",
"settings": {},
"tag": "blocked"
}
],
"routing": {
"rules": [
{
"type": "field",
"outboundTag": "blocked",
"domain": [
"geosite:netflix"
]
},
{
"type": "field",
"outboundTag": "direct",
"ip": [
"geoip:cn"
]
},
{
"type": "field",
"outboundTag": "direct",
"domain": [
"geosite:cn"
]
},
{
"type": "field",
"inboundTag": [ "socks_inbound", "http_inbound" ],
"outboundTag": "proxy"
}
],
"strategy": "rules"
}
}
routing
セクションはVMessの例と同じで構いません。この設定ファイルを保存し、v2rayを再起動し、Macのシステムプロキシ設定を行えば、VLESSサーバー経由でインターネットに接続できるようになります。
第7章:v2rayの起動、停止、再起動、ログ確認
v2rayの設定ファイル (config.json
) を作成または編集したら、その設定をv2rayに読み込ませて実行する必要があります。また、v2rayの動作状況を確認したり、問題が発生した際に原因を特定したりするためにログを確認することも重要です。
7.1 Homebrew Servicesでの管理(再掲と詳細)
第2章でも触れましたが、Homebrewでv2rayをインストールした場合、Homebrew Servicesを使ってv2rayをサービスとして管理するのが最も便利です。これにより、macOSの起動時にv2rayを自動で開始したり、簡単なコマンドで起動・停止・再起動を行ったりできます。
Homebrew Servicesは、内部的にはmacOSのLaunchdというサービス管理機構を利用しています。brew services start v2ray
コマンドを実行すると、Homebrewはv2ray用のLaunchd plistファイルを作成し、Launchdにv2rayサービスを登録して起動します。
7.1.1 brew services start v2ray
v2rayをサービスとして登録し、開始します。既に登録されている場合は、単にサービスを開始します。
bash
brew services start v2ray
7.1.2 brew services stop v2ray
v2rayサービスを停止します。
bash
brew services stop v2ray
7.1.3 brew services restart v2ray
v2rayサービスを停止し、その後再度開始します。設定ファイル (config.json
) を編集した場合は、このコマンドを実行して新しい設定をv2rayに読み込ませる必要があります。
bash
brew services restart v2ray
7.1.4 サービスの状態確認 (brew services list
)
現在Homebrew Servicesで管理されているサービスの一覧と、それぞれの状態(起動しているか、停止しているかなど)を確認できます。v2rayが started
と表示されていれば、正しく起動しています。
bash
brew services list
出力例:
Name Status User File
v2ray started YOUR_USERNAME ~/Library/LaunchAgents/homebrew.mxcl.v2ray.plist
この出力には、サービスを管理しているユーザーと、Launchd plistファイルのパスも表示されます。
7.1.5 設定変更の反映
config.json
ファイルを変更しただけでは、既に起動しているv2rayプロセスには反映されません。必ず brew services restart v2ray
コマンドを実行して、v2rayを再起動し、新しい設定を読み込ませてください。
7.2 手動でのコマンド実行
Homebrew Servicesを使わない場合や、一時的に特定のconfigファイルで起動したい場合、デバッグ目的でフォアグラウンドで起動したい場合などは、v2rayの実行ファイルを直接コマンドラインから実行します。
Homebrewでインストールした場合の実行ファイルパスは、第2章で説明したように /usr/local/bin/v2ray
または /opt/homebrew/bin/v2ray
です。設定ファイルは通常 /usr/local/etc/v2ray/config.json
などにあります。
7.2.1 実行コマンド例 (/usr/local/bin/v2ray -config /usr/local/etc/v2ray/config.json
)
設定ファイルを指定してv2rayを起動する基本的なコマンドです。
bash
/usr/local/bin/v2ray -config /usr/local/etc/v2ray/config.json
(Homebrew on Apple Siliconの場合は /opt/homebrew/bin/v2ray
を使用)
このコマンドをそのまま実行すると、v2rayはフォアグラウンドで動作し、ログをターミナルに出力します。Ctrl+Cで停止できます。
7.2.2 バックグラウンド実行方法(&
, nohup
)
ターミナルを閉じてもv2rayを動作させ続けたい場合は、バックグラウンドで実行する必要があります。
単純なバックグラウンド実行 (&
):
bash
/usr/local/bin/v2ray -config /usr/local/etc/v2ray/config.json &
この方法では、ターミナルセッションが終了するとプロセスも終了する場合があります。
より安定したバックグラウンド実行 (nohup
):
nohup
コマンドは、ターミナルの切断に関わらずコマンドを実行し続けます。標準出力と標準エラー出力は nohup.out
というファイルにリダイレクトされます。
bash
nohup /usr/local/bin/v2ray -config /usr/local/etc/v2ray/config.json > v2ray.log 2>&1 &
この例では、標準出力と標準エラー出力を v2ray.log
というファイルにリダイレクトしています。
手動で起動したv2rayプロセスを停止するには、ps aux | grep v2ray
などでプロセスID(PID)を調べ、kill PID
コマンドを使います。
7.3 ログの確認方法
v2rayのログは、エラーや警告、デバッグ情報などを確認するために非常に重要です。設定ファイル (config.json
) の log
セクションでログの出力先やレベルを指定できます。
json
"log": {
"access": "/path/to/access.log", // アクセスログのファイルパス (省略可)
"error": "/path/to/error.log", // エラーログのファイルパス
"loglevel": "warning" // ログレベル (debug, info, warning, error, none)
}
access
: v2rayが処理した各接続に関する情報を記録します。通常は省略してエラーログに統合するか、高負荷を避けるために無効にします。error
: エラー、警告、情報などのメッセージが記録されます。問題を診断する上で最も重要なログです。loglevel
: ログの詳細度を設定します。none
: ログを出力しません。error
: エラーのみ。warning
: エラーと警告。info
: エラー、警告、情報(接続確立など)。debug
: 全ての詳細情報。トラブルシューティング時にはこのレベルに設定することが多いですが、大量のログが出力される点に注意が必要です。
7.3.1 Homebrewの場合のログファイルパス
Homebrew Servicesでv2rayを起動した場合、ログはLaunchdによって管理され、特定の場所にリダイレクトされることが多いです。brew services list
コマンドの出力で、v2rayのplistファイルのパスを確認し、そのファイル内で標準出力/標準エラー出力のリダイレクト先が指定されていないか確認するのが確実です。
一般的なパスの例:
* /usr/local/var/log/v2ray/access.log
* /usr/local/var/log/v2ray/error.log
正確なパスはHomebrewやv2rayのバージョンによって異なる場合があります。plistファイル内の StandardOutPath
や StandardErrorPath
キーで確認できます。
7.3.2 ログの監視 (tail -f
)
ログファイルの内容をリアルタイムで確認するには、tail -f
コマンドを使います。
bash
tail -f /usr/local/var/log/v2ray/error.log
これにより、ファイルに新しい内容が書き込まれるたびにターミナルに表示されます。v2rayを再起動したり、プロキシ経由で通信を試したりしながらこのコマンドを実行すると、v2rayの動作状況やエラーメッセージをリアルタイムで確認でき、デバッグに役立ちます。
第8章:v2rayの設定管理とトラブルシューティング
v2rayは柔軟で強力なツールですが、その設定は複雑になりがちです。設定ミスは正常な動作を妨げる主要な原因となります。ここでは、設定管理に役立つツールや、一般的なトラブルシューティング方法を解説します。
8.1 設定ファイルの文法チェック (v2ray -test
)
config.json
ファイルを編集した後、v2rayを起動する前に構文エラーがないかを確認することが非常に重要です。v2rayの実行ファイルには、設定ファイルをテストする機能が組み込まれています。
以下のコマンドを実行します。
bash
v2ray -test -config /usr/local/etc/v2ray/config.json
(設定ファイルのパスはあなたの環境に合わせて変更してください)
設定ファイルにJSON構文エラーやv2rayの認識できないキーなどがある場合、エラーメッセージが表示されます。エラーメッセージが表示されなければ、JSONとしては有効であり、v2rayが基本的な構造を認識できたことを意味します。ただし、論理的な設定ミス(例: サーバー情報の間違い)はこのテストでは検出できません。
8.2 v2ctl
コマンドラインツール
v2ray-coreと一緒にインストールされる v2ctl
は、v2rayに関連するいくつかのユーティリティ機能を提供するコマンドラインツールです。Homebrewでインストールした場合、/usr/local/bin/v2ctl
または /opt/homebrew/bin/v2ctl
に配置されます。
8.2.1 UUIDの生成 (v2ctl uuid
)
VMessやVLESSプロトコルのユーザーIDとして使用するUUIDを生成できます。
bash
v2ctl uuid
実行するたびに新しいUUIDが出力されます。
f8d8b1c8-c1e5-4a7f-8b0d-0a2e1a3b4c5d
8.2.2 その他の機能
v2ctl
には、pingテスト、ジオデータファイルのダンプ、設定ファイルの変換など、他にも様々な機能があります。詳細な使い方は v2ctl help
または v2ctl help <command>
で確認できます。
8.3 一般的なトラブルシューティング
v2rayが期待通りに動作しない場合、様々な原因が考えられます。ログを確認することに加え、以下の点をチェックしてみてください。
8.3.1 設定ファイルのJSONエラー
最も一般的な原因です。v2ray -test
コマンドでチェックするか、オンラインのJSONバリデーターツールや、JSON構文ハイライト機能付きのエディタ(VS Code, Sublime Textなど)を使って確認してください。カンマの有無、ダブルクォーテーション、括弧の対応などに注意が必要です。
8.3.2 サーバー情報(アドレス、ポート、ID、AlterId、プロトコル、トランスポート)の不一致
クライアント (config.json
) に記述されているサーバー情報が、実際のサーバー側の設定と一致しているか、ダブルチェックしてください。
- サーバーアドレス(ホスト名またはIPアドレス)
- サーバーポート
- VMess/VLESSのUUID
- VMessのAlterId
- 使用するプロトコル(VMess, VLESSなど)
- トランスポートタイプ(tcp, ws, http2など)
- TLSが有効か、SNIは正しいか
- WebSocket/HTTP/2のpathやHostヘッダーは正しいか
- XTLSを使用する場合、VLESSのflow設定は正しいか
これらの情報が一つでも間違っていると接続できません。大文字・小文字、スペースなども含めて完全に一致している必要があります。
8.3.3 ファイアウォール(Mac内蔵、ルーター、サーバー側)
通信がファイアウォールによってブロックされている可能性があります。
- Mac内蔵ファイアウォール: 「システム設定」>「ネットワーク」>(使用中のネットワーク接続)>「詳細」>「ファイアウォール」で設定を確認します。必要に応じて、v2rayが使用するローカルポート(例: 10808, 10809)への接続を許可したり、v2ray自体のアウトバウンド接続を許可したりします。
- ルーターのファイアウォール: 自宅やオフィスのルーター設定で、Macからの外部への接続(特にv2rayサーバーのポートへの接続)がブロックされていないか確認します。
- サーバー側のファイアウォール: サーバーのOSやデータセンターのファイアウォールで、v2rayサーバーが使用するポートが外部からの接続を許可しているか確認してもらう必要があります。
8.3.4 サーバー側の問題(サーバーがダウンしている、設定ミス)
接続しようとしているサーバー自体が停止しているか、サーバー側のv2ray設定に問題がある可能性も考えられます。サーバー管理者に確認してください。サーバーのIPアドレスに対して ping
や traceroute
コマンドを実行して、基本的なネットワーク到達性を確認することも有効です。
bash
ping your_v2ray_server.com
traceroute your_v2ray_server.com
また、サーバーの特定のポートが開いているか、nc
(netcat) や telnet
コマンドで確認することもできます。
bash
nc -vz your_v2ray_server.com 443 # 例: TCPポート443が開いているか確認
8.3.5 ネットワーク環境(特定のポートがブロックされているなど)
利用しているネットワーク(自宅、職場、カフェ、公共Wi-Fiなど)によっては、特定のポートやプロトコルへの接続がISPやネットワーク管理者によって意図的にブロックされている場合があります。VMess/VLESS over WebSocket + TLS + 443ポートは、Web通信に偽装するため、このようなブロックを回避しやすいとされています。もしTCP直接接続でブロックされる場合は、トランスポートやポートを変更することを検討してください。
8.3.6 v2rayの権限問題
Homebrew Servicesでインストールした場合、通常は権限の問題は発生しにくいですが、手動でインストールした場合などに、v2rayがログファイルや設定ファイルを書き込めない、あるいはネットワークポートをlistenできないといった権限不足が原因で起動に失敗することがあります。ファイルの所有者や権限を確認し、必要であれば chmod
や chown
コマンドで修正します。
8.3.7 DNS解決の問題
v2rayがサーバーのホスト名をIPアドレスに解決できない場合、接続は失敗します。MacのDNS設定や、v2rayの dns
セクション設定を確認してください。また、dig
や nslookup
コマンドでホスト名が正しく解決できるかテストします。
bash
dig your_v2ray_server.com
v2ray自身のDNS設定(dns
セクション)で、信頼できるDNSサーバー(例: Google DNS 8.8.8.8, Cloudflare DNS 1.1.1.1)を指定することも、DNS関連の問題回避やプライバシー保護に有効です。
json
"dns": {
"servers": [
"8.8.8.8", // Google Public DNS
"1.1.1.1", // Cloudflare DNS
"localhost" // システムのDNS設定を使用
]
},
8.3.8 ルーティング設定の誤り
ローカルプロキシ設定は正しいのに、プロキシ経由で通信できない場合、routing
設定に誤りがある可能性があります。目的のトラフィックが正しく "proxy"
タグの outbounds
に振り分けられているか、rules
の順序や条件を確認してください。意図しないルールが先にマッチして、トラフィックが "direct"
や "blocked"
に送られていないか確認します。
8.4 デバッグログの活用 (log
セクションを詳細に設定)
上記の設定ファイル例では loglevel
を "warning"
に設定していましたが、トラブルシューティング時には loglevel
を "info"
または "debug"
に引き上げると、v2rayの動作に関するより詳細な情報を得られます。
json
"log": {
"error": "/usr/local/var/log/v2ray/error.log", // 必要に応じてパスを指定
"loglevel": "debug" // または "info"
},
設定変更後にv2rayを再起動し、tail -f
でログファイルを監視しながらプロキシ経由の通信を試みてください。接続が試みられた際のログ(例: “handling connection from…”, “dialing outbound proxy…”, “dialing direct…” など)や、エラーメッセージ (failed to process inbound connection > outbound proxy: ...
) が出力され、問題の原因特定に役立つはずです。デバッグ完了後は、ログファイルが肥大化するのを防ぐため、loglevel
を元に戻すか、warning
または error
に設定し直すことを忘れないでください。
第9章:Mac用v2ray GUIクライアントの紹介と活用
v2ray-core自体はコマンドラインツールであり、設定はJSONファイルで行います。これは非常に柔軟ですが、設定の管理や切り替え、システムプロキシとの連携などが手動では煩雑になることがあります。そこで、多くのMacユーザーは、v2ray-coreをバックエンドとして利用するGUIクライアントを好んで使用します。GUIクライアントは、設定の入力、サーバーリストの管理、プロキシのオン/オフ切り替え、システムプロキシ設定の自動変更などを容易にしてくれます。
9.1 なぜGUIクライアントを使うのか?(利便性、設定管理、システム連携)
GUIクライアントを利用する最大のメリットは、その使いやすさです。
- 直感的な設定: サーバー情報をテキストフィールドやドロップダウンメニューで入力できます。複雑なJSONを手動で編集する必要がありません。
- サーバーリスト管理: 複数のサーバー設定をリストとして保存し、簡単に切り替えられます。
- ワンクリック操作: プロキシのオン/オフをメニューバーアイコンなどから簡単に行えます。
- システムプロキシ連携: macOSのシステムプロキシ設定を自動で変更できます。これにより、Mac上のほとんどのアプリケーションがv2rayを経由するようになります。
- 統計情報/ログ表示: 一部のGUIクライアントは、接続状況やトラフィック統計、ログなどを分かりやすいインターフェースで表示します。
- 購読機能: サーバー情報を提供するサービスで利用できる購読URLに対応しているクライアントもあり、サーバーリストの更新が容易になります。
9.2 GUIクライアントの仕組み(多くはv2ray-coreをバックエンドに使用)
多くのv2ray GUIクライアントは、アプリケーションの内部または同梱された形でv2ray-coreの実行ファイルを含んでいます。ユーザーがGUIで設定した内容は、内部的にJSON形式のv2ray設定ファイルに変換され、その設定ファイルを使ってv2ray-coreプロセスが起動されます。GUIアプリケーションは、このv2ray-coreプロセスを管理し、必要に応じて設定を更新して再起動したり、macOSのネットワーク設定を操作したりします。
したがって、GUIクライアントを使用する場合でも、裏側ではこの記事で解説してきたv2ray-coreが動作しています。GUIクライアントの設定項目が、どのconfig.jsonの設定に対応しているかを理解しておくと、より深くv2rayを制御できるようになります。
9.3 代表的なMac用v2ray GUIクライアント
Macで利用できるv2ray GUIクライアントはいくつか存在します。それぞれ特徴や開発状況が異なります。
9.3.1 V2RayX(歴史あり、基本的な機能)
かつてMac用v2ray GUIクライアントとして広く使われていましたが、近年は開発が停滞しているようです。メニューバーアイコンから基本的な操作やサーバー設定が可能です。機能は比較的シンプルです。GitHubで公開されていますが、最新のmacOSやv2ray機能(VLESS, XTLSなど)への対応が遅れている場合があります。
9.3.2 V2RayU(人気)
比較的アクティブに開発されている人気のクライアントです。メニューバーからの操作、サーバーリスト管理、購読機能、詳細な設定オプション、ルーティングルールの編集など、多くの機能を備えています。VMess、VLESS、Shadowsocks、Trojanなど多くのプロトコルに対応しています。UIも比較的洗練されています。
9.3.3 ClashX / Clash Verge(Clashコアベースだがv2rayプロトコルをサポート、ルールベースルーティングに強い)
Clashはv2rayとは別のプロキシコアですが、v2rayプロトコル(VMess, VLESSなど)をサポートしており、独自のYAML形式の設定ファイルと、強力なルールベースルーティング機能を特徴としています。ClashXはMac向けの有名なClashクライアントでしたが、開発が停止しました。その後継としてClash Vergeなどの派生クライアントが登場しています。v2rayだけでなく、様々なプロトコルを統合的に管理したい場合や、複雑なルーティングルールをYAMLで記述することに抵抗がないユーザーに適しています。設定ファイル形式がv2rayのJSONとは異なる点に注意が必要です。
9.3.4 その他(Kitsunebi, Shadowrocket for iOS/iPadOSをMacで動かすなど)
iOS/iPadOS向けのv2rayクライアント(Kitsunebi, Shadowrocketなど)を、Apple Silicon Macで動作させることも可能な場合があります。ただし、ネイティブなMacアプリではないため、操作性やシステム連携に制約があることがあります。
どのGUIクライアントを選ぶかは、機能要件、使いやすさ、開発状況などを考慮して決定してください。多くの場合、V2RayUがバランスの取れた選択肢となります。
9.4 GUIクライアントを使った設定方法の概略(通常はサーバーURL/QRコード/手動入力で設定)
GUIクライアントでのサーバー設定は、通常以下のいずれかの方法で行います。
- v2ray/vless/vmess リンク (v2ray/vless/vmess://…) のインポート: 一部のGUIクライアントは、特定の形式でエンコードされたURL文字列をインポートできます。このURLにはサーバー接続に必要な情報(アドレス、ポート、UUID、プロトコル、トランスポート設定など)が含まれています。
- QRコードのスキャン: v2rayN (Windowsクライアント) など、一部のサーバー管理ツールやクライアントは、設定情報をQRコードとして表示する機能を持っています。GUIクライアントの「QRコードをスキャン」機能を使って、Macの画面上のQRコードや画像ファイルを読み込むことで、簡単に設定を取り込めます。
- 手動入力: GUI上のフォームに、サーバーアドレス、ポート、UUID、プロトコル、トランスポートなどの情報を手入力します。
これらの方法でサーバー情報を追加すると、クライアントは内部的にv2rayのconfig.jsonに相当する設定を生成・管理してくれます。ユーザーは通常、接続したいサーバーを選択し、「接続」ボタンやメニューをクリックするだけでv2rayが起動し、システムプロキシが設定されます。
9.5 GUIクライアント利用時の注意点(config.jsonとの連携/競合)
GUIクライアントを使用する場合、Homebrewでインストールしたv2ray-coreを直接操作することは通常ありません。GUIクライアントが独自のv2ray-coreバイナリを使用したり、特定のパスにあるバイナリを指定したりします。
もしあなたがHomebrewでインストールしたv2rayと、GUIクライアントの両方を使いたい場合、両方が同時に実行されないように注意が必要です。Homebrew Servicesでv2rayを起動している状態でGUIクライアントを起動すると、ポートの競合などが発生してどちらか、あるいは両方が正常に動作しない可能性があります。
GUIクライアントを主に使うのであれば、Homebrew Servicesでv2rayが自動起動しないように設定(brew services stop v2ray
し、plistファイルを手動で無効にするか削除するなど)するか、Homebrew版をアンインストールすることを検討してください。または、GUIクライアントがHomebrewでインストールされたv2ray-coreを使うように設定できれば、バイナリの重複を避けられますが、これはクライアントの実装によります。
第10章:応用的なv2ray設定
これまでの章では基本的なv2rayのインストールと、単一のVMess/VLESSサーバーへの接続設定を解説しました。v2rayの真価は、その高度なルーティング機能と多様なトランスポート偽装にあります。ここでは、より実践的で応用的な設定例を紹介します。
10.1 複数のアウトバウンド設定
outbounds
セクションは配列なので、複数の送信設定を定義できます。これにより、異なるプロトコルや異なるサーバーへの接続をv2ray一つで管理できます。
json
"outbounds": [
{ // メインのVMessプロキシ
"protocol": "vmess",
"settings": { ... },
"streamSettings": { ... },
"tag": "proxy_main"
},
{ // 別のVLESSプロキシ (フォールバックや特定の用途向け)
"protocol": "vless",
"settings": { ... },
"streamSettings": { ... },
"tag": "proxy_backup"
},
{ // 中国国内への直通
"protocol": "freedom",
"settings": {},
"tag": "direct_cn"
},
{ // その他の直通
"protocol": "freedom",
"settings": {},
"tag": "direct_other"
},
{ // ブロック用
"protocol": "blackhole",
"settings": {},
"tag": "blocked"
}
]
このように複数の outbounds
を定義し、routing
セクションでどのトラフィックをどの outboundTag
に送るかを指定します。
10.1.1 特定ドメイン/IPを別サーバーへ転送
例えば、特定のゲームサーバーへの通信は低遅延な別プロキシを使いたい、といった場合に利用できます。
json
"routing": {
"rules": [
// ... 他のルール (blocked, direct_cn) ...
{
"type": "field",
"domain": [
"game.example.com", // ゲームサーバーのドメイン
"geoip:jp" // 例: 日本のIPアドレスへはproxy_backupを使う
],
"outboundTag": "proxy_backup" // 別サーバーへ送る
},
{
"type": "field",
"inboundTag": [ "socks_inbound", "http_inbound" ],
"outboundTag": "proxy_main" // それ以外のプロキシトラフィックはメインサーバーへ
}
]
}
このルールは、先頭に近い位置に配置することで、他のルール(例: 中国国内は直通)よりも優先されます。
10.1.2 フォールバック設定
メインのプロキシサーバーが利用できない場合に、自動的に別のプロキシサーバーに切り替える設定も可能です。これは outbounds
のリストの順序と、routing
の fallbackTag
を組み合わせて実現します(ただし、フォールバックの振る舞いはプロトコルやv2rayのバージョンに依存する場合があるため、公式ドキュメントでの確認推奨)。より確実な方法として、Clashなどのルールベースクライアントを利用したり、スクリプトでv2rayの設定ファイルを動的に切り替えたりすることも検討できます。
10.1.3 ロードバランシング
v2rayは簡単なロードバランシング機能もサポートしています。複数のサーバーを定義し、トラフィックを分散させることができます。これは outbounds
の settings
内で vnext
配列に複数のサーバーを記述し、protocol
に応じて設定します。
VMess/VLESSの場合、vnext
に複数のサーバーを列挙するだけではロードバランシングにはならず、通常はリストの最初のサーバーが使われます。確実なロードバランシングやプロキシグループ機能が必要な場合は、Clashなどのコアを利用するGUIクライアントの方が適しています。
10.2 高度なルーティング設定
routing
セクションの rules
は非常に強力です。様々な条件を組み合わせて、細かくトラフィックを制御できます。
10.2.1 domain
と ip
ルールの詳細(geo-site, geo-ip, regexp, etc.)
domain
マッチングでは、以下のタイプが使用できます。
"example.com"
: 完全一致。".example.com"
: サブドメインを含む(www.example.com
,mail.example.com
など)。"domain:example.com"
: 上記のサブドメインを含む形式と同じ。"keyword:example"
: ドメイン名に指定したキーワードが含まれる場合にマッチ。"regexp:.*\\.example\\.com$"
: 正規表現。強力ですが、記述が難しい場合があります。"geosite:cn"
: v2rayに付属のgeosite.dat
ファイルの「cn」(中国)グループに属するドメインにマッチ。geosite:geolocation-!cn
は中国 以外の ドメインにマッチします。geosite:category-games
のように、特定のカテゴリに属するドメインのリストも利用できます。
ip
マッチングでは、以下のタイプが使用できます。
"1.2.3.4"
: 特定のIPアドレス。"1.2.3.4/24"
: CIDR形式のIPアドレス範囲。"geoip:cn"
: v2rayに付属のgeoip.dat
ファイルの「cn」(中国)グループに属するIPアドレスにマッチ。geoip:cn
はIPv4とIPv6の両方の中国IPリストを含みます。geoip:cn,kp
のように複数指定したり、geoip:!cn
のように否定も可能です。
geosite
と geoip
は非常に便利な機能で、特定の国やカテゴリに関連するドメイン/IPリストを簡単に利用できます。これらのデータファイルは定期的に更新されるため、Homebrewの場合は brew upgrade v2ray
でv2rayコアと一緒に更新されます。
10.2.2 port
, network
, source
, user
などの条件
rules
では、他にも様々な条件を組み合わせることができます。
port
: 宛先ポート番号を指定(例:"80"
,"443"
,"53-100"
範囲指定)。network
: トラフィックのネットワークタイプを指定("tcp"
,"udp"
)。source
: 発信元IPアドレスまたはCIDRを指定(例:"192.168.1.100"
,"192.168.1.0/24"
)。user
:inbounds
で認証されたユーザー名を指定。ローカルSOCKS/HTTPプロキシでユーザー認証を有効にした場合に利用できます。inboundTag
: このルールが適用される受信設定のタグを指定。outboundTag
: このルールを適用後にトラフィックが向かう送信設定のタグを指定。
複数の条件を指定した場合、それら全てにマッチした場合にルールが適用されます(AND条件)。
10.2.3 ブラックホール (blackhole
) とブロック (block
)
blackhole
プロトコルは、受信した接続を即座に閉じ、データを送信しません。これは、意図しないトラフィックを破棄するために使用します。blocked
タグをつけた outbounds
に blackhole
を設定するのが一般的です。
json
"outbounds": [
// ... other outbounds ...
{
"protocol": "blackhole",
"settings": { "response": { "type": "http" } }, // オプション: HTTP応答を返すなど
"tag": "blocked"
}
],
"routing": {
"rules": [
{
"type": "field",
"domain": ["badsite.example.com"],
"outboundTag": "blocked" // badsite.example.comへのアクセスをブロック
}
// ... other rules ...
]
}
blackhole
の settings
で response
タイプを指定すると、クライアントに特定のエラー応答(例: HTTP 403 Forbidden)を返すように設定できます。
10.3 トランスポート偽装の詳細(WebSocket+TLS+CDN、HTTP/2+TLS)
特定の環境下では、通常のTLS暗号化されたTCP接続でも検知されることがあります。これを回避するために、WebSocketやHTTP/2をTLSと組み合わせて、あたかも一般的なWebトラフィックのように見せかける偽装技術が非常に有効です。さらに、CDN(Content Delivery Network)を組み合わせることで、v2rayサーバーのIPアドレスを隠蔽し、ブロックをさらに困難にすることができます。
10.3.1 CDN経由設定の概念
CDNは、Webサイトのコンテンツを世界中のサーバーに分散配置し、ユーザーに最寄りのサーバーから配信するサービスです。Cloudflareなどの一部のCDNサービスは、プロキシ機能を提供しており、ユーザーからのアクセスはCDNのエッジサーバーで受け、そこからオリジンサーバー(あなたのv2rayサーバー)に転送されます。
この仕組みを利用し、v2rayサーバーをオリジンサーバーとして設定し、CDNを有効にします。クライアント側のv2rayは、直接v2rayサーバーのIPアドレスに接続するのではなく、CDNのエッジサーバーのIPアドレスに接続します。この際、接続先のアドレスとしてはCDNのドメイン名を使用し、SNIやHostヘッダーにもそのドメイン名を指定します。CDNのエッジサーバーは、受け取ったWebSocketまたはHTTP/2 over TLSのトラフィックを、オリジンサーバー(あなたのv2rayサーバー)に転送します。外部から見ると、あなたの通信はCDNへのアクセスに見えるため、検知やブロックが非常に困難になります。
この設定を行うには、ドメイン名、TLS証明書、そしてCDNサービスが必要です。サーバー側v2rayは、指定されたドメイン名でTLS証明書を設定し、CDNからのトラフィックをWebSocketまたはHTTP/2で待ち受けるように設定します。
10.3.2 WebSocket設定の詳細 (path
, headers
)
クライアント側の streamSettings
でWebSocket over TLS + CDN経由を設定する場合、以下の点に注意が必要です。
json
"streamSettings": {
"network": "ws",
"security": "tls",
"tlsSettings": {
"allowInsecure": false, // 証明書検証は有効に
"serverName": "your_cdn_domain.com", // ★SNIはCDNドメイン
"alpn": ["h2", "http/1.1"] // Webサーバーが使用するALPN
},
"wsSettings": {
"path": "/your_websocket_path", // ★サーバー設定と一致
"headers": {
"Host": "your_cdn_domain.com" // ★HostヘッダーもCDNドメイン
}
}
}
* address
(outbounds/vnext内) はCDNのIPアドレス範囲に解決されるホスト名(通常はCNAMEレコードでCDNを指しているあなたのドメイン名)を指定するか、GUIクライアントによってはCDNのIPアドレスを指定します。
* serverName
(tlsSettings) と Host
(wsSettings/headers) は、CDNサービスに登録したあなたのドメイン名、またはCDNサービスが指定するホスト名を正確に指定します。これは、CDNがどのオリジンサーバーにトラフィックを転送するかを判断するために使用します。
* path
(wsSettings) は、サーバー側v2rayで設定したWebSocketのエンドポイントパスと正確に一致させる必要があります。
10.3.3 HTTP/2設定の詳細 (path
, host
)
HTTP/2 over TLS + CDN経由も同様の考え方で設定します。
json
"streamSettings": {
"network": "http2",
"security": "tls",
"tlsSettings": {
"allowInsecure": false,
"serverName": "your_cdn_domain.com", // ★SNIはCDNドメイン
"alpn": ["h2"] // HTTP/2の場合は通常"h2"
},
"http2Settings": {
"path": "/your_h2_path", // ★サーバー設定と一致 (配列可)
"host": ["your_cdn_domain.com"] // ★HostヘッダーもCDNドメイン (配列形式)
}
}
基本的な考え方、アドレス、SNI、Hostの設定はWebSocketの場合と同じです。path
は配列形式で指定することもできます。
これらの高度な偽装設定は、サーバー側の設定と密接に関連しています。サーバー側でWebSocket/HTTP/2のパス、TLS証明書、必要であればCDN設定が正しく行われている必要があります。
10.4 DNS設定 (dns
セクション)
v2rayは、プロキシ経由でアクセスするドメイン名の名前解決を自身で行うことができます。これにより、DNS Leakを防いだり、特定のドメインに独自のIPアドレスを対応付けたりできます。
json
"dns": {
"servers": [
{
"address": "1.1.1.1", // Cloudflare DNS
"port": 53,
"domains": [ "geosite:cn" ], // 中国国内ドメインの解決には使用しない
"expectIP": "geoip:!cn" // 中国国内のIPアドレス以外を期待する
},
{
"address": "8.8.8.8", // Google DNS
"port": 53,
"domains": [ "geosite:cn" ], // 中国国内ドメインの解決には使用しない
"expectIP": "geoip:!cn"
},
"localhost" // システムのDNS設定も併用 (フォールバックなど)
// または特定の国や地域のDNSサーバー
// { "address": "223.5.5.5", "domains": [ "geosite:cn" ], "expectIP": "geoip:cn" } // 例: 中国アリババDNSを中国ドメインに使用
],
"hosts": {
"domain.com": "1.2.3.4", // 特定ドメインを静的IPにマッピング
"another.com": "forward.google.com" // 他のドメインに転送 (v2ray 4.30+)
}
}
servers
: 使用するDNSサーバーのリストです。IPアドレスまたはドメイン名(v2ray自身で解決できる必要がある)で指定します。各サーバーに対して、そのサーバーを使用する条件 (domains
,expectIP
,network
,port
) を指定できます。条件を指定しないサーバーは、全ての問い合わせに使用されます。domains
: そのDNSサーバーを使用するドメインのリスト。geosite
も使用可能。expectIP
: そのDNSサーバーからの応答として期待するIPアドレスのリスト(またはgeoip
)。これにより、誤ったIPアドレスを返すDNSサーバーをフィルタリングできます。hosts
: 特定のドメイン名を静的なIPアドレスにマッピングします。hostsファイルのような機能です。これにより、特定のドメインへのアクセスを強制的に特定のIPアドレスに送ることができます。
適切なDNS設定は、プライバシーの保護(DNS Leak防止)とルーティングの正確性(特に domain
ルール)のために重要です。
第11章:セキュリティとプライバシーに関する考慮事項
v2rayは強力なセキュリティ機能を提供しますが、それ自体がインターネット上の全ての脅威からあなたを完全に保護するわけではありません。v2rayを安全かつプライベートに使用するためには、いくつかの重要な考慮事項があります。
11.1 v2rayはツール:利用方法の重要性
v2rayはあくまでネットワーク通信を仲介し、暗号化や偽装を行うためのツールです。ツールの設定方法や、利用するネットワーク環境、そしてサーバーの信頼性など、様々な要素が組み合わさって初めてセキュリティとプライバシーが確保されます。v2rayを正しく設定し、信頼できるサーバーと組み合わせて使用することが不可欠です。
11.2 TLS/XTLSによる暗号化の必要性
インターネット上の通信内容が第三者に盗聴されるのを防ぐために、TLSまたはXTLSによる暗号化は必須です。streamSettings
で security: "tls"
を設定し、適切な tlsSettings
(特に allowInsecure
を false
に設定すること)を行うことを強く推奨します。TLSを使用しない接続は、通信内容が平文で送受信されるため非常に危険です。
11.3 サーバープロバイダーの選定
自分でv2rayサーバーを構築しない場合、サービスプロバイダーからサーバーをレンタルすることになります。このプロバイダーの信頼性が非常に重要です。
- プロバイダーがあなたの通信ログを記録しないか?
- 法的にログの提出を義務付けられている国/地域にあるか?
- サーバーのセキュリティ管理は適切か?
- サーバーへの物理的なアクセスは安全か?
信頼できる実績があり、プライバシーポリシーが明確なプロバイダーを選びましょう。無料または非常に安価なサービスは、リスクが高い場合があります。
11.4 設定情報の安全な管理
v2rayサーバーへの接続に必要な情報(サーバーアドレス、ポート、UUID、パスワード、パス、Hostなど)は、第三者に知られてはならない機密情報です。これらの情報が漏洩すると、あなたのプロキシ接続が悪用されたり、特定されたりするリスクがあります。
- config.jsonファイルは安全な場所に保管し、不要になった情報は削除しましょう。
- 他人とサーバー情報を共有する際は、その信頼性を十分に考慮しましょう。
- GUIクライアントを使用する場合も、クライアントがサーバー情報をどのように管理しているか理解し、適切に保護しましょう。
11.5 DNS Leakの対策
システムプロキシ設定を使用する場合、DNSクエリがプロキシを経由せずに直接インターネットに送信されてしまう「DNS Leak」が発生することがあります。これにより、アクセスしているドメイン名がISPなどに知られてしまう可能性があります。
v2rayの dns
セクションを適切に設定し、信頼できるDNSサーバー(Cloudflare, Google Public DNSなど)を使用することで、DNS Leakを防ぐことができます。Macのシステム設定で、DNSサーバーを手動で信頼できるものに設定することも併用するとより安全です。
11.6 Kill Switch機能の検討(Macのファイアウォールルール、サードパーティアプリ、スクリプトなど)
プロキシ接続が予期せず切断された場合、アプリケーションからの通信がプロキシを経由せずにインターネットに直通してしまうリスクがあります。これを防ぐための機能がKill Switchです。v2ray-core自体には組み込みのKill Switch機能はありませんが、Macのファイアウォールルールやサードパーティ製のツール、あるいはシェルスクリプトなどを組み合わせて実現できます。
例えば、Macのpf(Packet Filter)ファイアウォールを設定し、v2rayが起動している間だけ特定の通信(v2rayのローカルプロキシポートへの接続以外)を許可し、v2rayプロセスが停止したら全ての外部通信をブロックするといったルールを記述することで、Kill Switchと同様の効果を得られます。GUIクライアントの中には、このKill Switch機能を実装しているものもあります。
11.7 法的・倫理的な問題(利用地域の法規制遵守)
v2rayやプロキシツールをどのように利用するかは、利用者の責任です。お住まいの国や地域の法律・規制を遵守してください。許可されていない情報の取得や、違法な活動にv2rayを使用することは絶対に避けてください。v2rayは通信の自由を支援するツールであり、違法行為を助長するためのものではありません。
結論:Macでのv2ray活用をマスターするために
この記事では、Macにv2ray-coreをインストールする方法から始まり、設定ファイル config.json
の基本的な構造、ローカルプロキシ設定、そしてVMess/VLESSプロトコルを使ったクライアント設定の詳細を解説しました。さらに、v2rayの起動・管理方法、トラブルシューティング、Mac用GUIクライアントの紹介、応用的な設定例、そしてセキュリティとプライバシーに関する重要な考慮事項についても詳しく説明しました。
v2rayは、その柔軟性と高機能性ゆえに、設定にはある程度の学習が必要です。特に config.json
を手動で編集することは、最初は難しく感じるかもしれません。しかし、JSONの基本的なルールと各セクション(inbounds
, outbounds
, routing
, streamSettings
など)の役割を理解すれば、自分のニーズに合わせてv2rayの動作を自在にカスタマイズできるようになります。
Homebrewを使ったインストールは、Macでv2ray-coreを管理する上で最も便利な方法です。そして、GUIクライアントを利用すれば、JSON設定の手間を省き、より直感的にv2rayを操作できます。CLIでの設定はv2rayの仕組みを深く理解するのに役立ち、GUIクライアントは日常的な利用を容易にします。両方を理解しておくことで、問題発生時にも対応しやすくなります。
この記事で紹介した内容は、v2rayの機能のほんの一部に過ぎません。v2rayは非常に多機能であり、様々なプロトコル、トランスポート、ルーティングオプション、APIなどを提供しています。より高度な設定や最新機能については、Project Vの公式ドキュメントを参照することをお勧めします。
インターネット環境は常に変化しており、通信のブロックや検知技術も進化しています。v2rayやその周辺技術も、それに対抗するために常にアップデートされています。定期的にv2ray-coreやGUIクライアントをアップデートし、最新の設定方法や推奨されるプロトコル・トランスポートについて情報を収集することも重要です。
Macでのv2rayのインストールと設定は、単なる技術的なステップにとどまりません。それは、デジタル世界におけるあなたのプライバシーと自由を確保するための手段です。この記事が、あなたがMacでv2rayを効果的に活用し、より安全で開かれたインターネット体験を実現するための一助となれば幸いです。