高度な設定 読了目安:10分

ClashのLAN共有プロキシ設定|allow-lanでスマホ・テレビをPC経由にする方法

mixed-portの仕組みからallow-lanとbind-addressの設定、ファイアウォールの許可、他の端末でのプロキシ設定までを手順に沿って解説します。

プロキシ共有の接続経路:端末からPCの7890番ポートへ接続

ClashでLAN経由のプロキシを共有する場合、スマホやテレビからPCのプロキシポートへ接続します。PC上のClashまたはmihomoが現在の設定に基づいてルールを適用し、プロキシノード経由または直接接続を選択します。他の端末が使うのはPCが提供するHTTPまたはSOCKSプロキシで、PCに登録したサブスクリプションを直接読み込むわけではありません。

この記事では、PCのLAN側IPv4アドレスを192.168.1.20、スマホのアドレスを192.168.1.35、mixed-portを7890とする例を使います。実際の設定では、ご利用のPCのアドレスに置き換えてください。PCは有線LAN、スマホはWi-Fiで接続してもかまいません。大切なのは接続方式をそろえることではなく、2台の間で通信できることです。

  • mixed-port:HTTPとSOCKSの両方のプロキシ接続を同じポートで受け付けます。この記事ではHTTPプロキシとしてスマホから接続します。
  • allow-lan:他の端末からのプロキシ接続を許可します。PCの「システムプロキシ」を有効にするだけでは、通常LANからのアクセスは許可されません。
  • bind-address:プロキシサービスが待ち受けるローカルアドレスを指定します。allow-lan: trueと併せて設定してください。
  • external-controller:管理APIの待ち受けアドレスです。スマホに設定するプロキシアドレスではありません。

まずPCのアドレス、ネットワーク分離、本機のプロキシを確認

現在接続中のネットワークアダプターのIPv4アドレスを確認する

Windowsでは「設定」→「ネットワークとインターネット」→現在使用中の「Wi-Fi」または「イーサネット」→「プロパティ」を開くと、IPv4アドレスを確認できます。以下のコマンドでも確認できます。仮想マシン、VPN、TUN用のネットワークアダプターもある場合は、家庭用ルーターに接続している物理アダプターのアドレスを使ってください。仮想アダプターのアドレスは使用しないでください。

ipconfig

macOSでは「システム設定」→「ネットワーク」→現在の接続→「詳細」→「TCP/IP」でIPアドレスを確認できます。Linuxではip -4 addrを実行し、現在使っている有線または無線ネットワークアダプターのinet欄を確認してください。127.0.0.1は端末自身を指すループバックアドレスです。スマホに入力すると、スマホ自身へ接続しようとします。

端末間の通信が許可されていることを確認する

  • スマホのモバイルデータ通信を一時的にオフにし、PCと通信できる家庭用Wi-Fiに接続します。
  • ルーターのゲスト用ネットワークは使わないでください。ゲストネットワークの分離、AP分離、無線クライアント分離が有効だと、端末からPCへアクセスできない場合があります。
  • 異なるサブネット間の通信には、ルーティングとアクセスルールの設定が必要です。たとえば192.168.1.0/24と192.168.50.0/24は、同じルーターにつながっているだけで必ず通信できるわけではありません。
  • 共有設定を調べる前に、PCのClashでサブスクリプションが使えること、ノードが選択されていること、ルールモードで目的のサイトにアクセスできることを確認してください。

ルーターのDHCP設定でPCに固定のリースを割り当てるのがおすすめです。たとえば、常に192.168.1.20を割り当てます。PCのアドレスが接続のたびに変わる場合、スマホに保存したプロキシサーバーのアドレスも変更が必要です。

allow-lan、bind-address、mixed-portを設定する

クライアントによって、設定画面の項目名は「LAN接続を許可」や「Allow LAN」など異なります。mixed-portはポート設定にある場合があります。メニューの構成はクライアントごとに異なるため、実際に読み込まれている設定と待ち受け状態で動作を確認してください。mihomoの設定ファイルを使う場合、次の3項目はYAMLの最上位に記述し、proxiesやdnsの中に入れないでください。

# 既存の設定の最上位に追加し、サブスクリプション全体を置き換えない
mixed-port: 7890
allow-lan: true
bind-address: "192.168.1.20"

この例では、指定したIPv4アドレスだけで待ち受けます。PCがそのアドレスを実際に持っていない場合、待ち受けを開始できないことがあります。複数のネットワークアダプターで待ち受けるにはbind-address: "*"を使えますが、接続可能なネットワークの範囲が広がるため、ファイアウォールのルールも適切に制限してください。127.0.0.1だけにバインドすると、スマホからLAN経由で接続できません。

  1. 現在の設定を控え、7890番ポートを別のプロキシプロセスが使用していないことを確認します。
  2. クライアントの設定画面または設定オーバーライド機能から変更を保存してください。サブスクリプション更新で置き換えられる一時ファイルを直接編集するのは避けましょう。
  3. 設定を適用します。待ち受け状態が変わらない場合は、クライアントの手順に従ってコアを再起動してください。
  4. 実行ログを確認し、アドレスのバインド失敗やポート競合のエラーがないことを確かめます。

