Clash の Mixed Port と LAN 内プロキシ共有設定:allow-lan 設定と端末接続の実践

mixed-portallow-lan という2つの設定項目の役割を解説し、スマホやタブレット、テレビボックスなど同一 LAN 内の端末から1台の機器の Clash プロキシを共有する方法を実践形式で紹介。bind-address の設定やファイアウォールの開放、セキュリティ上の注意点も合わせて解説します。

1台の機器のプロキシを共有する理由

Linux マシンやルーターで Clash を1台構築したあと、スマホ・タブレット・テレビボックス・ゲーム機にまでクライアントを個別インストールするのは手間がかかるうえ、契約中のプロキシサービスのトラフィックも余計に消費してしまいます。こうした端末はシステムがクローズドでプロキシクライアントを導入できなかったり、そもそも YAML 設定のインポートに対応していなかったりすることが多いのが実情です。現実的な解決策は、すでに動いている1台の機器を LAN 内の「プロキシ出口」として使い、他の端末はシステムのネットワーク設定に IP アドレスとポート番号を入力するだけで、同じノードとルールをそのまま使い回せるようにすることです。端末ごとにサブスクリプションを設定し直す必要はありません。これを実現するために関わってくる設定項目は基本的に2つだけです。mixed-port はどのポートで待ち受けるかを決め、allow-lan はそのポートをローカルのみに限定するかどうかを決めます。

mixed-port 設定の役割

初期バージョンの Clash では、port で HTTP プロキシ用ポート、socks-port で SOCKS5 プロキシ用ポートをそれぞれ別々に開く必要があり、両者は独立していました。mixed-port は後から導入された混合ポートで、1つのポートで HTTP(S) プロキシリクエストと SOCKS5 プロキシリクエストの両方を受け付け、クライアントが送るプロトコルに応じて自動的に振り分けられるため、あえて区別する必要がありません。現在主流の Clash Meta(mihomo)コアではデフォルトで mixed-port が使われており、設定ファイル内に port/socks-port が残っているのは古いツールチェーンとの互換性維持のためです。

mixed-port: 7890
allow-lan: false
bind-address: "*"
mode: rule
log-level: info

上記が最も基本となる骨組みです。デフォルトでは allow-lanfalse になっており、Clash はループバックアドレス(127.0.0.1)のみを待ち受けます。つまりポートが開いていても LAN 内の他の端末からは接続できません。これはセキュリティを考慮したデフォルト値であり、不具合ではありません。

allow-lan と bind-address:LAN アクセスを許可するスイッチ

allow-lan は、ローカル以外のアドレスからの接続要求を Clash が受け付けるかどうかを決める設定です。これを true に変更すると、Clash は 127.0.0.1 に限定せず、LAN 内のネットワークインターフェース上のアドレスも待ち受けるようになります。bind-address はさらに、どのネットワークインターフェースのアドレスで待ち受けるかを指定するもので、デフォルト値の "*" は有線 LAN、Wi-Fi、仮想アダプタを含む、機器上のすべての利用可能なネットワークインターフェースを待ち受ける設定です。特定の1つのインターフェースだけに限定したい場合は、192.168.1.20 のように具体的な LAN 内 IP アドレスを指定できます。これにより、機器が他のネットワーク(仮想マシンの内部ネットワークや VPN アダプタなど)にも接続していても、プロキシポートは指定したインターフェースにのみ公開されます。

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

この2行を編集して保存したあとは、Clash コアを再起動するかクライアントで設定を再読み込みしないと変更が反映されません。デスクトップクライアントでは通常、設定詳細ページに「LAN 接続を許可」という専用スイッチがあり、これをオンにすると内部的には allow-lantrue に設定していることと同じで、実際に書き込まれる先はこの YAML ファイルです。

LAN 内端末の接続実践

まず、Clash を実行している機器の LAN 内での実際のアドレスを確認します。127.0.0.1 でも公開 IP アドレスでもない点に注意してください。

ip addr show | grep "inet "
# または
hostname -I

出力結果として LAN 内アドレスが 192.168.1.20、待ち受けポートが 7890 だったとします。続いて各端末での接続手順を見ていきます。

スマホ(Android/iOS)

  1. Clash を実行している機器と同じ Wi-Fi に接続します。
  2. システムの「Wi-Fi 設定」→ 接続中のネットワークの詳細 → プロキシ設定に進み、「手動」を選択します。
  3. サーバーアドレスに 192.168.1.20、ポートに 7890 を入力します。
  4. 保存後、ブラウザでサイトを開いてプロキシ経由になっているか確認します。ルールモードの場合は Clash のダッシュボードの接続ログと合わせて確認するとより確実です。

テレビボックス / スマートテレビ

多くのテレビ用 OS のネットワーク設定にも同様の手動プロキシ設定項目があり、通常は「設定 → ネットワーク → 詳細設定 → プロキシ」の中にあります。メーカーによるカスタム OS の中にはプロキシ設定の入口自体が用意されていないものもあり、その場合はルーター側で一括転送する方式に切り替えるか、テレビボックス上に設定ファイルのインポートに対応したクライアントを別途インストールする方法に戻すことを検討してください。

