1. ホーム
  2. ブログ
  3. Clash の mixed-port と allow-lan 設定

Clash の mixed-port と allow-lan 設定:複数デバイスでプロキシを共有する完全ガイド

mixed-port と allow-lan という2つのフィールドの実際の役割を解説し、スマートフォンやテレビ、ゲーム機を同じLAN内のPC上のClash経由でインターネット接続させる方法をデモ。ファイアウォールの許可設定と認証の注意点も紹介します。

なぜ1台のPCで家中のデバイスがネットに接続できるのか

多くの人が Clash に対して持つ最初の印象は「ブラウザのネットワーク経路を切り替えるもの」という程度ですが、実際には Clash のプロキシコアはシステムのファイアウォールと結びついた存在ではありません。本質的にはローカルマシンの特定ポートで待ち受けているネットワークサービスであり、そのポートに接続できるデバイスであれば、同じPCかどうかにかかわらず、トラフィックの処理をこのサービスに委ねることができます。つまり、LAN内の他のデバイスがこのPCの内部IPとClashが待ち受けているポートを知っていれば、自分の通信リクエストをこのアドレスに向けるだけで、このPCで設定済みのサブスクリプションノードや振り分けルールを使ってインターネットに接続できるのです。テレビボックスやゲーム機のようにクライアントのインストールが難しいデバイスに、いちいち同じ設定を繰り返す必要がなくなります。

この使い方は家庭ネットワークでよく見られます。常時起動しているPCやNAS上でClashを動かし、スマートフォン・タブレット・スマートテレビ・ゲーム機がすべてLAN経由で接続することで、デバイスごとにクライアントをインストールしたり、サブスクリプションを個別に維持したりする手間を省けます。これを実現するには、設定ファイル内の2つのフィールドが核心となります。待ち受けポートを決定する mixed-port と、LAN外部からの接続を受け入れるかどうかを決定する allow-lan です。この2つを適切に組み合わせれば、1台のPCが家中のデバイスの出口ゲートウェイになります。設定を誤ると、他のデバイスがつながらないだけで済む場合もありますが、最悪の場合は未認証のプロキシポートをLAN全体、あるいはさらに広い範囲に公開してしまうことになります。

mixed-port フィールドが実際に制御するもの

Clash の初期バージョンでは、HTTPプロキシとSOCKS5プロキシは別々のポートで待ち受けており、設定ファイルには port(HTTP)と socks-port(SOCKS5)という2つの独立したフィールドがありました。この分離方式は、クライアントがブラウザのトラフィックを転送するだけの場合には十分でしたが、接続するデバイスの種類が増えてくると――HTTPプロキシしか対応していないクライアントもあれば、SOCKS5しか認識しないクライアントもある――2種類のポートを維持するのは煩雑になります。mixed-port はその後導入された統合方式で、同一ポートでHTTPとSOCKS5の両方の接続を受け入れ、Clashのコアがクライアントから送られてきたプロトコルの種類を自動的に識別して処理します。

現在の主流クライアントのデフォルト設定では、混合ポートは一般的に 7890 に設定されており、これが多くのチュートリアルでこの数字が登場する理由です。フィールドの書き方はシンプルです。

mixed-port: 7890

このポートを他のデバイスに伝えれば、それらのデバイスは自分のWi-Fiまたはネットワーク設定で「このPCの内部IP + 7890」をプロキシアドレスとして入力するだけで、トラフィックを転送できます。注意すべき点は、mixed-port は「どのポートでクライアント接続を受け入れるか」しか決めておらず、そのポートがLAN内の他のデバイスからアクセス可能かどうかは管理していないということです。この権限は完全に別のフィールド、つまり次に説明する allow-lan によって決まります。

allow-lan:ポートを外部に開放するかどうかを決める

デフォルトでは、Clash はセキュリティ上の理由から allow-lan フィールドの値を false にしています。この状態では、mixed-port が7890ポートで待ち受けていても、そのポートはローカルホスト(127.0.0.1)からの接続要求しか受け付けず、LAN内の他のデバイスからの接続要求は拒否され、接続タイムアウトまたは接続拒否として表れます。これは保護機構であり、この制限がなければ、Clashを実行しつつ公共Wi-Fiに接続しているどのPCも、そのプロキシポートを同じWi-Fi内の未知のデバイスに公開してしまう可能性があります。

LAN内の他のデバイスを接続させるには、この制限を明示的に解除する必要があります。

allow-lan: true
bind-address: "*"

