Clashの混合ポートとLAN共有プロキシ:リッスンアドレス、ファイアウォール、デバイス接続

混合ポート、LANアクセス、リッスンアドレスを確認し、同じネットワーク上の端末から接続する方法と安全な公開範囲を解説します。

NET-01 / QUICK RESULT

まず結論:共有プロキシには4つの条件が必要

1台のPCでClashを実行し、同じLAN上のスマートフォン、タブレット、別のPCからプロキシ経由で接続する場合、単に「LAN接続を許可」をオンにするだけでは不十分です。必要なのは、Clashのコアが他の端末から到達できるネットワークインターフェースで待ち受けること、LANアクセスを有効にすること、ホストのファイアウォールで対象ポートへの受信接続を許可すること、接続側で正しいホストのLANアドレスとポートを指定することです。どれか1つでも満たさなければ、タイムアウト、接続拒否、一部アプリだけ利用可能といった状態になります。

一般的で管理しやすい方法は、mixed-portを有効にしてHTTPプロキシとSOCKS5プロキシを同じポートで受け付けることです。スマートフォンのWi-Fi手動プロキシでは通常HTTPプロキシを指定し、SOCKS5に対応するデスクトップアプリやネットワークツールは同じポートへ接続してSOCKS5のハンドシェイクを行えます。混合ポートは入口を統一するだけで、通常のHTTPリクエストとSOCKS5リクエストを混同するものではありません。コアが接続プロトコルを判別して処理します。

基本設定は次のように記述できます。GUIクライアントによっては画面上のスイッチからこれらの項目を生成する場合があり、サブスクリプション更新後に設定が上書きされることもあります。変更後は、サブスクリプションの元ファイルだけでなく、実際に実行されている設定を開いて結果を確認してください。

mixed-port: 7890
allow-lan: true
bind-address: "*"
mode: rule
log-level: info

mixed-portはプロキシの入口を指定し、allow-lanは本機以外のLANからの接続を許可します。bind-addressはどのローカルアドレスで待ち受けるかを決めます。アスタリスクを指定すると利用可能なインターフェースで待ち受けるため設定は簡単ですが、公開範囲が広くなります。より厳格に運用する場合は、Clashを実行しているLANインターフェースのアドレス、たとえば192.168.1.20にバインドします。ただし、そのアドレスが固定されていることが前提です。

J1 / MIXED LISTENER

混合ポートで解決できること

従来のClash設定では、portsocks-portを個別に指定できます。前者はHTTPプロキシの入口、後者はSOCKS5プロキシの入口です。プロトコルごとに制御できる一方、接続端末が増えると2つのポートを覚える必要があり、システムプロキシの入力ミスも起こりやすくなります。mixed-portは2つの入口を1つのTCPポートにまとめるため、家庭内LAN、テスト端末、一時的な共有に適しています。

混合ポートを有効にしても、LAN上の端末のすべての通信が自動的に取り込まれるわけではありません。接続側でHTTPまたはSOCKS5プロキシを明示的に設定するか、端末上のアプリからプロキシへ接続する必要があります。スマートフォンのWi-Fi設定にある「手動プロキシ」は、通常、システムのHTTPプロキシ設定に従うアプリにしか適用されません。独自のネットワークスタックを使うアプリ、宛先へ直接接続するアプリ、システムプロキシを無視するアプリはClashを経由しない場合があります。「ブラウザーは使えるのに、特定のアプリは使えない」場合は、まずそのアプリがシステムプロキシに対応しているか確認し、すぐにノードやルールを変更しないでください。

SOCKS5のUDP転送は、接続アプリ、コアのバージョン、各プロトコルの実装にも左右されます。TCPリクエストが混合ポート経由で成功したからといって、すべてのUDP通信も同じように処理されるとは限りません。ゲーム、リアルタイム通信、QUICを利用するアプリは個別に検証が必要です。端末の大部分の通信を取り込むことが目的なら、リモートの混合ポートを仮想ネットワークインターフェースの代わりにするのではなく、その端末上で互換性のあるTUNモードを使用してください。

