混合ポート・PCのIPアドレス・ルーターのゲートウェイを区別する
スマホやテレビに、それぞれプロキシクライアントを入れる必要はありません。PC上のClash系クライアントでLAN向けのプロキシ接続口を開けば、ほかの端末からの通信をPCに中継できます。PC上のコアが現在の設定に従って、通信を直接接続するかプロキシ経由にするかを振り分けます。PCの電源が入っていて、クライアントのコアが正常に動作し、端末同士が直接通信できることが前提です。
この記事では、mihomoコアを使うClash系デスクトップクライアントを例に説明します。クライアントによって、設定名は「LAN接続を許可」「LANを許可」「Allow LAN」など異なり、ポート番号がGUIの設定で上書きされる場合もあります。操作時は、設定ファイルやサブスクリプションの記載だけでなく、現在クライアントに反映されている設定を確認してください。
| 項目 | この記事の例 | 設定する場所 |
|---|---|---|
| PCのLAN側IPv4アドレス | 192.168.1.20 | スマホ・テレビのプロキシサーバーアドレス |
| 混合ポート | 7890 | スマホ・テレビのプロキシポート |
| ルーターのゲートウェイ | 192.168.1.1 | ネットワーク設定で使用する値。この記事のプロキシサーバーには指定しません |
| ループバックアドレス | 127.0.0.1 | 同じPC上のアプリから接続する場合のみ使用 |
混合ポート7890:HTTPとSOCKS5を同じポートで受け付ける
mixed-port を設定すると、コアは同じポートでHTTPプロキシとSOCKS5プロキシのリクエストを受け付け、接続開始時のプロトコルデータから種類を判別します。アプリ側で両方のプロキシを同時に有効にする必要はありません。アプリが対応している方式を選び、同じポート番号を入力してください。
- HTTPプロキシ:スマホのWi-Fi設定やブラウザーなどで使えます。HTTPSサイトへの接続では通常、HTTP CONNECTでトンネルを確立し、アプリと接続先サーバーの間でTLS通信を行います。
- SOCKS5プロキシ:アプリ独自のプロキシ設定やコマンドラインツールに適しています。ドメイン名をローカルで解決するか、プロキシ側に解決を任せるかはアプリの設定によります。
- 7890はよく使われる番号にすぎません:画面に混合ポートが7897と表示されている場合は、7897を使います。HTTPポート、SOCKSポート、混合ポートを混同しないでください。
混合ポートはコアの管理用インターフェースではありません。設定の external-controller はコアの管理に使うもので、スマホのプロキシポート欄には入力しないでください。プロキシ共有のために、管理用インターフェースをLAN全体に公開するのも避けてください。
混合ポートを設定しても、すべての通信が自動でプロキシされるわけではない
スマホでHTTPプロキシを設定しても、PCに届くのはその設定に従うアプリの通信だけです。ゲームのUDP通信、一部の動画アプリ、独自のネットワーク処理を行うアプリは、直接接続する場合があります。SOCKS5にはUDP ASSOCIATEの仕組みがありますが、アプリ、コア、ファイアウォールすべての対応が必要です。7890を有効にしただけで、すべてのUDP通信を転送できるわけではありません。
同様に、PCでTUNモードを有効にしても、スマホの通信が自動的にTUNに入るわけではありません。TUNが取り込むのは、PC本体から仮想ネットワークインターフェースへルーティングされた通信です。スマホで明示的にプロキシを使わない限り、スマホは自身のデフォルトルートで通信します。
PC側の設定:LANからの接続を許可し、実際の待ち受けポートを確認する
- まずPC本体で接続できることを確認:有効なサブスクリプションまたは設定を読み込み、ルールモードと利用可能なポリシーを選択します。先にPCのブラウザーから目的のサイトへアクセスできることを確認してください。プロキシ共有の問題とノードの問題を混同せずに済みます。
- 混合ポートを確認:クライアントの「設定」にある「ポート」または「ポート設定」で「混合ポート」の値を確認します。項目が見つからない場合は、現在の設定とコアのログを確認してください。
- LAN接続を許可:「LAN接続を許可 / Allow LAN」を探して有効にします。クライアントによっては設定の適用やコアの再起動が必要です。切り替え後、ログに待ち受け失敗が記録されていないか確認してください。
- 待ち受けアドレスを確認:「バインドアドレス」の設定がある場合、
127.0.0.1のみに限定しないでください。すべてのアドレスで待ち受けると接続可能な範囲が広がるため、後でファイアウォールを使って接続元を制限してください。
YAMLを使う場合は、次の3項目を確認
以下はmihomoで使える、共有に必要な項目だけを示した最小構成例です。サブスクリプション全体ではなく、既存のノード、プロキシグループ、ルールを置き換えるものでもありません。
mixed-port: 7890
allow-lan: true
bind-address: '*'
allow-lan: true はLAN接続を許可します。bind-address: '*' はすべてのアドレスへのバインドを意味します。IPv4・IPv6で実際にどのアドレスが待ち受けるかは、システムにも左右されます。特定のLAN側IPv4アドレスだけで待ち受ける場合は、PCの該当ネットワークインターフェースのアドレスを指定できますが、アドレスが変わった場合は設定も更新してください。
PCのIPアドレスを調べ、LANからの着信をファイアウォールで許可する
Windows:ネットワークアダプターとネットワークプロファイルを確認
Win + R を押し、cmd と入力して ipconfig を実行します。現在インターネットに接続している「ワイヤレス LAN アダプター Wi-Fi」または「イーサネット アダプター」を探し、IPv4アドレスを確認してください。TUN仮想アダプター、仮想マシンのアダプター、切断済みのアダプターは選ばないようにします。
Windows 11では、「設定」→「ネットワークとインターネット」→現在のWi-Fiまたはイーサネット接続からネットワークプロファイルを確認できます。信頼できる家庭内ネットワークだと確認できた場合のみ「プライベート」に設定してください。ホテルや学校などの共有ネットワークを、制限を回避するためにプライベートへ変更しないでください。
ファイアウォールでは、クライアントの送信だけでなく、PCのプロキシ待ち受けポートへのアクセスも許可する必要があります。「Windows セキュリティ」→「ファイアウォールとネットワーク保護」→「詳細設定」→「受信の規則」でポート規則を作成します。TCP、ローカルポート7890、接続を許可、「プライベート」のみを選択してください。次に規則のプロパティを開き、「スコープ」でリモートIPアドレスを「ローカルサブネット」に限定します。
PowerShellに慣れている場合は、管理者ターミナルから同じ範囲の規則を作成することもできます。以下の例は、実際の混合ポートが7890の場合に限り使用してください。
New-NetFirewallRule -DisplayName "Clash LAN TCP 7890" -Direction Inbound -Action Allow -Protocol TCP -LocalPort 7890 -Profile Private -RemoteAddress LocalSubnet
スマホのHTTPプロキシを通常どおりテストするだけなら、まずTCPを許可すれば十分です。必要もないのに広範囲のポートを開放しないでください。後からSOCKS5のUDPを使う場合は、実際の待ち受け状況とアプリの要件に応じて、UDPの規則を個別に確認します。
macOS・Linux:アドレスを確認してからアプリのアクセス許可を確認
- macOS:「システム設定」→「ネットワーク」→現在の接続→「詳細」→「TCP/IP」を開き、IPアドレスを確認します。「システム設定」→「ネットワーク」→「ファイアウォール」→「オプション」で、クライアントまたは実際のコアプロセスへの着信接続が許可されているか確認してください。表示名はクライアントのパッケージ方法によって異なります。
- Linux:
ip -4 addrで物理ネットワークインターフェースのアドレスを確認し、ss -lntpで7890の待ち受け状態を調べます。UFW、firewalldなどのファイアウォールを使っている場合は、信頼できるネットワークから実際のポートへのアクセスだけを許可してください。ファイアウォールの規則をすべて削除するのは避けてください。
ルーターでPCのDHCPアドレス予約を設定しておくことをおすすめします。PCを再起動しても同じIPアドレスを取得できるため、スマホやテレビのプロキシサーバー設定を何度も変更せずに済みます。
スマホ・テレビの設定:プロキシサーバーにPCのアドレス、ポートに7890を入力
iPhone・iPad
- 「設定」→「Wi-Fi」を開き、接続中のWi-Fiの右側にある情報ボタンをタップします。
- 「プロキシを構成」を開き、「手動」を選択します。
- 「サーバ」にPCのLAN側IPアドレス(例:
192.168.1.20)、「ポート」に実際の混合ポート(例:7890)を入力します。 - プロキシ認証を有効にしていない場合は、「認証」をオフのままにします。保存後、Safariでアクセスを試してください。
この設定は現在のWi-Fiにのみ適用され、モバイル通信には適用されません。テスト後、PCのあるネットワークから離れる場合やPCの電源を切った場合は、「プロキシを構成」を開いて「オフ」に戻してください。プロキシ設定に従うアプリがインターネットに接続できなくなることがあります。
Androidスマートフォン
Android標準の一般的な手順は、「設定」→「ネットワークとインターネット」→「インターネット」→現在のWi-Fi→編集→「詳細設定」→「プロキシ」→「手動」です。メーカーによっては、ネットワーク詳細画面の下部に編集メニューがあります。プロキシのホスト名にPCのIPアドレス、ポートに7890を入力し、IP設定はDHCPのままにしてください。
ホスト名に http:// を付けたり、アドレスとポートを同じ入力欄に入れたりしないでください。AndroidのWi-Fi設定にある手動プロキシは通常HTTPプロキシで、SOCKS5には対応していません。システムプロキシを参照しないアプリでは、アプリ内にプロキシ設定があるか確認してください。
Android TVなどのテレビ
テレビの「設定」→「ネットワークとインターネット」→接続中のネットワークから「プロキシ設定」を探します。「手動」に対応していれば、PCのIPアドレスと混合ポートを入力してください。メニューはシステムのバージョンによって異なります。Wi-Fiを追加し直すときだけ詳細設定が表示されるテレビもあれば、プロキシ設定自体がない機種もあります。
設定項目が見つからなくても、試しにデフォルトゲートウェイを変更しないでください。テレビアプリにHTTPまたはSOCKS5の設定があれば、そちらを使えます。アプリもシステムも対応していない場合は、ルーター側またはゲートウェイ側で別の構成が必要です。Allow LANを有効にするだけでは解決できません。
段階的に接続を確認:まず到達性を調べ、次にルールとノードを確認
「サイトが開かない」だけで設定失敗と判断しないでください。まずPC本体でプロキシをテストし、次に別の端末からPCへの接続を確認して、最後にClashクライアントの「接続」と「ログ」を調べます。以下のアドレスは例です。実際のテストではPCのLAN側アドレスに置き換えてください。
curlでHTTP・SOCKS5プロキシを確認
まずPC上でループバックアドレスを使い、HTTPプロキシをテストします。Windowsでは curl.exe を明示して、古いPowerShellで同名のコマンドエイリアスが引数の解釈に影響しないようにします。
curl.exe -I --connect-timeout 5 --max-time 15 --proxy http://127.0.0.1:7890 https://example.com/
次に、curlを使えるLAN内の別端末からPCのアドレスを指定してテストします。macOS・Linuxでは curl、Windowsでは curl.exe を使ってください。
curl -I --connect-timeout 5 --max-time 15 --proxy http://192.168.1.20:7890 https://example.com/
curl -I --connect-timeout 5 --max-time 15 --proxy socks5h://192.168.1.20:7890 https://example.com/
socks5h は接続先ドメインの名前解決をプロキシ側で行います。名前解決をローカルで行う socks5 とは動作が異なります。HTTPのテストでCONNECTが成功しても、確認できるのはトンネルが確立したことだけです。続けて接続先サイトからの応答も確認してください。接続先から403が返った場合も、ログを見てサイト側の拒否なのか、プロキシ自体が接続できていないのかを切り分けます。
| 症状 | まず確認する項目 | 次に行うこと |
|---|---|---|
| ループバックアドレスでも接続できない | コアが起動しているか、ポートが競合していないか | 起動ログと実際の待ち受けポートを確認 |
| PCでは接続できるが、スマホからはタイムアウトする | Allow LAN、バインドアドレス、ファイアウォール、端末間通信の分離 | ループバックアドレスだけの待ち受けになっていないか確認し、受信規則を調べる |
| 接続が拒否される | 接続先IPアドレスが正しいか、ポートが待ち受け中か | PCのネットワークアダプターのアドレスとポートを再確認 |
| クライアントにリクエストは表示されるが、アクセスできない | 適用されたルール、選択中のノード、上流の名前解決 | 「接続」でポリシーの経路を確認し、エラーログを調べる |
| ブラウザーは使えるが、特定のアプリでは使えない | アプリがHTTPプロキシ設定に従うか | アプリ内のプロキシ設定を確認し、UDP通信への依存も調べる |
Wi-FiのSSIDが同じでも、端末同士が通信できるとは限りません。ゲストネットワーク、APアイソレーション、異なるVLANなどが端末間通信を遮断する場合があります。一方、PCが有線LAN、スマホがWi-Fiでも、それだけで問題になるわけではありません。両方が接続されているネットワーク間で通信できれば利用できます。Pingが失敗しても、ICMPがファイアウォールに遮断されている可能性があるため、TCP 7890も通信できないとは限りません。
共有範囲と認証、利用後の設定の戻し方
LAN接続を許可すると、ほかの端末がPCのプロキシ接続口を使えるようになります。家庭内ネットワークでも、ファイアウォールで接続元を制限してください。ルーターで7890をインターネットにポート転送したり、トラブルシューティングのためにシステムのファイアウォール全体を無効にしたりしないでください。PCにほかのネットワークインターフェースやグローバルIPv6アドレスがある場合は、実際の待ち受け先と受信規則を念入りに確認してください。
mihomoは authentication を設定すると、HTTP・SOCKSプロキシの認証に対応します。ただし、接続する端末側でもユーザー名とパスワードを入力して送信できる必要があります。AndroidのWi-Fiプロキシ設定では入力欄がない場合があり、テレビの対応状況も機種によって異なるため、有効にする前に端末ごとに確認してください。認証は暗号化通信の代わりにはなりません。通常のLAN経由のHTTP・SOCKS接続をVPNトンネルとみなさないでください。
- 共有前:ネットワークが信頼できること、PCのIPアドレスが固定されていること、ポートが正しいこと、ファイアウォールが必要な接続元だけを許可していることを確認します。
- 共有中:クライアントの「接続」で接続元のアドレスと通信量を確認し、想定した端末からのリクエストかを確かめます。共有端末は通常、同じルールとポリシーグループを使います。端末ごとに別のサブスクリプションが自動で適用されるわけではありません。
- 共有後:まずスマホとテレビの手動プロキシをオフにし、その後Allow LANを無効にします。一時的に作成したファイアウォール規則は無効化するか削除してください。
テスト後に上記で作成したWindowsの規則を削除する場合は、管理者権限のPowerShellで以下のコマンドを実行します。このコマンドは、指定した名前で作成された規則だけを削除します。
Remove-NetFirewallRule -DisplayName "Clash LAN TCP 7890"
トラブルシューティングは、PC本体のプロキシが使える → LANからポートに接続できる → 端末が正しくプロキシを使っている → ルールとノードが正常、の順に確認してください。4つの段階を分けて調べると、グローバルモードやTUN、ポートを何度も切り替えるより原因を見つけやすくなります。