クライアントとサブスクリプションの準備

LANで共有するには、まずPCのClashクライアントでプロキシが正常に動作している必要があります。ClashクライアントのダウンロードページでWindows、macOS、Linuxに合ったクライアントを選び、インストール後、「サブスクリプション」または「プロファイル」画面でサービス提供元のサブスクリプションURLを追加します。設定をダウンロードし、使用する設定として選択してください。メニュー名や手順はクライアントによって異なるため、詳しくはクイックスタートガイドをご覧ください。

インポートしたら、まずルールモードにし、実際に適用されるプロキシグループで利用可能なノードを選んで、PCから接続できることを確認します。サブスクリプションはノードとルールを提供し、クライアントはコアを実行します。LAN共有を有効にしても新しいノードが追加されるわけではなく、サブスクリプションの期限切れ、ノードの停止、ルール選択の誤りも解決しません。

  1. 設定をダウンロードしただけでなく、現在の設定として有効になっていることを確認してください。
  2. クライアントに表示されているmixed-portの番号を控えてください。この記事では例として 7890 を使用します。実際のポート番号が異なる場合は、適宜読み替えてください。
  3. PCとスマホを、信頼できる同じLANに接続します。PCは有線LAN、スマホはWi-Fiでも構いません。ルーターが両方の端末間の通信を許可している必要があります。
  4. テスト中は、スマホ上のほかのVPNやプロキシアプリを一時的にオフにし、通信が別の経路を通らないようにします。

mixed-port、HTTP、SOCKS5の違い

mixed-portは、HTTPプロキシとSOCKS5プロキシの両方のリクエストを受け付ける待ち受けポートです。コアは接続開始時のプロトコルハンドシェイクでリクエストを判別するため、プロトコルごとにポートを分ける必要はありません。すべての通信を無差別に転送するポートという意味でもありません。リクエストがコアに届いた後は、ルール、プロキシグループ、ノードの選択に従って出口が決まります。

3種類のプロキシポートの用途
設定項目対応プロトコル主な用途
portHTTPプロキシブラウザー、OSのWi-Fi手動プロキシ設定
socks-portSOCKS5プロキシSOCKS5対応アプリやコマンドラインツール
mixed-portHTTP、SOCKS5複数の端末で同じプロキシポートを指定

スマホのWi-Fi設定にある「手動プロキシ」は、通常HTTPプロキシを指定するもので、SOCKS5ではありません。mixed-portを指定すれば、こうしたリクエストも受け付けられます。HTTPSサイトへの接続では、一般にHTTPプロキシのCONNECTメソッドでトンネルを確立します。そのため、プロキシアドレスに https://192.168.50.23 と入力する必要はなく、通常のプロキシ共有に証明書をインストールする必要もありません。

allow-lanと待ち受けアドレス

allow-lan: trueは、LAN内の端末からの接続を許可する設定です。待ち受けアドレスは、PC上のどのアドレスで接続を受け付けるかを決めます。コアが引き続き 127.0.0.1 だけで待ち受けている場合、PC自身からは使えてもスマホからは接続できません。以下はClashやmihomoでよく使われる共有用の設定例です。サブスクリプション全体を置き換えず、既存設定のトップレベルに統合してください。

mixed-port: 7890
allow-lan: true
bind-address: "*"
mode: rule

"*"はすべてのネットワークインターフェースで待ち受ける指定です。説明には便利ですが、接続を受け付ける範囲も広がります。複数のネットワークアダプターがあるPCや、信頼できないネットワークを使うPCでは、ファイアウォールで接続元を制限してください。コアが対応していれば、特定のLANアドレスにバインドする方法もあります。サブスクリプションの更新で手動設定が上書きされることがあるため、クライアントの「LAN接続を許可」「mixed-port」設定、またはオーバーライド・マージ機能を使って保存するのがおすすめです。変更後に設定を再読み込みし、ログにポート競合や設定項目のエラーがないか確認してください。

PCのLAN IPアドレスとポートを確認する

スマートフォンには、パソコンのグローバルIPアドレスではなく、LAN内のIPアドレスを指定します。127.0.0.1はスマートフォン自身を指すため使用できません。ここではパソコンのIPアドレスを192.168.50.23、スマートフォンのIPアドレスを192.168.50.80、サブネットマスクを255.255.255.0とします。いずれも設定例のため、実際の端末に表示されるアドレスを確認してください。

Windows

「設定」→「ネットワークとインターネット」→接続中の「Wi-Fi」または「イーサネット」→「ネットワークのプロパティ」の順に開き、IPv4アドレスを確認します。ターミナルで次のコマンドを実行して調べることもできます。VPN、仮想マシン、TUNの仮想ネットワークアダプターではなく、現在使用中の物理ネットワークアダプターを選んでください。

ipconfig
netstat -ano | findstr :7890

待ち受け状態には、通常 0.0.0.0:7890 または指定したLANアドレスが表示され、状態が LISTENING になります。127.0.0.1:7890 しか表示されない場合は、LAN接続の許可と待ち受け設定を確認してください。待ち受けの記録がまったくない場合は、コアが起動しているか、実際のポート番号が正しいかを確認します。

