まずLAN共有プロキシの仕組みを確認する
LAN共有プロキシでは、Clashを実行しているPCをプロキシサーバーとして使います。テレビ、スマートフォン、タブレット、別のPCは従来どおりルーターに接続し、アプリが生成したHTTPまたはSOCKSトラフィックだけを、このPCのClashリスニングポートへ送信します。Clashはルールに従ってDIRECT、プロキシノード、その他のポリシーグループを選び、結果を接続元のデバイスに返します。
この方法でPCが完全なルーターになるわけではなく、同じWi-Fiに接続されたすべてのデバイスを自動的に経由させることもできません。接続するデバイスはプロキシサーバーを手動入力できる必要があり、またはブラウザーやダウンロードツールなどのアプリごとにプロキシを設定します。一部のゲーム、音声通話、UDP動画、システム更新サービスはHTTPプロキシを迂回するため、事前にデバイスやアプリが対応しているか確認してください。
| 項目 | 設定例 | 役割 |
|---|---|---|
| Clashホストのアドレス | 192.168.1.23 |
接続するデバイスからアクセスできるLAN内IPv4アドレス |
| mixed-port | 7890 |
HTTPとSOCKS5のプロキシ接続を同時に受け付ける |
| allow-lan | true |
ほかのホストからClashのリスニングポートへの接続を許可する |
| bind-address | * |
利用可能なネットワークインターフェースで接続を待ち受ける |
| クライアント側のプロキシアドレス | 192.168.1.23:7890 |
テレビ、スマートフォン、別のPCに入力する |
mixed-port、allow-lan、バインドアドレスの役割
mixed-portでHTTPとSOCKS5の入口を統合する
mixed-portは混合プロキシポートです。同じTCPポートでHTTPプロキシとSOCKS5プロキシのリクエストを識別できます。7890に設定すると、HTTPプロキシに対応したテレビは192.168.1.23:7890へ接続でき、SOCKS5に対応したデスクトップアプリも同じアドレスを利用できます。
設定にport: 7890、socks-port: 7891、mixed-port: 7890が同時に存在すると、ポートの重複待ち受けによって起動に失敗する場合があります。通常はmixed-portを1つ残せば十分です。入口を分ける必要がある場合は、HTTPを7890、SOCKS5を7891のように異なるポートを使用してください。
allow-lanでLAN接続の受付可否を決める
allow-lan: trueにすると、ほかのデバイスからプロキシポートへ接続できます。falseの場合、ホスト上のアプリはループバックアドレス経由でClashを利用できる場合がありますが、192.168.x.xや10.x.x.xのネットワークからの接続は拒否されます。多くのGUIクライアントでは「LAN接続を許可」「LANアクセス」「Allow LAN」などと表示されます。
bind-addressで待ち受けるインターフェースを限定する
Clash Meta(mihomo)の設定では、bind-addressで待ち受けるアドレスを指定できます。*は利用可能なインターフェースで待ち受ける設定で、家庭内LANでのテストに適しています。192.168.1.23を指定すると、そのアドレスだけにバインドされます。DHCPによってホストアドレスが変わると、固定したバインドアドレスが無効になる場合があります。長期利用では、ルーターでこのPCのDHCPアドレスを予約するとよいでしょう。
mixed-port: 7890
allow-lan: true
bind-address: "*"
mode: rule
log-level: info
設定の保存場所はクライアントによって異なります。一般的には「設定」→「パラメータ設定」→「LAN接続を許可」の順に進み、「混合ポート」が7890になっているか確認します。「設定オーバーライド」や「グローバル拡張設定」がある場合は、購読更新でリモート設定に上書きされないよう、これらの項目をオーバーライド側で設定してください。変更後は設定を再読み込みするかコアを再起動し、ログにポート待ち受けエラーがないか確認します。
ホストのLANアドレスを確認してポートをチェックする
WindowsでWi-Fiのアドレスを確認する
「設定」→「ネットワークとインターネット」→「Wi-Fi」→「ハードウェアのプロパティ」を開き、IPv4アドレスを確認します。PowerShellで次のコマンドを実行する方法もあります。
ipconfig
現在の無線LANアダプターで、192.168.1.23のようなIPv4アドレスを探します。仮想アダプター、TUNアダプター、Dockerアダプター、または169.254で始まる自動割り当てアドレスは選ばないでください。続いてPowerShellで7890が待ち受け状態か確認します。
Get-NetTCPConnection -LocalPort 7890 -State Listen
出力のLocalAddressが0.0.0.0またはホストのLANアドレスなら、該当するインターフェースでポートが待ち受けています。127.0.0.1だけが表示される場合は、allow-lanとbind-addressを再確認してください。
macOSとLinuxでアドレスを確認する
macOSでは「システム設定」→「ネットワーク」→「Wi-Fi」→「詳細」→「TCP/IP」を開き、IPv4アドレスを確認します。ターミナルでipconfig getifaddr en0を実行することもできます。Wi-Fiのインターフェースがen0でない場合は、先にnetworksetup -listallhardwareportsでインターフェース名を確認してください。
Linuxデスクトップでは「設定」→「ネットワーク」→「Wi-Fi」→現在の接続からIPv4アドレスを確認できます。ターミナルでは次のコマンドを実行します。
ip -4 address
ss -lntp | grep 7890
アドレスを確認したら、別のデバイスからポートに到達できるかテストします。Windows PowerShellではTest-NetConnection 192.168.1.23 -Port 7890を実行します。macOSまたはLinuxではnc -vz 192.168.1.23 7890を実行します。TCPテストが成功してから、プロキシルールとノードを確認してください。
PC、スマートフォン、テレビ、ゲーム機でプロキシを設定する
別のWindowsまたはmacOS PC
Windows 11では「設定」→「ネットワークとインターネット」→「プロキシ」→「手動プロキシ設定」→「セットアップ」の順に進みます。サーバーに192.168.1.23、ポートに7890を入力します。保存後、まずブラウザーでテストし、その後目的のアプリを確認します。ここで設定するのはシステムのHTTPプロキシであり、すべてのデスクトップソフトが読み取るとは限りません。
macOSでは「システム設定」→「ネットワーク」→「Wi-Fi」→「詳細」→「プロキシ」の順に進みます。「Webプロキシ(HTTP)」と「セキュアWebプロキシ(HTTPS)」にチェックを入れ、両方のサーバーにClashホストのアドレス、ポートに7890を入力します。使用後はチェックを外してください。ホストがオフラインになった際、ネットワーク要求が待ち続けるのを防げます。
AndroidとiPhone
Androidの一般的な手順は「設定」→「ネットワークとインターネット」→「インターネット」→現在のWi-Fi→「編集」→「詳細設定」→「プロキシ」→「手動」です。プロキシのホスト名に192.168.1.23、ポートに7890を入力します。メーカーによってメニュー名は多少異なりますが、通常は現在のWi-Fiネットワークに保存されます。
iPhoneとiPadでは「設定」→「Wi-Fi」→現在のネットワーク右側にある情報ボタン→「プロキシを構成」→「手動」の順に進みます。サーバーにホストのLANアドレス、ポートに7890を入力します。HTTPプロキシの影響を受けるのは主にシステムのプロキシ設定に従うアプリです。独自に接続を確立するアプリは、この入口を通りません。
テレビとストリーミングデバイス
Android TVやGoogle TVでは通常、「設定」→「ネットワークとインターネット」→現在のWi-Fi→「プロキシ設定」で手動設定を選べます。サーバーのホスト名に192.168.1.23、プロキシポートに7890を入力します。テレビは接続できてもアプリが地域やネットワークのエラーを表示する場合、Clashのログにそのテレビのアドレスからのリクエストがあるか確認してください。
プロキシが処理するのは、アプリが実際にプロキシポートへ送信したトラフィックだけです。テレビのDNS探索、時刻同期、LAN内キャスト、一部のUDP通信は直接接続する場合があります。キャストへの影響を避けるには、ClashのルールでRFC1918のプライベートアドレスとLAN内ドメインをDIRECTにしてください。
PlayStation、Nintendo Switch、Xbox
PlayStation 5では「設定」→「ネットワーク」→「設定」→「インターネット接続を設定」の順に進み、現在のネットワークを選んで「詳細設定」を開きます。「プロキシサーバー」を「使用する」に変更し、ホストアドレスとポート7890を入力します。Nintendo Switchでは「設定」→「インターネット」→「インターネット設定」→現在のネットワーク→「設定の変更」→「プロキシ設定」の順に進みます。
ゲーム機のプロキシ設定が対象にするのは、通常ダウンロード、ストア、一部のHTTPリクエストだけです。オンライン対戦ではUDPを大量に使用し、NATタイプの判定もHTTPプロキシを完全には経由しません。Xboxに共通の手動HTTPプロキシ設定がない場合、mixed-portだけで全トラフィックを取り込むことはできません。透過プロキシに対応した別ルーターを使うか、そのデバイスをゲートウェイに設定してください。
信頼できるLANだけを許可するようファイアウォールを設定する
Clashが7890で待ち受けていても、OSのファイアウォールがほかのデバイスからのアクセスを許可しているとは限りません。家庭内または信頼できるネットワークのプロファイルでのみTCP 7890を開放し、送信元ネットワークを制限してください。空港、ホテル、学校などの公共Wi-FiでLAN共有を長時間有効にしないでください。
Windows Defender ファイアウォール
「Windows セキュリティ」→「ファイアウォールとネットワーク保護」→「詳細設定」→「受信の規則」→「新しい規則」の順に進みます。「ポート」を選び、プロトコルにTCP、特定のローカルポートに7890を指定します。操作は「接続を許可する」を選び、プロファイルは「プライベート」だけにチェックを入れます。「スコープ」でリモートIPを家庭内ネットワーク(例:192.168.1.0/24)に制限してください。
Windowsが現在のWi-Fiをパブリックネットワークとして認識している場合は、「設定」→「ネットワークとインターネット」→「Wi-Fi」→現在のネットワークを開き、ネットワークプロファイルを「プライベートネットワーク」に変更します。信頼できる家庭内ネットワークでのみ実行してください。
LinuxでUFWの送信元を制限する
sudo ufw allow from 192.168.1.0/24 to any port 7890 proto tcp
sudo ufw status numbered
家庭内ネットワークが192.168.50.0/24の場合は、コマンド内のネットワークも同じように変更します。macOSで「着信接続を許可しますか」という通知が表示された場合は、使用中のClashクライアントまたはmihomoコアであることを確認してから、家庭内ネットワークからの接続を許可してください。
認証、ルール、DNSを安全に設定する
複数人で使うネットワークではプロキシ入口に認証を追加する
mihomoではauthenticationを使ってHTTPおよびSOCKSの入口にユーザー名とパスワードを設定できます。寮、シェアハウス、ゲストの多いWi-Fiでは認証を有効にし、クライアントのプロキシ設定に対応する認証情報を入力することをおすすめします。
mixed-port: 7890
allow-lan: true
bind-address: "*"
authentication:
- "lanuser:change-this-password"
認証情報は機密設定です。公開リポジトリに登録したり、共有される購読ファイルに直接記載したりしないでください。認証付きプロキシに対応しないテレビもあります。その場合はポートの公開範囲を広げるのではなく、まずファイアウォールでデバイスのIPを制限してください。
LAN内は直接接続するルールを維持する
プロキシを共有する場合でも、プリンター、NAS、キャストレシーバー、ルーターの管理画面は直接接続できるようにします。ルールは上から順に評価されるため、プライベートネットワークを汎用プロキシルールより前に置き、最後にMATCHをフォールバックとして残してください。
rules:
- IP-CIDR,127.0.0.0/8,DIRECT,no-resolve
- IP-CIDR,10.0.0.0/8,DIRECT,no-resolve
- IP-CIDR,172.16.0.0/12,DIRECT,no-resolve
- IP-CIDR,192.168.0.0/16,DIRECT,no-resolve
- DOMAIN-SUFFIX,local,DIRECT
- MATCH,PROXY
購読で提供されるルールセットを使う場合は、プライベートアドレスを直接接続するルールが含まれているか確認してください。クライアントに表示される「ルールモード」だけで判断せず、最終的に適用されたポリシーも確認します。Clashの接続画面またはリアルタイムログを開き、送信元アドレス、対象ドメイン、ポリシー名からトラフィックが想定どおり処理されているか判断してください。
DNSの動作はクライアントアプリによって異なる
HTTPプロキシのリクエストには通常、対象ホスト名が含まれるため、Clashはプロキシ側でドメインを処理できます。ただし接続デバイスが独自にDNSクエリを実行する場合もあります。SOCKS5で名前解決をプロキシ側に任せるかどうかも、アプリがリモート解決とローカル解決のどちらを使うかによって異なります。ブラウザーは正常なのに特定のアプリだけ失敗する場合は、アプリがシステムプロキシに従うか、DNSが利用可能か、UDPに依存していないかを個別に確認してください。
接続失敗は順番に切り分ける
- ホストがオンラインか確認する。Clashを実行しているPCをスリープさせないでください。Wi-Fiを切り替えた後は、LANアドレスを再確認します。
- コアが正常か確認する。まずホスト自身で
127.0.0.1:7890を使ってプロキシをテストし、購読、ノード、ルールの問題を切り分けます。 - 待ち受け範囲を確認する。
allow-lan: trueを確認し、7890が0.0.0.0、*、または正しいLANアドレスで待ち受けていることを確認します。 - 同一ネットワークで通信できるか確認する。2台のデバイスが相互接続可能な同じネットワークにある必要があります。ルーターのAP分離やゲストネットワーク分離によって、デバイス間の接続が遮断されることがあります。
- ファイアウォールのルールを確認する。ファイアウォールを一時的に無効にするのは短時間の切り分けに限ります。原因を確認したら元に戻し、ネットワーク範囲を限定した受信ルールを設定してください。
- アプリがプロキシを使用しているか確認する。Clashのログで接続デバイスのIPを検索します。記録がまったくなければ、問題は通常ノードではなく、デバイスのプロキシ設定またはネットワーク分離にあります。
curlをインストールした別のデバイスで、次のコマンドを実行できます。Clashホストの7890ポートへの接続が確立し、HTTPレスポンスヘッダーが返ることを確認します。
curl -I -x http://192.168.1.23:7890 https://www.gstatic.com/generate_204
Connection refusedと表示される場合は、通常ポートが待ち受けていないかallow-lanが有効になっていません。タイムアウトが続く場合は、まずファイアウォール、ゲストネットワーク、AP分離を確認します。プロキシには接続できるのに対象リクエストがタイムアウトする場合は、Clashのログ、ノードの遅延、ルールの適用結果を確認してください。