接続方式 接続側に入力する内容 適した用途 主な制限
HTTPプロキシ ホストのLAN IPと混合ポート ブラウザー、システムのWi-Fi手動プロキシ アプリがシステムプロキシに従わない場合がある
SOCKS5プロキシ ホストのLAN IPと混合ポート SOCKS5対応のデスクトップアプリとツール UDP対応は個別に検証が必要
TUNモード 通常は接続側端末で設定 より多くのアプリ通信を対象にする場合 権限、ルーティング、DNS設定が必要

混合ポートとルールモードの関係

ポートは接続を受け付けるだけで、最終的に直接接続するか、プロキシノードを使うか、接続を拒否するかは、Clashの動作モード、ルールセット、プロキシグループによって決まります。ruleモードでは、LAN端末から届いたドメイン名や宛先アドレスが同じルールマッチング処理に入ります。グローバルモードでは通常、通信がグローバルのプロキシグループへ渡され、ダイレクトモードでは、端末が混合ポートへの接続に成功してもリクエストが宛先へ直接アクセスする場合があります。

そのため、共有プロキシをテストするときは、現在のモードとプロキシグループの選択も記録してください。スマートフォンでウェブページを開けても出口IPアドレスが変わらない場合は、ルールがDIRECTに一致していないか、対象ドメインがローカルDNSによって想定と異なるアドレスに解決されていないかを確認します。ポートへの接続が成功したことは接続経路が成立したことを示すだけで、プロキシルールが適用されたことを意味しません。

J2 / BIND ADDRESS

allow-lanとリッスンアドレスを必ずセットで確認

allow-lan: trueは他のホストからプロキシのリスナーへ接続できるようにしますが、実際にどのネットワークインターフェースで接続を受けるかは、リッスンアドレスにも左右されます。プロセスが127.0.0.1だけで待ち受けている場合、そのポートは本機のループバックインターフェースにしか開かれません。他の端末からPCへpingが通っても、プロキシには接続できません。0.0.0.0で待ち受ける場合や設定のアスタリスクで全インターフェースを対象にする場合、ポートは複数のIPv4インターフェースに現れます。特定のLAN IPにバインドした場合は、そのインターフェースからのみ利用できます。

安全性を高めるには、まず共有範囲を決めます。家庭用のネットワークインターフェースが1つだけで環境を管理できる場合は、全インターフェースで待ち受けたうえで、ファイアウォールにより送信元サブネットを制限する方法もあります。PCが会社のVPN、仮想マシンのインターフェース、コンテナネットワーク、テザリングに同時接続している場合は、実際のLANアドレスにバインドし、不要なインターフェースへプロキシ入口が公開されないようにしてください。特定のアドレスへバインドした後にDHCPでIPが変わると、Clashが古いアドレスで待ち受け続けられないことがあります。ルーターでDHCPアドレス予約を設定するか、アドレス変更時に設定も更新してください。

他の端末に入力するアドレスの確認方法

  • Windowsではネットワーク設定から現在のWi-FiまたはイーサネットのIPv4アドレスを確認できます。ipconfigを実行し、現在使用中でデフォルトゲートウェイが設定されたインターフェースを探す方法もあります。
  • macOSではシステムのネットワーク設定から現在の接続情報を確認できます。ifconfigでアクティブなインターフェースのアドレスを調べることもできます。
  • Linuxではip addressを実行し、ip routeに表示されるデフォルトルートと照合して、実際の送信インターフェースを判断します。

スマートフォンに127.0.0.1を入力しないでください。ループバックアドレスは常に現在の端末自身を指します。スマートフォンから127.0.0.1:7890へアクセスすると、Clashを実行しているPCではなく、スマートフォン本体のサービスを探すことになります。仮想マシン、Docker、VPN、一時的なテザリング用インターフェースのアドレスも、接続端末が実際にそのネットワーク上にある場合を除き、優先して指定しないでください。

コアが実際に待ち受けているか確認

GUIに「LANを許可」と表示されていても、OSレベルでのリッスン状態の確認の代わりにはなりません。WindowsではPowerShellでポートを確認でき、macOSとLinuxではリッスンソケットを調べられます。結果がループバックアドレスだけなら、リモート端末は接続できません。LANアドレスまたはワイルドカードアドレスが表示されたら、次にファイアウォールを確認します。