Linux / Windows / macOS 端末

デスクトップ環境では、システムのネットワーク設定のプロキシ項目に LAN 内の IP アドレスとポート番号を直接入力するだけで済みます。ブラウザ側で個別にプロキシを設定している場合は、アドレスを一致させておいてください。システムプロキシとブラウザプロキシが異なるポートを指していると、接続の混乱を招きます。

ファイアウォールの開放と接続確認

設定を変更したのに接続できない場合、十中八九はファイアウォールがポートをブロックしているのが原因で、Clash の設定自体に問題があるケースは少数です。まず Clash を実行している機器側で該当ポートを開放します。

# ufw(Debian/Ubuntu 系)
sudo ufw allow 7890/tcp

# firewalld(Fedora/RHEL 系)
sudo firewall-cmd --add-port=7890/tcp --permanent
sudo firewall-cmd --reload

ポートを開放したあとは、別の端末から nctelnet を使って、そのポートに到達できるか簡易チェックしてみましょう。

nc -zv 192.168.1.20 7890

接続成功と表示されればネットワーク層はすでに開通しています。それでもスマホ側でネットに繋がらない場合は、プロキシモード(グローバル/ルール)やノードの状態を再確認してください。逆に探索が即座にタイムアウトする場合は、ファイアウォールの規則が反映されていない、または bind-address が想定と異なるインターフェースにバインドされている可能性が高いため、まず bind-address を一時的に "*" に設定して範囲の問題を切り分けてみてください。

注意

ルーターのポートマッピング(ポート転送)機能は本記事の内容とは無関係です。LAN 内共有のために 7890 ポートを公開ネットワークに転送しないでください。LAN 内共有は同一ローカルネットワーク内で通信できれば十分であり、ポートを公開ネットワークに晒してしまうと、公開 IP アドレスを知っている誰もがあなたのプロキシ出口への接続を試みる可能性があります。

セキュリティ上の境界線とアクセス制御の提案

allow-lan をオンにすると、ゲスト用 Wi-Fi や不正に接続している端末、乗っ取られた IoT 機器なども含め、同一 LAN 内のすべての端末がデフォルトでこのポートに接続できるようになります。LAN 環境を完全には信頼できない場合は、以下のような対策を重ねて講じることをおすすめします。

  • 設定ファイルに authentication 項目を追加し、プロキシ接続にユーザー名とパスワードを設定します。認証されていない接続は拒否されます。
  • bind-address で漠然とした "*" ではなく、特定のネットワークインターフェースの具体的な IP アドレスに絞って公開範囲を最小限にします。
  • ルーター側で信頼できる端末専用の VLAN やゲスト分離を設定し、ゲスト用ネットワーク内の端末からプロキシポートが探索されないようにします。
  • 長期的な共有が不要な場合は、使い終わったら allow-lanfalse に戻し、常時オンの状態にしないようにします。
mixed-port: 7890
allow-lan: true
bind-address: 192.168.1.20
authentication:
  - "labuser:a-strong-password"

authentication を追加すると、接続する端末側のシステムプロキシ設定でも通常はユーザー名とパスワードの入力が必要になります。入力箇所は OS によって異なり、入力ミスがあると静かに失敗するのではなく接続自体が拒否されるため、接続できないときはまずこの項目を確認してください。

よくある接続トラブルの切り分け

LAN 内プロキシ共有がうまく動かない場合、原因はだいたい以下のいずれかに絞られます。順番に確認していけば大抵は解決します。

  • Wi-Fi には接続できるがプロキシが効かない:システムのプロキシ設定に入力したサーバーアドレスの数字を1桁間違えていないか確認してください。LAN 内 IP アドレスはルーターの再起動後に変わることがあるため、Clash を動かしている機器には静的 IP を割り当てるか、DHCP の予約設定をしておくことをおすすめします。
  • LAN 内の1台は繋がるが別の1台は繋がらない:繋がらない端末がゲスト用ネットワークや別セグメントの Wi-Fi に接続していて、Clash を動かしている機器と同じサブネットにないケースが多いです。この場合、ポートを探索できないのは当然の結果です。
  • 日中は使えるがルーター再起動後に使えなくなる:これも IP アドレスの変動が原因です。LAN 内アドレスを固定すれば一度で解決します。
  • 設定を変更しても反応がない:変更内容が Clash が実際に読み込んでいる設定ファイルに保存されているか(テンプレートやバックアップファイルではないか)を確認してください。変更後はコアの再起動、またはクライアントでの設定の再読み込みが必要です。

これらの項目を1つずつ確認し、先述のポート到達確認コマンドも併用すれば、LAN 内プロキシ共有の接続トラブルはほぼ特定できます。

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

LAN 内共有を検討する前に、まず1台の機器で Clash を正常に動作させる必要があります。ダウンロードページでは Linux、Windows、macOS、Android、iOS 向けクライアントを配布しています。

ダウンロードページへ 利用ガイドを見る
Clash をダウンロード