応用設定 読了時間:約10分

Clashのmixed-port・allow-lan設定|スマホやテレビでPCのプロキシを共有

mixed-portとallow-lanの設定から、ファイアウォール、PCのローカルIP確認、スマホ・テレビの手動プロキシ設定、接続元ネットワークの制限まで解説します。

プロキシ共有に必要な条件:待ち受けポート、LANからの接続、アプリのプロキシ対応

スマホやテレビからPC上のClashを利用するには、通常、LAN向けにプロキシポートを1つ開き、各端末のWi-Fi設定にPCのアドレスとポートを入力します。PCはプロキシサーバーとして動作し、ルーターを兼ねる必要はありません。端末とPCが接続した後、PC上のルールとポリシーに従って、通信が直接接続されるかプロキシノードへ転送されます。

この記事では、mixed-portに7890、PCのLAN側IPv4アドレスに192.168.1.10を使用します。これらは設定例であり、すべてのネットワークにそのまま使える固定値ではありません。設定前にPCの現在のIPアドレスを確認し、ポートがほかのプロセスで使用されていないことも確認してください。

  • PCとスマホ・テレビは、互いに通信できるLANに接続してください。同じWi-Fi名でも、端末間で通信できるとは限りません。
  • PCのクライアントを起動したままにし、使用する設定とノードがPC上で正常に動作することを先に確認してください。
  • Wi-Fiの手動プロキシ設定が使われるのは、主にシステムのHTTPプロキシ設定に対応したアプリです。端末の全通信をプロキシ経由にする機能ではありません。
  • PCがスリープ・シャットダウンした場合や、ネットワークの切り替え・IPアドレスの変更後は、端末に設定したプロキシが使えなくなることがあります。

mixed-portとallow-lanの設定例

各フィールドの役割

フィールド設定例役割
mixed-port78901つの待ち受けポートでHTTPとSOCKSの両方のプロキシ接続を受け付けます。
allow-lantrueLAN内の端末からプロキシの待ち受けサービスへの接続を許可します。
bind-address192.168.1.10指定したローカルネットワークインターフェースのアドレスにバインドします。指定するアドレスが実際に存在する必要があります。

以下は、すでに動作する設定がある場合の例です。フィールドをYAMLのトップレベルに追加し、rulesやproxiesと同じ階層に配置してください。ポリシーグループ内にインデントしたり、同じキーを重複して記述したりしないでください。

config.yaml · 追加する設定
mixed-port: 7890
allow-lan: true
bind-address: 192.168.1.10
mode: rule

この例は単独で使える設定ファイルではなく、ノード・ポリシーグループ・ルールも含みません。既存の動作する設定を残したまま追加してください。mode: ruleの場合、共有リクエストもPC上のルールに従って振り分けられます。LAN共有を有効にしても、ルールモードがグローバルプロキシに自動で切り替わることはありません。

すべてのインターフェースにバインドする場合と固定アドレスにバインドする場合

bind-address: '*'は、すべてのアドレスで待ち受ける一般的な設定ですが、接続可能なインターフェースの範囲が広がります。PCがイーサネット、Wi-Fi、仮想マシン用ネットワークに同時接続している場合は、共有に使うLANアドレスにバインドし、ファイアウォールでも接続元を制限してください。127.0.0.1にバインドするとPC自身からしか利用できず、スマホからPCへ接続できません。

GUIクライアントは、起動時にコア設定を再生成する場合があります。一時的な実行ファイルだけを編集せず、クライアントが提供する永続的な設定の上書き・マージ機能を利用してください。メニュー名はクライアントによって異なります。保存して再読み込みした後、実際の実行設定と待ち受け状態を確認してください。サブスクリプション更新後も、3つのフィールドが有効なままか確認しましょう。

PCのLAN IPアドレスを調べ、7890番ポートの待ち受けを確認する

Windows:使用中のネットワークアダプターと仮想アダプターを見分ける

PowerShellまたはコマンドプロンプトでipconfigを実行し、接続中の「ワイヤレス LAN アダプター Wi-Fi」またはイーサネットアダプターのIPv4アドレスとサブネットマスクを確認します。VPN、仮想マシン、切断済みのアダプターは選ばないでください。PCのアドレスが192.168.1.10、サブネットマスクが255.255.255.0の場合、ネットワークは192.168.1.0/24です。

ipconfig

続いてポートの待ち受けを確認します。以下はWindows PowerShell用のコマンドです。結果のLocalAddressが想定したLANアドレス、またはすべてのIPv4インターフェースを示す0.0.0.0であることを確認してください。127.0.0.1だけが表示される場合、サービスはPC内からしか利用できません。

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

macOS・Linux:ネットワークインターフェースとプロセスを確認する

macOSでは「システム設定」→「ネットワーク」で接続中のネットワークを選び、「詳細」→「TCP/IP」からIPアドレスを確認できます。ターミナルで以下のコマンドを実行すると、待ち受けプロセスを確認できます。プロセス情報が不十分な場合は、必要に応じてsudoを使ってください。

lsof -nP -iTCP:7890 -sTCP:LISTEN