# Windows PowerShell
Get-NetTCPConnection -State Listen -LocalPort 7890

# macOS
lsof -nP -iTCP:7890 -sTCP:LISTEN

# Linux
ss -lntp | grep 7890

ポートを別のプログラムが使用していると、Clashの起動に失敗したり、クライアントの既定ポートへ自動的に切り替わったり、ログにリッスンエラーが記録されたりします。トラブルシューティングでは、現在のコアのログとOSのソケット情報を基準にしてください。ポートを変更した場合は、接続するすべての端末も更新が必要です。古いWi-Fiプロキシ設定が新しいポートを自動検出することはありません。

F1 / HOST FIREWALL

必要なネットワークとポートだけをファイアウォールで許可

ClashがLANインターフェースで待ち受けているのに、他の端末から接続がタイムアウトする場合、次に確認すべきなのはホストのファイアウォールです。混合ポートへのTCP受信接続を許可し、できるだけ現在の家庭内またはオフィス内サブネットに限定してください。たとえばPCのアドレスが192.168.1.20、サブネットマスクが255.255.255.0なら、一般的な送信元範囲は192.168.1.0/24です。実際のネットワーク範囲はルーターとOSの情報から判断し、例をそのまま使わないでください。

Windowsでは、現在の接続がプライベートネットワークかパブリックネットワークかを先に確認します。受信ルールはClashクライアントのプログラムに紐付けることも、指定したTCPポートに紐付けることもできます。ポートルールは検証しやすい一方、ポート変更時のメンテナンスが必要です。ルールのスコープはローカルサブネットまたは明示したアドレスに制限し、すべてのリモートアドレスへ公開しないでください。macOSでは初めて受信接続を受ける際にシステムの確認が表示されることがあります。現在使用しているクライアントプロセスへの許可であることを確認してください。Linuxでは、実際に利用しているnftables、firewalld、ufw、またはディストリビューションのファイアウォール設定に応じて受信ポリシーを構成します。

ファイアウォールで許可したら、別の端末からTCP接続をテストできます。TCP接続は確立するのにプロキシリクエストが失敗する場合、問題は通常、ネットワーク層からプロキシプロトコル、認証、ルール、上流ノードへ移っています。完全なタイムアウトは、ファイアウォールによる破棄、クライアント隔離、アドレス入力ミスが原因になりがちです。「接続が拒否されました」とすぐ返る場合は、宛先アドレスには到達できるものの、そのポートでプロセスが待ち受けていない可能性が高いです。

ルーターのクライアント隔離でも接続は遮断される

ゲストWi-Fi、無線クライアント隔離、一部の企業向け無線ネットワークでは、同じアクセスポイントに接続した端末同士の通信が禁止されます。この場合、スマートフォンはインターネットに接続でき、PCと似たサブネットを確認できても、PCのポートには接続できません。2台が同じメインネットワークに接続しているか、一方がゲストネットワークにいないか、ルーターでAP隔離が有効になっていないかを確認してください。二重ルーター環境では2つのサブネットが形成され、上位から下位への一方向ルートしかないため、端末同士が直接通信できない場合もあります。

P1 / CLIENT ACCESS

スマートフォンやPCを混合ポートへ接続する方法

接続前に、Clashを実行しているPCのLAN IPv4アドレス、混合ポート、現在のネットワーク名を記録します。PCのアドレスが192.168.1.20、混合ポートが7890だとすると、他の端末を同じルーターへ接続し、プロキシサーバーに192.168.1.20、ポートに7890を入力します。例のアドレスをそのまま使わず、実際にClashを実行しているホストのアドレスを指定してください。

AndroidとiOSのWi-Fi手動プロキシ

  1. 現在接続しているWi-Fiネットワークの詳細設定を開き、自動設定スクリプトではなく手動プロキシを選択します。
  2. サーバーまたはホスト名にはClashホストのLANアドレスを入力し、ポートには混合ポートを入力します。
  3. 保存後、まず通常のHTTPSサイトをブラウザーで開き、Clashの接続一覧とログにその端末のリクエストが表示されるか確認します。
  4. テストが終わったら手動プロキシをオフにしてください。現在のネットワークを離れた後も、到達できない内部アドレスへ接続し続けるのを防げます。