bind-address は待ち受けアドレスをどのネットワークインターフェースにバインドするかを決めるもので、* と書けばローカルマシンのすべてのネットワークインターフェース(有線・無線を含む)で待ち受けることになります。これにより、他のデバイスがルーターのどのセグメントから接続してきても、このPC上のClashサービスに接続できます。このPCが有線LANとWi-Fiの両方に接続しており、それぞれ異なるサブネットに属している場合、* にバインドしておけばどちらのインターフェースからの接続要求も取り逃しません。

注意

allow-lan: true を有効にすると、理論上はこのPCが属するセグメントにアクセスできる任意のデバイスがこのポートへの接続を試みられるようになり、信頼している家庭内デバイスだけではなくなります。このPCが会社のネットワークやカフェのWi-Fi、隔離されていない公共ネットワークに接続している場合は、このフィールドを有効にする前に必ず認証設定(後述)を確認してください。そうしないと、出口の権限をそのセグメント全体に渡してしまうことになります。

ゼロから家庭内複数デバイス共有出口を構築する

家庭ネットワークのシナリオを例にすると、完全な手順はおおよそ4ステップに分かれます。

  1. ホスト機の内部IPを確認する

    Windowsではコマンドプロンプトで ipconfig を実行し、macOSまたはLinuxでは ifconfig または ip addr を実行して、192.168.x.x10.x.x.x のような形式のアドレスを見つけます。このアドレスは比較的固定しておく必要があります――ルーターの管理画面でこのデバイスのMACアドレスに固定IPを割り当てること(通常「静的DHCP」または「IP-MACバインディング」と呼ばれます)を推奨します。そうしないと、ルーターの再起動後にこのPCのIPが変わり、他のデバイスのプロキシ設定もそれに合わせて変更する必要が出てきます。

  2. mixed-port と allow-lan を設定する

    Clashクライアントの設定ファイルに、先述の3行 mixed-port: 7890allow-lan: truebind-address: "*" を追加します。多くのGUIクライアントには対応するスイッチも用意されており、ファイルを手動で編集する必要はなく、設定パネルで「LAN接続」や「Allow LAN」といった項目を見つけて有効にすれば同じ効果が得られます。

  3. ローカルのファイアウォールを許可する

    WindowsのシステムファイアウォールやmacOSのアプリケーションファイアウォールは、デフォルトで外部デバイスからの未知のポートへのアクセス要求をブロックします。Clashが7890ポートで待ち受けていても、ファイアウォール側で許可していなければ、LAN内のデバイスは依然として接続できません。Windowsでは「ファイアウォールを介したアプリの許可」でClashプログラムのプライベートネットワークアクセス権限を許可する必要があります。macOSでは初回リスニング開始時に通常システムの許可プロンプトが表示されるので、許可を選択してください。

  4. 他のデバイスでプロキシアドレスを入力する

    スマートフォンやタブレットではWi-Fi詳細画面のプロキシ設定で「手動」を選び、このPCの内部IPとポート7890を入力します。スマートテレビやゲーム機のネットワーク設定にも通常similar「HTTPプロキシ」オプションがあり、入力方法は同じです。設定完了後にウェブページを開いてテストし、正常に読み込まれれば接続経路が通っていることが確認できます。

混合ポートの認証:セグメント全体に裏口を開けない

allow-lan を有効にした後、何の制限もかけなければ、同じセグメント内のすべてのデバイス(知らない隣人のフリーライドデバイスや、会社の他の同僚のPCなど)は理論上このPCのClashにトラフィックを転送でき、あなたのノードのトラフィックを無断で利用したり、極端な場合はあなたが制御できないネットワーク行為に使われたりする可能性があります。混合ポートにユーザー名とパスワードによる認証層を追加することは、低コストな防御手段です。

authentication:
  - "homeuser:a-strong-password"

この設定を有効にすると、デバイス側でプロキシを設定する際にこのユーザー名とパスワードを追加で入力しないと認証を通過できなくなります。多くのシステムのプロキシ設定画面ではプロキシアドレスを入力後にアカウントとパスワードの入力ダイアログが表示され、この機能に対応しています。認証ダイアログに対応していないクライアント(一部のテレビボックスのネットワーク設定メニューなど)では、認証付きのプロキシを利用できない場合があり、このようなデバイスはセグメントの隔離に依存するか認証制限を緩めるしかなく、利便性と安全性のバランスを取る必要があります。

より徹底した隔離の考え方として、Clashをホストするこのマシンを独立したVLANやルーターの「ゲストネットワーク」以外の信頼できるセグメントに置き、家庭内で信頼できるデバイスだけがこのセグメントに到達できるようにする方法もあります。これなら認証を設定しなくても外部の未知のデバイスに公開されることはありません。ルーターのネットワーク構成をカスタマイズできるユーザーであれば、この方式はアカウントとパスワードだけに頼るよりも安全です。

