Clash 포트 충돌 오류 해결법: 점유 프로세스 확인과 mixed-port 변경
bind 실패 오류는 대부분 7890 등 포트가 다른 프로그램에 점유된 경우입니다. Windows, macOS, Linux별 점유 프로세스 확인 명령어와 설정 파일·클라이언트에서 포트를 변경하는 방법을 정리했습니다.
"포트가 이미 사용 중"이라는 오류가 뜨는 이유
Clash 코어가 실행될 때는 로컬에서 몇 개의 포트를 열어야 합니다. 혼합 포트(mixed-port, 기본값 보통 7890)는 HTTP와 SOCKS5 요청을 동시에 처리하고, 외부 컨트롤러 포트(external-controller, 보통 9090)는 패널이 상태를 조회할 때 쓰이며, 일부 클라이언트는 HTTP 전용 포트를 별도로 열기도 합니다. 이 포트들 중 하나라도 시스템의 다른 프로그램이 이미 점유하고 있으면 코어는 bind 시스템 호출에 실패하며, 로그에는 보통 address already in use 또는 bind: 拒绝访问와 유사한 문구가 나타납니다. 클라이언트 화면에서는 코어 실행 실패, 프록시 스위치가 켜지지 않음, 또는 실행 후 몇 초 지나 자동으로 "미실행" 상태로 돌아가는 현상으로 나타납니다.
이런 충돌의 흔한 원인은 세 가지입니다. 첫째, PC에 두 개 이상의 프록시 툴(예: Clash와 다른 V2Ray 클라이언트)이 동시에 설치된 경우. 둘째, 이전 Clash 프로세스가 정상적으로 종료되지 않아 남은 잔류 프로세스가 포트를 계속 점유하는 경우. 셋째, 극히 드물게 일부 시스템 서비스나 라우터 소프트웨어가 비슷한 포트 범위를 사용하는 경우입니다. 해결 순서는 명확합니다. 먼저 어떤 프로세스가 포트를 점유하고 있는지 확인한 뒤, 프로세스를 종료할지 포트를 변경할지 결정하면 됩니다.
1단계: 충돌한 포트 번호 확인하기
클라이언트 로그나 백그라운드 창에는 보통 문제가 된 포트 번호가 표시됩니다. 흔히 쓰이는 기본값을 먼저 확인해보세요.
| 용도 | 흔히 쓰이는 기본 포트 | 설명 |
|---|---|---|
| 혼합 포트 mixed-port | 7890 | HTTP + SOCKS5 겸용, 브라우저와 시스템 프록시가 주로 이 포트를 가리킴 |
| 외부 컨트롤러 external-controller | 9090 | 패널과 API가 실행 상태를 조회할 때 사용 |
| SOCKS 전용 포트 socks-port | 7891 | 일부 구버전 설정에서 별도로 분리해 사용 |
| HTTP 전용 포트 port | 7892 | 일부 구버전 설정에서 별도로 분리해 사용 |
로그에 포트 번호가 직접 표시되지 않는다면 위 표를 하나씩 확인하되, 대부분의 클라이언트가 기본으로 사용하는 혼합 포트인 7890을 먼저 점검하는 게 가장 확률이 높습니다.
Windows: 점유 프로세스 찾아서 종료하기
명령 프롬프트나 PowerShell을 열고 netstat과 포트 번호로 리스닝 상태를 확인합니다.
netstat -ano | findstr "7890"
출력 결과 마지막 열이 PID(프로세스 번호)입니다. 이 값으로 프로세스 이름을 역으로 조회합니다.
tasklist | findstr "PID번호"
무관한 프로그램이 점유한 게 확인되면 바로 해당 프로세스를 종료할 수 있습니다.
taskkill /PID PID번호 /F
역으로 조회한 프로세스 이름이 Clash 관련(예: clash-verge.exe, mihomo.exe)이라면 이전 실행이 정상 종료되지 않고 남은 잔류 프로세스라는 뜻입니다. 종료 후 클라이언트를 다시 실행하면 되고, 포트를 바꿀 필요는 없습니다.
macOS: lsof 한 줄로 프로세스 찾기
macOS에서는 lsof가 가장 널리 쓰입니다. 포트로 바로 필터링할 수 있습니다.
lsof -i :7890
출력의 COMMAND 열이 포트를 점유한 프로그램 이름이고, PID 열이 프로세스 번호입니다. 종료하려면 다음과 같이 실행합니다.
kill -9 PID번호
포트를 점유한 것이 시스템 서비스이거나 함부로 끄기 곤란한 프로그램(예: 패킷 캡처 도구, 개발 환경의 로컬 프록시)이라면 다른 프로그램을 건드리지 말고 Clash 쪽 포트를 바꾸는 것이 우선입니다.
Linux: ss, lsof, fuser 중 하나 선택
Linux 환경에서는 ss(구식 netstat보다 빠름) 사용을 권장합니다. 명령어는 다음과 같습니다.
ss -tulnp | grep 7890
ss가 설치되어 있지 않다면 lsof를 사용할 수 있으며 사용법은 macOS와 동일합니다.
lsof -i :7890
또는 fuser로 바로 찾아서 종료할 수도 있습니다.
fuser -k 7890/tcp
systemd로 mihomo 코어를 상시 실행하는 환경이라면 mihomo 서비스 인스턴스를 두 개 띄운 건 아닌지도 확인해야 합니다. 하나는 부팅 시 자동 실행되고 다른 하나는 수동으로 또 실행해서 서로 포트를 다투는 경우가 전형적인 자충수 사례입니다.
포트 변경 방법 1: 설정 파일 직접 수정
다른 프로그램을 건드리기 싫다면 더 간단한 방법은 Clash 쪽 포트를 옮기는 것입니다. 설정 파일(보통 config.yaml)에서 포트 관련 항목을 찾아 점유되지 않은 값으로 바꾸면 됩니다.
mixed-port: 7891
external-controller: 127.0.0.1:9091
allow-lan: false
1024~65535 범위 안에서 현재 사용되지 않는 임의의 값을 선택하면 됩니다. 기존 값에 1이나 100을 더하는 방식이 기억하기 쉬워 흔히 쓰입니다. 수정 후 저장하고 설정을 다시 불러오거나 클라이언트를 재시작하면 적용됩니다.
포트 변경 방법 2: 클라이언트 화면에서 직접 수정
주요 그래픽 클라이언트(Clash Verge Rev, Clash for Windows 계열 파생판, ClashX Meta 등)는 모두 포트 설정 화면을 제공합니다. 보통 "설정" 또는 "일반" 항목에서 혼합 포트, 컨트롤 포트 입력란을 찾을 수 있으며, 새 값을 입력하고 저장하면 클라이언트가 자동으로 하위 설정을 다시 작성하고 코어를 재시작합니다. yaml 파일을 직접 손댈 필요는 없습니다. 변경 후에는 시스템 프록시 설정과 브라우저 확장 프로그램에 입력된 포트 번호도 함께 확인하세요. 세 곳의 값이 서로 맞지 않는 것이 전환 후 "적용이 안 되는 것처럼 보이는" 가장 흔한 원인입니다.
변경 후 정상 적용됐는지 확인하는 방법
조회 명령어를 다시 실행해서 새 포트가 다른 프로그램이 아니라 Clash 자체에 정상적으로 점유되어 있는지 확인합니다.
lsof -i :7891
명령 결과에 나오는 프로세스 이름은 clash 또는 mihomo 관련이어야 합니다. 그 다음 브라우저로 몇몇 사이트에 접속해 연결 상태를 테스트하거나, 패널에서 트래픽 그래프가 정상적으로 움직이는지 확인해 프록시 경로가 정상 작동하는지 검증하세요. 외부 컨트롤러 포트도 변경했다면 패널 주소창의 포트 번호도 함께 업데이트해야 합니다. 그렇지 않으면 패널에서 연결 실패가 표시됩니다.
다시 충돌하지 않도록 하는 두 가지 습관
- 현재 사용 중인 프록시 클라이언트 하나만 부팅 시 자동 실행 목록에 남기고, 사용하지 않는 예전 클라이언트는 삭제하거나 종료해 백그라운드 잔류 프로세스가 포트를 다툴 확률을 줄이세요.
- 두 개의 프록시 툴을 동시에 돌려 비교 테스트를 자주 해야 한다면, 미리 한쪽 포트를 다른 값으로 고정해두고 메모해두는 것이 좋습니다. 매번 감으로 추측하지 마세요.
포트 충돌은 본질적으로 자원 선점 문제로, 설정 오류나 구독 만료와는 성격이 다른 문제입니다. 이 둘을 섞어서 생각하지 마세요. 먼저 로그의 오류 문구를 확인하고, 어떤 프로세스가 포트를 점유했는지 찾은 뒤, 종료할지 포트를 바꿀지 결정하면 대부분 이 세 단계로 해결됩니다.