モバイルOSのWi-Fi手動プロキシは、主にHTTPとHTTPS接続を対象にします。HTTPSリクエストは通常、HTTPのCONNECTトンネルを通じて転送されるため、Clashはウェブ内容を復号しなくても、対象ホストとルールに基づいて接続を処理できます。一部のアプリはシステムプロキシ設定を読み込まず、別のアプリはUDPや独自の通信方式を使用します。そのため、1つのアプリの結果だけでシステム全体を判断することはできません。

Windows、macOS、Linuxからの接続

別のデスクトップPCでは、システムのネットワーク設定にHTTPプロキシを入力するか、ブラウザー、ターミナルツール、特定のアプリだけにプロキシを設定できます。SOCKS5対応アプリではプロトコルにSOCKS5を選び、同じホストアドレスと混合ポートを使用します。コマンドラインツールがシステムプロキシを読み込むかどうかは実装によって異なるため、必要に応じて現在のターミナルセッションでプロキシ環境変数を設定してください。

HTTP_PROXY=http://192.168.1.20:7890
HTTPS_PROXY=http://192.168.1.20:7890
ALL_PROXY=socks5://192.168.1.20:7890

これらの変数は形式の例にすぎません。ツールによって大文字・小文字の変数名や、socks5socks5hの扱いが異なります。一般にsocks5hは、ドメイン名の解決もプロキシ側に任せることを示します。使用前に対象ツールのドキュメントを確認し、互いに競合するシステムプロキシとアプリプロキシを同時に設定しないでください。

DNSの処理

LAN端末が混合ポートへ接続するときのDNS経路は、プロキシプロトコルとアプリの動作によって変わります。HTTPプロキシでは通常、対象ホスト名がプロキシサーバーへ渡されます。SOCKS5クライアントはドメイン名を送信する場合もあれば、本機でIPアドレスへ解決してから接続を要求する場合もあります。プロキシを経由しないスマートフォンのアプリは、引き続きシステムDNSを使用します。Clash設定のDNSモジュールは、混合ポートを開放しただけでネットワーク全体のDNSサーバーになるわけではありません。ClashのDNSリッスンポートと混合プロキシポートを混同しないでください。

ルールがドメイン名に依存している場合、クライアントが先にドメインをIPへ解決すると、コアがマッチングに利用できる情報が変わる可能性があります。mihomoはスニッフィング、DNS、ルール機能を組み合わせて一部のケースを改善できますが、有効化するかどうかは設定の入手元とプライバシー上の境界を考慮して決めてください。基本的な共有では、まずHTTPプロキシを安定させ、その後に特定アプリのドメイン識別を調整するのが安全です。

D1 / DIAGNOSTIC ORDER

ネットワーク層ごとに接続失敗を切り分ける

効率的なトラブルシューティングのポイントは、ノードを何度も変更するのではなく、層ごとに検証することです。まずClashを実行しているPCから混合ポート経由でアクセスできることを確認し、次にポートのリッスンアドレス、LAN接続とファイアウォール、最後にClashのルールと上流プロキシを確認します。次の順序で、多くの問題を切り分けられます。

  1. コアの動作状態を確認する。現在の設定が正常に読み込まれ、混合ポートが競合しておらず、ログにリッスン失敗やYAML解析エラーがないことを確認します。
  2. 本機のプロキシを確認する。Clashを実行しているPCから127.0.0.1:7890へ接続します。本機でも失敗する場合は、LAN設定を変更する前にコア、設定、ノードを確認してください。
  3. 実際のリッスンアドレスを確認する。ポートがLAN IPまたはワイルドカードアドレスで待ち受けており、ループバックインターフェースだけに限定されていないことを確認します。
  4. 2台の端末のネットワークを確認する。IPアドレス、サブネットマスク、デフォルトゲートウェイ、Wi-Fi名を確認し、ゲストネットワーク、クライアント隔離、二重ルーターの問題を除外します。
  5. ホストのファイアウォールを確認する。現在のネットワーク範囲から指定TCPポートへの接続を許可し、ルールが正しいネットワークプロファイルに適用されていることを確認します。
  6. 接続側の入力形式を確認する。サーバー欄にはIPアドレスまたはホスト名だけを入力し、ポートは数字として別欄に入力します。http://、パス、ポートをすべてホスト名欄に入れないでください。
  7. 接続一覧を確認する。端末からのリクエストが表示されれば、LAN経路はおおむね成立しています。その後、対象ドメイン、適用ルール、プロキシグループ、エラーログから次の問題を特定します。
