Clashのポート競合を解決:プロセス特定とmixed-port変更方法

bind: address already in use エラーの対処法。netstatとlsofで7890番ポートを使用中のプロセスを特定し、終了すべきか、ポート変更すべきかを判断。変更後のシステムプロキシ設定の同期手順も解説。

U1

エラーの意味を理解する:bind: address already in use

ポート · mixed-port · リッスン失敗

Clashクライアント(および Clash Meta / mihomo カーネルをベースとした各種派生クライアント)は起動時、システムやブラウザから転送されるプロキシ通信を受け取るために、ローカルで1つまたは複数のポートをリッスンします。最も一般的なのがmixed-port(混合ポート)で、既定値は通常7890です。HTTPとSOCKS5の両プロトコルの接続を同時に受け付け、以前のようにport(HTTP用)とsocks-port(SOCKS5用)を別々に設定する方式に代わって使われています。これ以外にも、管理パネルとの通信に使うexternal-controllerポートがあり、こちらは9090がよく使われます。

クライアントが起動時にこれらのポートをバインドしようとした際、そのポートが既に別のプロセスに使用されていた場合、OSはbind: address already in useというエラーを返し、起動が中断されたり接続失敗の表示が出たりします。これはOSレベルのリソース排他制御によるもので、同一のTCPポートは同時に1つのプロセスしかリッスンできず、先に確保したプロセスが優先され、後から来たプロセスは拒否されます。

ヒント

ポート競合とサブスクリプションの失効・ノード接続不可は全く別の問題です。前者はクライアント自体が初期化できていない状態、後者はクライアントは正常に動作しているがプロキシノードに接続できない状態です。bind関連のエラー文言が表示された場合、ポート絡みの問題だとほぼ確定できるので、サブスクリプションやノードから調べる必要はありません。

U2

3ステップでポート占有プロセスを特定する

WINDOWS / MACOS / LINUX

OSによってポート使用状況を確認するコマンドは異なりますが、考え方は共通です。まずポート番号からプロセスID(PID)を特定し、そのPIDから実際のプロセス名を逆引きして正体を確認します。

Windows

コマンドプロンプトまたはPowerShellを開いて次を実行:

netstat -ano | findstr :7890

出力の最後の列の数字がPIDです。例えば12480と表示されたら、続けて次を実行:

tasklist /FI "PID eq 12480"

これでポートを使用しているプロセス名が確認できます。よくあるのは残留したclash.execlash-verge.exe、他のプロキシソフトの実行ファイル、あるいは一部セキュリティソフトの転送コンポーネントです。

macOS / Linux

macOSと大半のLinuxディストリビューションにはlsofが標準搭載されています。次を実行:

lsof -i :7890

出力のCOMMAND列がプロセス名、PID列がプロセス番号です。lsofが入っていない場合、Linuxでは以下も使えます:

netstat -anp | grep 7890
# または新しめの ss コマンドを使用
ss -ltnp | grep 7890

netstat -anpは一部のディストリビューションではsudo権限がないとプロセス名が表示されず、PID列が空欄になる点に注意してください。

コマンドOS確認すべき出力列
netstat -anoWindowsローカルアドレス、PID
tasklist /FIWindowsプロセス名、PID
lsof -i :ポート番号macOS / LinuxCOMMAND、PID
ss -ltnpLinuxローカルアドレス、プロセス情報
U3

プロセスを終了するかポートを変更するか:3つの典型パターン

判断基準