LinuxではIPv4アドレスとTCPの待ち受け状態をそれぞれ確認できます。

ip -4 addr show
ss -lntp 'sport = :7890'

ルーターのDHCP設定でPCにアドレス予約を設定すると、同じネットワークアダプターに長期間同じIPアドレスを割り当てられます。DHCPのアドレスプールとゲートウェイ設定を確認せずにPCへ固定IPを設定すると、ほかの端末とアドレスが重複するおそれがあります。

信頼できる接続元だけをファイアウォールで許可し、PC全体の保護は無効にしない

allow-lan: trueを設定しても、OSのファイアウォール規則は自動作成されません。待ち受けが正常なのに接続がタイムアウトする場合は、まずPCの受信ファイアウォールとルーターのクライアント分離を確認してください。この記事のWi-Fi経由のHTTP手動プロキシでは、TCPの7890だけを許可すれば十分です。UDPや外部向けのコントロールポートを併せて開放する必要はありません。

Windows:プライベートネットワークと接続元ネットワークを指定して許可する

以下の例は、信頼できる自宅のネットワークでのみ使用してください。現在のネットワークプロファイルが「プライベート」であることを確認してから、管理者としてPowerShellを起動します。このコマンドでは、ローカルアドレス192.168.1.10のTCPポート7890へのアクセスを、接続元192.168.1.0/24に限定します。

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

共有をやめるときは、対応する表示名を指定してこの規則を削除できます。

Get-NetFirewallRule -DisplayName "Clash LAN TCP 7890" |
  Remove-NetFirewallRule

クライアントプログラムに対する広範な受信許可規則がすでにある場合、制限の厳しい規則を追加しても、既存の規則が自動的に制限されるわけではありません。「セキュリティが強化された Windows Defender ファイアウォール」で既存の受信規則も確認し、ほかの許可規則によってポートがより広い接続元に開放されたままにならないようにしてください。

macOS・Linux:既存のファイアウォール設定を利用する

macOSでは「システム設定」→「ネットワーク」→「ファイアウォール」→「オプション」で、実際に接続を受け付けるクライアントまたはコアのプログラムに受信接続が許可されているか確認できます。標準のアプリケーションファイアウォールは主にアプリ単位で管理します。接続元ネットワークを細かく制限する場合は、後述のmihomoのアクセス制御フィールドも利用できます。

LinuxでUFWをすでに有効にしている場合は、以下の接続元制限ルールを追加できます。UFWを使っていないシステムでは、既存のファイアウォール機構で設定してください。このコマンドのためだけに、別のルール管理ツールを有効にしないでください。

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

スマホやテレビでHTTP手動プロキシを設定する

iPhone・iPad

  1. 「設定」→「Wi-Fi」を開き、接続中のWi-Fiの右側にある情報ボタンをタップします。
  2. 「プロキシを構成」を開き、「手動」を選択します。
  3. 「サーバ」に192.168.1.10、「ポート」に7890を入力します。
  4. プロキシ認証を設定していない場合は「認証」をオフにします。保存後、SafariでWebページを開いて動作を確認してください。

サーバ欄にはPCのIPアドレスだけを入力します。http://やパスを付けたり、アドレス欄にポート番号を含めたりしないでください。この設定は現在のWi-Fiに適用されます。モバイル通信や別のWi-Fiに切り替えても、同じ接続設定が自動で引き継がれるわけではありません。

Androidスマートフォン

通常は「設定」→「ネットワークとインターネット」→「インターネット」から接続中のWi-Fiの編集画面を開き、「詳細設定」で「プロキシ」を「手動」に変更します。メーカーによっては「Wi-Fi」や「ネットワークを変更」に設定項目があります。入力する項目は共通です。

  • プロキシのホスト名:192.168.1.10。
  • プロキシのポート:7890。
  • プロキシを使用しないアドレス:最初の動作確認では、対象が除外されないよう空欄にしておきます。

Android TVなどのテレビ

テレビのネットワーク設定に「プロキシ設定」→「手動」があれば、同じアドレスとポートを入力します。現在のWi-Fiを再編集または再接続する必要がある場合もあります。システムプロキシの設定項目がないテレビでは、この記事の2つのフィールドだけでは接続できません。アプリ側のプロキシ対応を利用するか、別途ゲートウェイ方式を検討してください。

Wi-Fi設定で指定するプロキシは、通常HTTPプロキシです。mixed-portがHTTPとSOCKSの両方に対応していても、ここでSOCKSを選ぶ必要があるわけではありません。HTTPSサイトには通常、HTTPプロキシのCONNECTトンネルを使ってアクセスします。スマホに復号用証明書をインストールする必要はありません。

mihomo:接続元ネットワークや端末を限定する

mihomoでは、lan-allowed-ipsとlan-disallowed-ipsを使って接続元をさらに制限できます。これらのフィールドに対応しているかは、使用中のコアの設定ドキュメントで確認してください。旧版のオリジナルClashやすべての派生クライアントが対応しているとは限りません。以下の例では、IPv4ネットワークを許可し、その中の特定の端末を除外しています。拒否リストは許可リストより優先されます。