症状 優先して確認する項目 よくある原因
接続がすぐ拒否される ポートのリッスン状態 ポートの誤り、コア未起動、別のアドレスにのみバインド
接続が長時間タイムアウトする ファイアウォールとネットワーク隔離 受信パケットの破棄、ゲストネットワーク、アドレスに到達できない
ブラウザーは使えるが、アプリは使えない アプリのプロキシ対応 アプリがシステムプロキシを無視する、またはUDPを使用する
リクエストは表示されるが直接接続になる モードとルールの適用結果 ダイレクトモード、またはルールがDIRECTを指定している
ルーター再起動後に使えなくなる ホストのLANアドレス DHCPによって新しいアドレスが割り当てられた
サブスクリプション更新後に使えなくなる 実際に実行されている設定 クライアントがallow-lanまたはポート設定を上書きした

設定がサブスクリプション更新で上書きされる場合

サブスクリプションには通常、プロキシノード、プロキシグループ、ルールが含まれますが、LANでの待ち受けは本機の実行パラメータです。クライアントによってサブスクリプション設定の統合方法は異なります。画面で設定したポートやLANスイッチを保持するもの、サブスクリプションの項目をそのまま使うもの、オーバーライド、設定パッチ、グローバル設定から最終設定を生成するものがあります。mixed-portallow-lanbind-addressは、できるだけクライアントのオーバーライド機能で管理し、更新のたびに一時ファイルを手編集するのは避けてください。

変更前に、現在正常に使える設定をコピーし、クライアントに表示される実際の設定パスを記録します。サブスクリプション更新後にリッスン状態と接続ログを再確認すれば、ノードの変更なのか、ローカルの待ち受けパラメータがリセットされたのかを素早く判断できます。Clash Meta(mihomo)コアを使用している場合は、クライアントのバージョンとコアのバージョンが対応する設定範囲も確認してください。別のクライアントに表示された項目名だけを根拠に、同じ動作をすると判断してはいけません。

TUNモードはLAN待ち受け設定の代わりにならない

TUNモードは主に、Clashを実行している本機の通信を取り込むための機能です。仮想ネットワークインターフェース、ルーティング、DNSを連携させ、より多くのアプリ通信を処理します。ホストでTUNを有効にしても、LAN上の他の端末が自動的にこのPCへ通信を送るわけではなく、ゲートウェイ転送も自動で行われません。他の端末で混合ポートを使うには、引き続きプロキシ設定が必要です。PCをLANゲートウェイとして使う場合は、IP転送、ルーティング、NAT、DNSを含む別のネットワーク設計が必要で、複雑さと安全上の境界も大きく異なります。

家庭内でスマートフォンのブラウザーやテスト端末に一時的なプロキシを提供するだけなら、混合ポートと手動プロキシで十分なことが多いです。複数の端末を長期的に接続する場合は、ホストアドレスを固定し、ファイアウォールの送信元を制限し、ポート変更を記録し、現在も利用中の端末を定期的に確認してください。これにより、問題を待ち受け、ネットワーク、プロキシプロトコル、ルールという明確な4つの層に切り分けられます。

NEXT ROUTE / ダウンロードと設定

OSに対応するクライアントを選ぶ

まずOSのアーキテクチャ、クライアントのコア、サブスクリプション形式を確認してから、ダウンロードして設定をインポートします。LAN共有を始める前に、実際のリッスンアドレスとホストのファイアウォール範囲も確認してください。

Clashをダウンロード OSとクライアントを選択