Windows PowerShellで待ち受けアドレスを確認できます。出力のLocalAddressに指定したLANアドレスが含まれている必要があります。すべてのインターフェースで待ち受ける設定では、ワイルドカードアドレスが表示される場合もあります。127.0.0.1だけが表示される場合、LANからの接続はまだ有効になっていません。

Get-NetTCPConnection -State Listen -LocalPort 7890 |
  Select-Object LocalAddress, LocalPort, OwningProcess

Linuxではss -lntp 'sport = :7890'、macOSではlsof -nP -iTCP:7890 -sTCP:LISTENを実行します。クライアント側の設定がYAMLファイルより優先されている場合は、クライアントの設定画面から変更してください。読み込まれていないファイルを何度も編集しても反映されません。

信頼できるLANからのTCP 7890だけをファイアウォールで許可する

待ち受けに成功しても、OSのファイアウォールが他の端末からの接続を遮断することがあります。この記事のWi-Fi経由のHTTPプロキシ確認に必要なのは、受信TCPの7890番ポートだけです。全ポートを開放したり、PCのファイアウォール全体を無効にしたりする必要はありません。

Windows:接続元のネットワーク範囲とネットワークプロファイルを限定する

まず、現在のネットワークが信頼できる家庭用ネットワークであることを確認し、Windowsのネットワーク設定で「プライベートネットワーク」にします。次に、管理者権限でPowerShellを開き、実際のネットワーク範囲に合わせて以下の接続元アドレスを変更してください。この例では、接続を192.168.1.0/24からのみに限定し、「プライベート」プロファイルでのみ有効にします。

