1. 共有方法を確認:端末からPCのプロキシに接続

手軽な方法は、PCでClashまたはClash Meta(mihomo)ベースのクライアントを起動し、LANからのアクセスを許可することです。スマホとPCを同じ家庭内ネットワークに接続し、スマホのWi-Fiプロキシ設定にPCのLAN内IPv4アドレスとmixed-portを入力します。PCの電源とクライアントを入れたままにすると、プロキシ設定に対応したスマホの通信がPCのコアに届き、PC側で選択中のルールとプロキシグループに従って転送されます。

この記事では、PCのアドレスに192.168.50.10、家庭内サブネットに192.168.50.0/24、mixed-portに7890を使用します。いずれも例なので、実際の設定ではご利用のネットワーク情報に置き換えてください。スマホ側に127.0.0.1を入力しないでください。このアドレスはスマホ自身を指し、PCには接続できません。

  1. まずPCでサブスクリプションが有効になっていること、プロキシグループで利用可能なノードを選択していること、PCのブラウザーから目的のサイトにアクセスできることを確認します。
  2. スマホとPCがゲストネットワークに接続されていないこと、無線クライアントの分離が有効になっていないことを確認してください。同じWi-Fi名でも、端末同士の通信が許可されているとは限りません。
  3. PCで現在使用中のネットワークアダプターのアドレスを確認します。有線接続のPCとWi-Fi接続のスマホでも、ルーターが相互通信を許可していれば共有できます。

2. mixed-port、allow-lan、バインドアドレスの役割

mixed-portはHTTPプロキシとSOCKS5プロキシの入口を1つのポートにまとめ、接続時のハンドシェイクからコアがプロトコルを判別します。すべてのネットワークプロトコルをHTTPに変換する機能でも、ルーターのポート転送でもありません。スマホでHTTPプロキシを選ぶ場合は7890を入力します。SOCKS5に対応したアプリも同じポートに接続できますが、アプリ側で正しいプロキシ種別を選択してください。

設定項目役割この記事の例
mixed-portHTTPとSOCKS5で共用する待ち受けポート7890
allow-lanほかの端末からプロキシの待ち受け先への接続を許可true
bind-address接続を受け付けるPC側のアドレスを指定192.168.50.10
modeコアに届いた通信の振り分け方法を決定rule
authenticationHTTPおよびSOCKSの接続にユーザー名とパスワードを設定認証に対応した端末では設定を推奨

allow-lan: trueは、LANからのアクセスを許可するために必要な設定の1つにすぎません。実際の待ち受けアドレスが127.0.0.1だけの場合や、システムのファイアウォールが受信を拒否している場合、スマホは接続できません。逆に、すべてのインターフェースにバインドしても、ポートを公開して安全になるわけではありません。ネットワークの範囲も必ず制限してください。

従来のportは通常HTTPプロキシ用、socks-portは個別のSOCKS用ポートです。mixed-portを使っている場合、共有のために両方の入口を追加で開く必要はありません。複数の設定項目で同じポートを指定してアドレスの使用中エラーが発生したら、重複する待ち受けを削除するか、入口ごとに別のポートを割り当ててください。

3. 有効な設定を編集し、ポートの反映を確認

設定を保存してから、トップレベルの項目を編集

まず既存の設定をバックアップしてください。GUIクライアントに「設定」内の「LAN接続を許可」や「Allow LAN」スイッチがあれば、そちらを使うのが簡単です。メニューの場所や日本語表記はクライアントによって異なります。重要なのはスイッチの表示だけでなく、実際に実行される設定を確認することです。サブスクリプションをクライアントで管理している場合は、更新で手動変更が上書きされないよう、クライアントのオーバーライド、マージ、永続設定の機能を利用してください。

以下は既存設定に追加するトップレベル項目の例であり、サブスクリプション全体ではありません。既存のノード、プロキシグループ、ルール、DNS設定は残してください。YAMLのインデントには半角スペースを使い、タブは使わないでください。同じ階層にmixed-portを重複して記述しないようにします。

mixed-port: 7890
allow-lan: true
bind-address: '192.168.50.10'
mode: rule

特定のLANアドレスにバインドすると、待ち受け範囲を絞れます。ただし、指定するアドレスはPCに実際に割り当てられている必要があります。アドレス変更後の起動失敗を防ぐため、ルーターのDHCP設定でPCに固定リースを割り当てることをおすすめします。PCの既存のローカルループバック用プロキシも使う場合は、bind-address: '*'を検討し、ファイアウォールで接続元を厳密に制限してください。変更後はPC自身のプロキシが正常に動作するかも確認します。

再読み込み後に待ち受け状態を確認

設定を保存したら、クライアントの方法に従って再読み込みします。待ち受け設定が反映されない場合は、コアを再起動してください。WindowsではPowerShellでTCPの待ち受けを確認できます。macOSとLinuxでは、それぞれのシステムツールを使用してください。

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

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

# Linux
ss -lntp 'sport = :7890'