macOSとLinux

macOSでは「システム設定」→「ネットワーク」→接続中のネットワーク→「詳細」→「TCP/IP」でアドレスを確認できます。Linuxではネットワーク設定画面でIPv4アドレスを確認するか、次のコマンドでインターフェースと待ち受け状態を調べてください。

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

ノートPCはWi-Fiを切り替えるとIPアドレスが変わることがあります。継続して使う場合は、ルーターのDHCPアドレス予約機能でPCのアドレスを固定すると、スマホ側のプロキシ設定を何度も変更せずに済みます。PCがスリープしたり、画面を閉じたり、クライアントを終了したりすると、共有プロキシに接続できなくなる場合があります。

ファイアウォールと信頼できるネットワークの範囲

allow-lanを有効にしても、OSのファイアウォールが外部からの接続を遮断することがあります。ファイアウォール全体を無効にせず、プロキシの待ち受けポートだけを許可してください。また、ルーターで7890をインターネットにポート転送しないでください。

Windowsの受信規則

  1. 「Windows セキュリティ」→「ファイアウォールとネットワーク保護」→「詳細設定」を開きます。
  2. 「受信の規則」→「新しい規則」→「ポート」を選び、プロトコルにTCPを指定して、ローカルポートに7890を入力します。
  3. 「接続を許可する」を選択します。信頼できる家庭内ネットワークでのみ使う場合は、「プライベート」プロファイルだけにチェックを入れ、現在のネットワークがプライベートに設定されていることを確認してください。
  4. 規則を作成したら、その「プロパティ」→「スコープ」を開き、リモートIPアドレスをスマホの実際のIPアドレス、または信頼できるサブネット(例:192.168.50.0/24)に制限します。

ここで説明したTCPの許可設定は、HTTPでのブラウザーテスト向けです。SOCKS5のUDP通信を含むすべてのケースに対応する設定ではありません。オフィスや集合住宅の共有ネットワーク、ゲストWi-Fiでは、サブネット全体を許可するのは避け、接続元の端末をさらに絞り込んでください。

macOSとLinuxで接続を許可する

比較的新しいmacOSでは、「システム設定」→「ネットワーク」→「ファイアウォール」→「オプション」で、対象のクライアントまたはコアの着信接続が許可されているか確認できます。項目の場所はOSのバージョンによって異なる場合があります。LinuxでUFWを使っている場合は、例のサブネットを指定してルールを追加し、既存のポリシーも確認してください。

sudo ufw allow from 192.168.50.0/24 to any port 7890 proto tcp
sudo ufw status numbered

スマホ・タブレット・テレビのプロキシ設定

iPhone・iPad

  1. 「設定」→「Wi-Fi」を開き、接続中のWi-Fiの右側にある情報ボタンをタップします。
  2. 「HTTPプロキシ」欄の「プロキシを構成」を開き、「手動」を選択します。
  3. サーバーにPCの実際のアドレス(例:192.168.50.23)、ポートに7890を入力します。サーバー欄にプロトコルの接頭辞を付けないでください。
  4. この記事の例では受信接続のユーザー名とパスワードを設定していないため、「認証」をオフにします。保存後、ブラウザーで接続をテストしてください。

この設定は現在のWi-Fiだけに適用され、モバイル通信には反映されません。別のWi-Fiに接続した場合は、そのネットワークでも設定が必要です。また、すべてのアプリがOSのHTTPプロキシ設定に従うわけではありません。ブラウザーでWebサイトが開けても、すべてのアプリがPC経由で通信しているとは限りません。

Androidスマホ・タブレット

一般的な設定手順は、「設定」→「ネットワークとインターネット」→「インターネット」→接続中のWi-Fi→「ネットワークを編集」→「詳細設定」→「プロキシ」→「手動」です。メーカーによっては、ネットワークを長押しするか、ネットワークの詳細画面を開く必要があります。メニュー名が「WLAN」の場合もあります。プロキシのホスト名に192.168.50.23、ポートに7890を入力し、最初の動作確認では除外リストを空欄にしておきます。

AndroidのWi-Fi用HTTPプロキシ設定も、VpnServiceのように端末の全通信を引き受けるものではありません。ゲーム、リアルタイム通信、自前のネットワークスタックを使うアプリなどは、この設定に従わないことがあります。対象アプリがHTTPプロキシに対応していない場合は、PC側のポートを何度も変更するより、スマホに対応クライアントをインストールしてVPN経由で通信させる方法が適しています。

テレビ・セットトップボックス

一部のAndroid TV端末では、「設定」→「ネットワークとインターネット」→接続中のネットワーク→「プロキシ設定」から手動プロキシを指定できますが、項目の有無はメーカーのファームウェアによって異なります。設定項目がない場合は、対象アプリに独自のプロキシ設定があるか確認してください。通常のHTTPプロキシでは、テレビのすべてのアプリやUDP通信をPC経由にできるとは限りません。必要に応じて、端末に対応したクライアントを使うか、ルーターを使ったプロキシ構成を別途検討してください。