ポートを占有しているプロセスが分かったら、すぐに強制終了するのではなく、まずそれが何者で、なぜ動いているのかを見極めてから対処方法を決めましょう。

  1. Clash自身の残留プロセスの場合。前回クライアントを終了した際にウィンドウは閉じたがバックグラウンドプロセスが完全に終了していなかった、あるいはシステムクラッシュ後にゾンビプロセスが残ってしまった、というケースでよく見られます。この場合はそのプロセスを終了してクライアントを再起動するだけでよく、設定を変更する必要はありません。
  2. 常駐している別のプロキシ/VPNツールの場合。複数のプロキシクライアントを併用している、あるいは会社から強制インストールされたVPNコンポーネントが同じポートを長期的に使用しているケースです。こうしたプロセスは意図的に稼働しているものが多く、無理に終了すると他の機能に影響が出る可能性があります。より安全なのはClash側のポートを変更し、以後起動するたびに手動対処する手間をなくすことです。
  3. システムサービスやコンテナのポートマッピングの場合。ルーティングソフトやDockerコンテナ、ローカルの開発用サービスが偶然同じポート帯を使っていることがあります。こうしたポートは安易に終了できないことが多いため、こちらもClash側のポートを変更して回避するのがおすすめです。
注意

パソコンを何度再起動してもポート競合が繰り返し発生する場合、「一時的な残留プロセス」の可能性はほぼ排除できます。別のプログラムがそのポートを固定的にリッスンしていることを意味するので、毎回プロセスを終了するよりポートを変更するほうを優先すべきです。

U4

Clashのmixed-portを変更する手順

YAML設定 / クライアント画面

多くのGUIクライアントにはポート設定の項目があり、通常は「設定」または「基本」ページからmixed-portの値を直接変更でき、保存すればクライアントが自動的にリッスンを再開します。対応する設定項目がない場合や設定ファイルを直接編集する場合は、YAML内の以下の行を探して修正してください:

mixed-port: 7891
external-controller: 127.0.0.1:9091

既定の7890を、現在使用されていない任意のポート番号に変更します。他の一般的なソフトと衝突しにくい789117890などがよく選ばれます。設定ファイルが旧形式でmixed-portではなくport(HTTP用)とsocks-port(SOCKS5用)を個別に指定している場合は、両方とも変更し、かつ2つの値が重複しないように確認してください。重複しているとやはりバインドに失敗します。

変更後は必ずクライアントを完全に再起動してください(設定の再読み込みだけでは不十分です)。ポートのリッスンはプロセス起動時に行われるため、ホットリロードではポートの再バインドが行われないことが多いです。

U5

ポート変更後はシステムプロキシ設定も同期する

システムプロキシ / PAC / 環境変数

Clashのポートを変更した際、以前は「システムプロキシ」モードで接続していた場合(TUNモードで全トラフィックを引き受けていない場合)、システム側に記録されているプロキシポートも同時に変更する必要があります。そうしないとブラウザや他のアプリが古いポートにリクエストを送り続け、接続が拒否されてしまいます。

export all_proxy=http://127.0.0.1:7891
export http_proxy=$all_proxy
export https_proxy=$all_proxy

PAC自動設定スクリプトやOSの「自動検出」設定を使っている場合、通常はポートを手動で変更する必要はありませんが、変更後は一度ブラウザでサイトにアクセスし、プロキシが実際に有効になっているか確認しておくと、ポート変更後に気づかないままプロキシが無効化されている事態を避けられます。

U6

見落としがちな2つの注意点

よくある誤解

1点目は、mixed-portだけを変更してexternal-controllerのポートを同期させていない場合、9090/9091も偶然使用中だと管理パネル(Dashboard)が開かなくなりますが、プロキシの転送機能自体は正常に動作しているという点です。「また設定が壊れた」と誤判断しないよう注意してください。2点目は、一部のクライアントはポート番号をローカルキャッシュや設定のスナップショットに保存していることがあり、YAMLファイルを直接編集してもクライアントが古い値をキャッシュから読み込んでしまう場合があります。この場合はクライアント側で一度キャッシュを削除するか設定を再インポートし、新しいポートが確実に反映されるようにしてください。

警告

プロセスを終了する前に必ずプロセス名を確認してください。PIDだけを見て安易にシステムの重要プロセスにtaskkillkill -9を実行しないよう注意しましょう。見慣れないプロセスかどうか判断できない場合は、まず実行ファイル名を検索してから終了するか決めてください。

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

ポート競合の対処が完了したら、既知の不具合による再調査を避けるため、公式チャネルから最新版クライアントを利用することをおすすめします。

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