New-NetFirewallRule `
  -DisplayName "Clash LAN TCP 7890" `
  -Direction Inbound `
  -Action Allow `
  -Protocol TCP `
  -LocalPort 7890 `
  -RemoteAddress 192.168.1.0/24 `
  -Profile Private

スマホ1台だけに許可する場合は、-RemoteAddressをそのスマホのIPアドレスに変更し、スマホにDHCP予約を設定します。共有を停止したら、このルールを削除してください:

Remove-NetFirewallRule -DisplayName "Clash LAN TCP 7890"

macOS・Linux:アプリとポートのルールを確認する

macOSでは「システム設定」→「ネットワーク」→「ファイアウォール」→「オプション」を開き、接続を受け付けるクライアントまたはコアのプログラムが受信接続を許可されているか確認します。「すべての受信接続をブロック」が有効な場合は、設定を見直してください。サードパーティ製ファイアウォールが別途接続を遮断する場合もあるため、システム設定だけで許可済みとは判断できません。

LinuxでUFWをすでに使っている場合は、接続元を限定したルールを追加できます。UFWを使っていない場合は、既存のnftables、firewalldなどのファイアウォール環境で設定してください。テストのためだけにファイアウォール管理ツールを切り替えるのは避けましょう。

sudo ufw allow from 192.168.1.0/24 to any port 7890 proto tcp

スマホ・テレビにプロキシサーバーを設定する

以下はHTTPプロキシの設定方法です。サーバー欄には192.168.1.20、ポート欄には7890だけを入力します。サーバー欄にhttp://やパス、ポート番号を追加しないでください。完全なプロキシURLを指定する必要があるアプリでは、http://192.168.1.20:7890を使います。

端末主な設定場所入力する値
iPhone / iPad設定 → Wi-Fi → 接続中のネットワークの情報ボタン → プロキシを構成 → 手動サーバー:192.168.1.20、ポート:7890
Androidスマートフォン設定 → WLANまたはインターネット → 接続中のネットワーク → ネットワークを編集 → 詳細設定 → プロキシ → 手動プロキシのホスト名:192.168.1.20、プロキシポート:7890
Android TV / Google TV設定 → ネットワークとインターネット → 接続中のネットワーク → プロキシ設定。設定画面の場所はメーカーによって異なります。手動を選択し、同じホスト名とポートを入力

Android・iOSでの利用上の注意

Androidでは、メーカーによって「ネットワークを変更」や編集アイコンの中にプロキシ設定があります。IP設定はDHCPのままにしてください。プロキシを設定するために静的IPへ変更する必要は通常ありません。iOSのプロキシ設定は現在のWi-Fiにのみ適用されます。モバイルデータ通信や、別のWi-Fiに自動で引き継がれることはありません。

アプリによっては起動時にプロキシ設定を読み込みます。設定を変更したあとは、アプリを完全に終了してから再起動してください。ブラウザーは使えるのに特定のアプリが使えない場合は、すぐ全体モードに切り替えるのではなく、まずアプリがシステムのHTTPプロキシに対応しているか確認しましょう。

テレビにプロキシ設定の項目がない場合

テレビのファームウェアによってはHTTPプロキシを手動設定できないことや、ブラウザーだけが設定に従うことがあります。その場合、PCでallow-lanを有効にしてもテレビにプロキシの使用を強制できません。テレビに対応したクライアントやアプリ内のプロキシ設定、または別途設計したルーターのゲートウェイ構成を利用してください。PCのプロキシポートを共有しても、テレビのデフォルトゲートウェイは変わりません。

段階的に確認する:ポート接続、ログ、ルール

Webページが一度表示できただけで、すべての通信がプロキシ経由になったと判断しないでください。まず別のPCからポートとプロキシプロトコルを確認し、その後スマホのブラウザーで試しながらClashの接続ログを確認します。以下のコマンドは、端末間のファイアウォールやネットワーク分離も検証できるよう、必ずLAN内の別の端末で実行してください。

# Windows:TCPポートへの接続を確認
Test-NetConnection 192.168.1.20 -Port 7890

# macOS、Linux、またはcurlを使える端末:HTTPプロキシを明示して接続
curl -I --connect-timeout 5 \
  --proxy http://192.168.1.20:7890 \
  https://example.com/

TcpTestSucceeded: TrueはTCP接続が成功したことを示すだけで、ノードが使用できるとは限りません。curlでのテストでは、HTTPS接続にHTTP CONNECTトンネルを使います。通常のプロキシ共有でスマホに証明書をインストールする必要はありません。証明書エラーが発生した場合は、端末の日時、接続先サイト、既存の証明書設定を確認してください。証明書の検証を無効にして解決しようとしないでください。

  1. ポートがタイムアウトする:PCのIPアドレス、待ち受けアドレス、ファイアウォール、ルーターのクライアント分離を順に確認します。
  2. 接続が拒否される:コアが起動しているか、mixed-portが7890か、ループバックアドレスだけで待ち受けていないかを確認します。
  3. プロキシに接続できるが通信できない:ノードの接続状態、サブスクリプションの有効期限、適用されたポリシーグループ、DNSログを確認します。
  4. Webページは表示できるがアプリは使えない:アプリがシステムプロキシを無視していないか、HTTPプロキシでは中継できないUDP通信を使っていないか確認します。

ルールモードでは、共有端末からのリクエストにもPC側の現在のルールとポリシーグループが適用されます。DIRECTに一致した通信はPCから直接接続され、すべての通信が必ずノードを経由するわけではありません。デスクトップクライアントに表示されるプロセス名は、スマホ上の実際のアプリ名とは限らず、スマホのアプリを正確に識別する手掛かりにはなりません。

TUN・DNS・プロキシ共有のセキュリティに関する注意点

PCでTUNを有効にしてもスマホの通信は自動的に取り込まれない

PCのTUNが通常取り込むのは、PC上の仮想ネットワークアダプターに送られた接続です。スマホがPCと同じWi-Fiにつながっていても、デフォルトルートはルーターを向いたままで、PCのTUNには自動で入りません。この記事の共有方法では、スマホから192.168.1.20:7890へ明示的に接続します。この設定のためにTUNを追加で有効にする必要はありません。

PCをスマホのゲートウェイにするには、IP転送、ルーティング、アドレス変換、DNSを設定する必要があり、別のネットワーク構成になります。転送設定をせずにゲートウェイアドレスだけ変更すると、スマホがインターネットに接続できなくなることがあります。UDP通信を含むすべての通信を端末単位で取り込むには、その端末に適したVPN/TUNクライアントか、設計済みのゲートウェイ構成を利用してください。

HTTPプロキシを設定してもスマホのDNS通信すべてがPC経由になるわけではない

アプリがドメイン名をHTTPプロキシに渡した場合、プロキシ側の設定に従って名前解決とルーティングが処理されます。一方、アプリが端末上で先に名前解決したり、独自の暗号化DNSを使ったり、システムプロキシを完全に無視したりすることもあります。そのため、Wi-Fiにプロキシを設定しただけで、スマホのすべてのDNS問い合わせをmihomoが処理すると判断することはできません。対象ドメイン、実際の接続ログ、DNS設定を併せて確認し、TUN向けのFake-IP設定をそのまま適用しないでください。

共有中は公開範囲を必要最小限にする

  • ルーターでPCの7890番ポートをインターネットへポート転送しないでください。管理APIもインターネットに公開しないでください。
  • 認証が必要な場合は、mihomoのauthenticationを設定できます。ただし、端末の手動プロキシ設定がプロキシ認証に対応しているか、先に確認してください。テレビによっては認証に対応していません。
  • PCがスリープまたはシャットダウンした場合、Wi-Fiを切り替えた場合、コアが終了した場合は、共有プロキシを使う端末からインターネットに接続できなくなることがあります。
  • 共有を終了するときは、スマホとテレビのプロキシ設定を「なし」または「オフ」に戻してからAllow LANを無効にし、不要になったファイアウォールルールを削除してください。

安定して使うには、PCのアドレスが固定されていること、プロキシが正しく待ち受けていること、信頼できる接続元がファイアウォールを通過できること、アプリがプロキシ設定に従うことの4点が必要です。まずブラウザーからHTTPプロキシ経由で接続できるか確認し、その後テレビや他のアプリに広げましょう。TUN、DNS、ルーティングを一度に変更するより問題を特定しやすくなります。その他の設定項目は高度な設定を、サブスクリプションを初めて読み込む場合はClashの使い方ガイドをご覧ください。

Clashをダウンロード