接続テストとルールの確認

「ポートに接続できるか → プロキシリクエストが成功するか → ルールに沿った出口になっているか」の順でテストしてください。ブラウザーで接続できない場合、LAN接続、ファイアウォール、ノード、ルールのいずれかに問題がある可能性があります。すぐにサブスクリプションの失効と判断しないでください。

別のPCから接続を確認する

LAN内に別のWindows PCがある場合、まずTCPポートへの接続をテストし、その後HTTPプロキシを明示してリクエストを送信できます。次のコマンドではアドレスを例として指定しています。接続先のサイトはHTTPレスポンスの確認用です。

Test-NetConnection 192.168.50.23 -Port 7890
curl.exe -I --connect-timeout 5 --max-time 20 --proxy http://192.168.50.23:7890 https://example.com/

TcpTestSucceeded: Trueで確認できるのはTCP接続の成功だけで、ノードやルールが使えることまではわかりません。接続先からレスポンスヘッダーが返れば、リクエストの経路が基本的に機能していると判断できます。ポートに接続できない場合は、アドレス、待ち受け設定、ファイアウォールを確認してください。接続できてもリクエストが失敗する場合は、コアのログとプロキシグループの状態を確認します。

SOCKS5とDNS名前解決

curl --head --connect-timeout 5 --max-time 20 --proxy socks5h://192.168.50.23:7890 https://example.com/

socks5hは、接続先のドメイン名をプロキシ側で解決する指定です。ツールがローカルで名前解決する可能性のあるsocks5とは異なります。このテストで確認できるのはSOCKS5経由のTCPリクエストのみで、UDP転送の正常性は判断できません。

テスト中はクライアントの「接続」画面も開き、スマホの接続元IP、接続先ドメイン、適用ルール、プロキシグループを確認してください。ルールモードでは、リクエストがDIRECTに振り分けられる場合も、プロキシグループに送られる場合もあります。実際に適用されたグループで想定したノードが選択されていることを確認してから、出口を判断してください。一時的にグローバルモードへ切り替えるとルールの問題を切り分けやすくなりますが、テスト後は普段のモードに戻してください。

よくあるトラブルと共有時の注意点

LANプロキシのトラブルシューティング
症状まず確認する項目対処方法
PCでは使えるが、スマホがタイムアウトする待ち受けアドレス、ファイアウォール、APアイソレーションLANアドレスとTCP 7890への接続を確認する
PCを再起動すると使えなくなるDHCPによるIPアドレスの変更、コアの未起動IPアドレスを予約し、起動状態を確認する
サブスクリプション更新後に共有できなくなったLAN関連の設定が上書きされたクライアントのオーバーライドを使い、実行中の設定を確認する
ブラウザーは使えるが、ゲームは使えないアプリがHTTPプロキシ設定に従っているかアプリのプロキシ対応状況や端末上のVPN方式を確認する
スマホの画面が消えると接続が途切れるPCのスリープ状態、Wi-Fiの接続状態プロキシを動かすPCと接続する端末をそれぞれ確認する
PCでシステムプロキシやTUNモードを有効にする必要はありますか?

必要ありません。コアが動作し、LANアドレスでプロキシポートを待ち受けていれば、スマホから接続できます。PCのシステムプロキシは、OSの設定に従うPC上のアプリに影響します。PCのTUNはPC自身の通信を処理するもので、スマホの通信すべてを自動的に引き受けるわけではありません。スマホ側でプロキシを明示的に設定するか、別途ゲートウェイやルーティングを構成してください。

共有を有効にしたら、外部コントローラーポートも開放する必要がありますか?

必要ありません。プロキシの接続口とexternal-controllerは別のサービスです。ダッシュボードの制御用インターフェースをスマホのプロキシアドレスとして使わないでください。また、プロキシ共有のために制御用インターフェースを公開する必要もありません。一般的な制御ポートと、この記事で使う7890のmixed-portは用途が異なります。

共有プロキシにパスワードを設定できますか?

対応する設定項目を備えたコアでは、authenticationでHTTPやSOCKSの受信認証を設定できます。ただし、端末やアプリによってはプロキシ認証に対応していないため、有効にした後は個別に動作確認が必要です。認証は追加の保護策であり、ファイアウォールによる接続元の制限に代わるものではありません。プロキシポートをインターネットに公開する理由にもなりません。

共有を終了するときの設定

  • スマホやタブレットで、現在のWi-Fiのプロキシ設定をオフに戻してください。そのままにすると、PCがオフラインになった後もプロキシの応答を待ち続ける場合があります。
  • クライアントのLAN共有をオフにし、不要になったファイアウォールの受信規則を削除してください。
  • クライアントの接続一覧で接続元を確認し、知らない端末にプロキシ接続口を長期間公開しないようにしてください。

安定して共有するには、PCのプロキシが正常に動作していること、LANからの接続が許可されていること、ネットワークとファイアウォールが端末間通信を許可していること、接続するアプリが選択したプロキシ方式に対応していることの4点が必要です。ポート、ノード、ルールを同時に変更するより、この順番で確認すると原因を特定しやすくなります。