PCのLANアドレス、またはワイルドカードの待ち受けアドレスが表示されるのが正常です。127.0.0.1:7890だけの場合は、LANから接続できません。結果が何も表示されない場合は、まずコアのログでポートの競合、存在しないアドレス、設定の構文エラーを確認してください。システムによってはプロセス情報の表示に管理者権限が必要です。確認のためにファイアウォールを無効にするのは避けてください。

4. 信頼できるLANからの接続だけをファイアウォールで許可

HTTPプロキシとHTTPSのCONNECTトンネルには、まずTCP接続が必要です。スマホでのウェブ閲覧だけが目的なら、TCPの7890を許可すれば十分で、最初からUDPを開放する必要はありません。SOCKS5のUDP転送には、クライアントのUDP ASSOCIATE対応、コアの機能、実際のノード経路も関係します。mixed-portを有効にしただけで、ゲームのUDP通信が使えるとは限りません。

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

まず「設定」→「ネットワークとインターネット」で現在の接続のプロパティを開き、信頼できる家庭内ネットワークの場合のみ、ネットワークプロファイルを「プライベート」に設定します。次に、管理者としてPowerShellを起動し、以下のルールを追加してください。例にあるローカルアドレスとリモートのサブネットは、実際の環境に合わせて変更します。

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

セキュリティソフトが独自のルールを管理している場合もあります。システムのファイアウォールで許可してもタイムアウトする場合は、セキュリティソフトのネットワーク保護ログを確認してください。「すべてのポート、すべての接続元、すべてのネットワーク」を許可する広範なルールで原因を切り分けないでください。共有を停止したら、この記事で作成したルールを削除できます。

Remove-NetFirewallRule -DisplayName "Clash LAN TCP 7890"

macOS・Linux:実際に待ち受けているプロセスを確認

macOSでは「システム設定」→「ネットワーク」→「ファイアウォール」→「オプション」で、アプリの着信接続を確認できます。古いmacOSでは「セキュリティとプライバシー」に設定項目がある場合があります。プロキシの待ち受けが独立したコアプロセスの場合もあるため、クライアントの外側だけを許可するのではなく、待ち受け結果とシステムの通知を合わせて確認してください。

LinuxでUFWを使用している場合は、接続元のサブネットを指定してルールを追加できます。UFWを使用していない場合は、現在利用中のファイアウォール管理ツールを使ってください。コマンドをそのまま実行するために、別のファイアウォール管理ツールを同時に起動するのは避けてください。

sudo ufw allow from 192.168.50.0/24 to 192.168.50.10 port 7890 proto tcp

5. スマホ・テレビ・ゲーム機の設定方法

iPhone・iPad:接続中のWi-FiにHTTPプロキシを設定

  1. 「設定」→「Wi-Fi」を開き、接続中のネットワークの右側にある情報ボタンをタップします。
  2. 「プロキシを構成」を開き、「手動」を選択します。サーバに192.168.50.10、ポートに7890を入力してください。
  3. コアでアカウントとパスワードを設定している場合は、「認証」をオンにして情報を入力します。保存後、ブラウザーを開き直して接続を確認してください。

サーバ欄にはIPアドレスだけを入力し、http://192.168.50.10:7890のような形式にはしないでください。この設定は接続中のWi-Fiに適用され、モバイル回線には自動で引き継がれません。また、システム全体を対象にするVPN設定でもありません。HTTPSサイトへの接続では、通常のHTTPプロキシがCONNECTでトンネルを確立するため、ルート証明書をインストールする必要はありません。証明書の警告が出た場合は、まずシステム時刻、サイトの証明書、ネットワーク環境を確認してください。

Android:接続済みネットワークのプロキシを設定

一般的な設定場所は「設定」→「ネットワークとインターネット」→「インターネット」→接続中のWi-Fi→「編集」→「詳細設定」→「プロキシ」→「手動」です。メーカー独自のシステムでは、ネットワーク詳細画面に項目がある場合もあります。プロキシのホスト名に192.168.50.10、ポートに7890を入力してください。共有のテスト中は、対象ドメインが除外されないよう、バイパスリストは追加しないでください。

AndroidのWi-Fi手動プロキシ画面には、ユーザー名とパスワードの入力欄がない機種もあります。その場合、認証付きの設定をそのまま使うことはできません。認証に対応したアプリ内のプロキシ設定を使うか、信頼できる家庭内の隔離されたネットワークで、ファイアウォールを厳密に設定したうえで共有方法を検討してください。システムのHTTPプロキシを利用しないアプリは、この画面を変更しても通信を強制的にプロキシ経由にはできません。

テレビ・ゲーム機:まずプロキシ設定の有無を確認

テレビのブラウザーやネットワーク設定にHTTPプロキシの項目があれば、同じアドレスとポートを入力します。SOCKS5対応のプレーヤーでは、アプリ内でSOCKS5を選択してください。ゲーム機のHTTPプロキシ設定は、一部のシステムサービスやダウンロードにしか適用されない場合があります。オンライン対戦、ボイスチャット、NATタイプにも影響すると決めつけないでください。