LAN共有時によくある接続失敗のトラブルシューティング

実際の運用で最も多く遭遇する問題は、設定ファイルの記述ミスではなく、ネットワーク環境の細部が見落とされていることです。以下、トラブルシューティングの優先順位で列挙します。

  • 2台のデバイスが同一セグメントにない:ルーターがAPアイソレーション(ゲストWi-Fiでよく見られる)を有効にしている場合や、スマートフォンが同じWi-Fiではなく5Gモバイルネットワークに接続している場合、内部IPは互いに到達不可能です。この場合、設定をどう変更しても接続できないので、まず両方のデバイスが同じLAN内にあることを確認してください。
  • ファイアウォールが受信接続をブロックしている:クライアントソフト側でallow-lanを有効にしていても、システムファイアウォールのデフォルトルールが優先してブロックする場合があります。Clashプロセスまたは7890ポート専用の受信許可ルールを個別に追加する必要があります。
  • bind-address が誤ったネットワークインターフェースにバインドされている:設定に * ではなく具体的なIPを指定し、そのIPに対応するインターフェースが現在ネットワークに接続していない場合(例えば仮想マシン用のネットワークカードが同時にインストールされている場合など)、待ち受けが「死んだ」インターフェースに落ちてしまい、外部デバイスは当然接続できません。
  • クライアント画面のスイッチと設定ファイルが競合している:一部のクライアントはGUI上で独立した「LAN接続」スイッチを保持しており、サブスクリプション設定ファイル内のフィールドとは別のロジックで動作しています。設定ファイルは正しく書けているのに画面上のスイッチが連動して有効になっていない場合も接続失敗につながるため、クライアント画面上の実際のスイッチ状態を再確認することを推奨します。
  • ポートが他のプログラムに占有されている:このPCで他のプロキシソフトやデータベースサービスが7890ポートを占有している場合、Clash起動時に待ち受けに失敗するか別のポートに切り替わります。クライアントのログを確認して、実際に待ち受けているポートがデバイス側で入力した値と一致しているか確認してください。

混合ポート共有と他の振り分け方式との関係

補足しておくと、mixed-port 経由で共有される接続はシステムプロキシという経路を通っており、ルールグループの分類やDNS処理などのロジックはすべてホスト機(Clashが動いているそのPC)のコア内で完結します。接続するスマートフォンやテレビボックス自体はClashの概念を理解する必要はなく、単にトラフィックをそのままプロキシポートに渡し、処理結果をそのまま受け取るだけです。これはデバイス本体にClashクライアントをインストールしてTUNモードを有効にするのとは異なる考え方です。TUNモードはローカルマシンの全ネットワーク層トラフィック(UDPやプロキシプロトコルに対応していないプログラムを含む)を引き受けますが、LAN共有は本質的にアプリケーション層のHTTP/SOCKS5プロキシ転送にすぎません。システムの下層ネットワークスタックを強制的に使い、プロキシ設定を認識しない一部のアプリやゲームは、デバイスが共有プロキシに接続していても、それを迂回して直接接続してしまう可能性があります。

そのため、LAN共有方式はブラウザや動画系クライアントなど、システムプロキシ設定を遵守するシナリオをカバーするのに適しています。あるテレビボックスやゲーム機の特定アプリが接続できず、プロキシを迂回してしまう場合、多くはそのアプリがシステムプロキシ設定を読み込まないことが原因であり、Clashの設定ミスではありません。このような場合は、そのデバイス自体がグローバル透明プロキシに対応しているか、ルーターレベルでのバイパスルーター方式でなければ根本的な解決は難しく、これが多くの家庭がルーター上に直接コアをデプロイする選択に至る理由でもあります。

まとめ

mixed-port は Clash がどのポートでHTTPとSOCKS5の両接続を同時に受け入れるかを決め、allow-lan はそのポートをLAN内の他デバイスに開放するかどうかを決めます。両者を bind-address と認証フィールドと組み合わせることで、1台のPCが家中のデバイスの出口ゲートウェイになります。LANアクセスを有効にする前に、使用しているネットワーク環境が信頼できるかどうかを確認し、ポートにアカウントとパスワードによる認証を追加することが最低限の防御策です。

Clash クライアントを入手する

サブスクリプション設定、ルール、LAN共有設定を一台のデバイスで最初に動かしてみたいですか?ダウンロードページで対応するプラットフォームの公式クライアントを入手するか、インストールガイドでゼロからの設定手順を確認してください。

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