mihomo · LAN接続元の制限
mixed-port: 7890
allow-lan: true
bind-address: 192.168.1.10

lan-allowed-ips:
  - 192.168.1.0/24

lan-disallowed-ips:
  - 192.168.1.50/32

スマホ1台とテレビ1台だけに共有する場合は、ネットワーク全体ではなく、許可リストを2つの個別アドレスに絞れます。たとえば、スマホが192.168.1.21、テレビが192.168.1.31の場合は次のように設定します。

lan-allowed-ips:
  - 192.168.1.21/32
  - 192.168.1.31/32

/32は単一のIPv4アドレス、/24はこの例のサブネット全体を表します。接続元のIPアドレスが変わると許可されなくなるため、DHCP予約などでアドレスを固定してください。IPv6を使う場合やすべてのインターフェースで待ち受ける場合は、IPv6の待ち受けとアクセス制御も別途確認してください。IPv4の制限だけでデュアルスタック全体を保護できるわけではありません。

authenticationを設定すると、HTTP/SOCKSのユーザー名とパスワードを指定できます。ただし、スマホやテレビのシステムプロキシ設定が認証に対応していない場合があります。ユーザー名やパスワードが映ったサブスクリプション共有のスクリーンショットは公開しないでください。家庭内の端末だけで使う場合も、接続元ネットワーク・個別アドレス・ファイアウォールの制限を優先して設定してください。

接続経路に沿ってトラブルシューティング:待ち受け・接続・プロキシ・ルール

まずPC自身からプロキシに接続できるか確認する

PCからプロキシを明示してリクエストを送ると、ブラウザーのキャッシュやシステムプロキシの設定による影響を切り分けられます。Windowsではcurl.exeを使用してください。旧バージョンのPowerShellではcurlのエイリアスの挙動が異なる場合があります。

curl.exe -I --connect-timeout 5 --max-time 15 --proxy http://192.168.1.10:7890 https://example.com/

macOS・Linuxでは、コマンド中のcurl.exeをcurlに置き換えてください。HTTPレスポンスが返れば、そのリクエストが指定したプロキシ経由で処理されたことを確認できます。ただし、最終的にリモートのプロキシノードを使ったことの証明にはなりません。ルールによってDIRECTが選択される場合もあります。

別のLAN端末からプロキシへの接続を確認する

2台目のWindows PCがある場合は、以下のコマンドでTCP接続を確認できます。TcpTestSucceededがTrueでも、確認できるのはポートに接続できることだけです。ノード、名前解決、接続先のWebサイトが正常であることまでは示しません。

Test-NetConnection -ComputerName 192.168.1.10 -Port 7890
症状まず確認する項目
接続が拒否されるコアが起動しているか、ポート番号に誤りがないか、ループバックアドレスだけにバインドされていないか。
接続がタイムアウトする受信ファイアウォール、ゲストネットワークやVLANの分離、PCがスリープしていないか。
HTTP 407が返るプロキシ認証が必要か、端末に正しいユーザー名とパスワードが設定されているか。
ポートには接続できるがWebページが表示されないPC上のノードが動作しているか、ログに名前解決エラーがないか、ルールで選択されたポリシーグループは何か。
ブラウザーでは使えるがテレビのアプリでは使えないアプリがシステムプロキシに対応しているか、プロキシ経由になっていないUDP通信や独自のネットワーク接続に依存していないか。

最後に、クライアントの接続一覧やログでスマホ・テレビの送信元IPを確認し、リクエストがコアに届いたか、どのルールに一致し、どのポリシーが選ばれたかを調べます。プロキシの出口を確認する場合は、プロキシ経由になることが明確なテスト先を使い、接続記録もあわせて確認してください。Webページが開いただけで、すべての端末の通信がプロキシ経由になったと判断しないでください。

トラブルシューティングでは、一度に変更する項目を1つに絞ります。まずPC自身からプロキシを使えるようにし、次に別の端末からポートへ接続できるか確認してから、個別のアプリを調べてください。こうすることで、設定を一度にすべてリセットせずに、原因を待ち受け・ファイアウォール・アプリのプロキシ対応・ルール選択に切り分けられます。

共有の停止と設定のメンテナンス

共有を停止するときは、まずスマホやテレビのWi-Fiプロキシを「オフ」または「なし」に戻してください。PCをシャットダウンした後も、端末が接続先のないプロキシへリクエストを送り続けるのを防げます。続いてPCの設定でallow-lanをfalseに変更して再読み込みし、不要になったファイアウォールの許可規則を削除します。

長期間共有する場合は、PCのDHCP予約アドレス、実際のmixed-port、接続を許可する端末のアドレスを記録しておきましょう。サブスクリプションの更新、クライアントのアップグレード、ネットワークアダプターの切り替え後は、実行設定と待ち受け状態を再確認してください。各フィールドの基本的な意味は応用設定を、初回インストールや設定のインポートは使い方ガイドをご覧ください。

設定の参考資料

Clashクライアントをダウンロード

PCのOSに合ったクライアントを選び、インストールとサブスクリプションのインポートを済ませてから、LANプロキシ共有を設定してください。

Clashをダウンロード