端末全体のTCP・UDP通信をプロキシ経由にするには、通常、ルーター側の透過プロキシや、転送・ルーティング・DNS・戻り経路を考慮したゲートウェイ構成が必要です。ゲーム機のデフォルトゲートウェイをPCのIPに変えるだけ、またはPCでTUNを有効にするだけでは、完全な構成になりません。ネットワークの知識がない場合は、まずアプリ側で明示的に設定できるプロキシの範囲にとどめてください。

6. 接続ログでポート・認証・ルールの問題を切り分ける

検証では一度に変更する項目を1つに絞ります。PC側のルールモードとノードはそのままにして、別の端末からポートへの接続を確認し、次にプロキシ経由のリクエストをテストして、最後にコアの接続ログを確認してください。以下のコマンドにあるドメインは接続確認用の例です。サイトが表示されても、必ずプロキシノード経由とは限りません。実際に適用されたルールも確認してください。

# 別のWindows端末からTCP接続を確認
Test-NetConnection 192.168.50.10 -Port 7890

# HTTPプロキシのテスト。Windows PowerShellではcurl.exeを明示して実行
curl --proxy http://192.168.50.10:7890 --connect-timeout 5 -I https://example.com/

# SOCKS5のテスト。接続先ドメインの名前解決はプロキシ側で実行
curl --proxy socks5h://192.168.50.10:7890 --connect-timeout 5 -I https://example.com/
症状まず確認する項目次に行うこと
TCP接続がタイムアウトするアドレスの誤り、サブネットの分離、ファイアウォールによる遮断ネットワークアダプターのアドレスと接続元の範囲を確認
接続が拒否される待ち受けがない、ポートの指定ミス、またはプロセスの終了待ち受け一覧とコアのログを確認
HTTPで407が返るプロキシ認証が必要端末が認証に対応しているか確認し、ユーザー名とパスワードを入力
接続ログはあるが、接続先を開けないノード、ルール、DNS、または接続先サービス適用されたルール、プロキシグループ、エラーの詳細を確認
ブラウザーは使えるがゲームは使えないアプリがプロキシを経由しない、またはUDPに依存しているアプリのプロキシ対応を確認し、ポートを何度も切り替えない

HTTPテストで200 Connection establishedと表示されても、プロキシがCONNECTリクエストを受け付けたことを示すだけです。その後のTLS接続と接続先からの応答も確認してください。接続パネルでスマホの送信元アドレスを指定し、接続先ドメイン、適用ルール、最終的な送信経路を確認します。共有した通信にもPCのルールモードが適用されます。DIRECTに一致して直接接続されるのは想定どおりであり、LAN共有の失敗を意味しません。

DNSの動作もアプリの通信経路によって異なります。HTTPプロキシには通常、接続先のホスト名が渡されます。socks5hでは接続先ドメインの名前解決をプロキシ側で行いますが、一般的なsocks5の使い方ではリクエスト側で先に名前解決する場合があります。Wi-Fiの手動プロキシ設定を有効にしても、スマホのすべてのDNS問い合わせがPCに転送されるわけではありません。DNSの待ち受けと対応するファイアウォールルールを別途設定・検証していない限り、この例のためだけにスマホのDNSをPCに向けないでください。

7. 認証・スリープ・共有停止のチェックリスト

信頼できるネットワーク内でも、認証に対応した端末には個別のアカウントを設定することをおすすめします。HTTPやSOCKSの認証は、LAN内の通信経路を暗号化するものではありません。また、重要なサービスで使っているパスワードを流用しないでください。以下は設定例です。使用前に、専用のランダムな認証情報に変更し、端末が認証に対応していることを確認してください。

authentication:
  - "lan-device:ChangeThisLocalPass7890"
  • 認証の除外設定を確認:設定にskip-auth-prefixesがある場合、共有するサブネット全体が除外されていないか確認してください。アカウントを設定しただけで認証が有効になったと判断しないでください。
  • アドレスを固定:PCにDHCPの固定リースを割り当てます。ルーターの交換、ネットワークの切り替え、再接続の後は、アドレスとファイアウォールの適用範囲を再確認してください。
  • スリープに注意:PCがスリープ状態になったり、ノートPCのふたを閉じたり、コアが終了したりすると、そのプロキシを参照しているスマホはインターネットに接続できなくなる場合があります。スマホのネットワークをリセットする前に、PCの状態を確認してください。
  • 共有を停止:まずスマホの「プロキシを構成」を「オフ」に戻し、Androidでは「なし」に設定します。その後、クライアントのLANアクセスを無効にし、専用の許可ルールを削除してください。

設定後は、どの端末が待ち受けているか、どの接続元を許可しているか、コアに届いた通信がどのルールを通るかを把握できる状態が理想です。この3つを分けて確認すれば、混合ポートの共有で全体モードへの切り替えやクライアントの再インストール、ファイアウォール全体の無効化を繰り返す必要はありません。コアやルール設定の詳細は応用設定をご覧ください。サブスクリプションを初めて読み込む場合は、入門ガイドから始められます。