대부분의 GUI 클라이언트(Clash Verge, Clash for Windows 계열)는 이미 대시보드를 내장하고 있어 일상적인 사용에는 별도 설정이 거의 필요하지 않습니다. 하지만 Mihomo 코어를 직접 배포했거나, 트래픽을 더 강력하게 보여주는 서드파티 대시보드를 쓰고 싶다면 외부 제어를 수동으로 활성화하고 브라우저 대시보드 프로젝트와 함께 사용해야 합니다.
외부 제어란?
Clash 코어 자체는 설정에서 지정한 주소와 포트로 리스닝하는 RESTful API 서비스를 실행합니다. GUI 클라이언트, CLI 도구, 브라우저 대시보드는 본질적으로 모두 이 API를 통해 코어와 통신합니다——현재 노드 조회, 정책 그룹 전환, 실시간 로그 가져오기는 모두 이 API를 통해 이루어지며, 코어 자체를 재시작할 필요가 없습니다.
다시 말해, 코어는 실제 트래픽 전달을 담당하고 대시보드는 그 위에 얹힌 "계기판"일 뿐이며, 둘은 완전히 분리되어 있습니다. 그래서 노드 전환이나 DNS 캐시 초기화 같은 작업은 대부분의 대시보드에서 "즉시 적용"되며, 전체 설정 파일을 다시 불러올 필요가 없습니다.
외부 제어 활성화하기
설정 파일에 다음 두 줄을 추가하고 코어를 한 번 재시작하면 적용됩니다.
external-controller: 127.0.0.1:9090 secret: 'replace-with-a-strong-secret' # 대시보드 접속 키, 반드시 직접 변경하세요
external-controller는 대시보드가 연결할 주소와 포트이고, secret은 접속 키로 대시보드를 처음 연결할 때 입력해야 합니다. 내장 대시보드가 있는 GUI 클라이언트를 사용 중이라면 이 두 값은 보통 이미 설정되어 있어 설정 화면에서 바로 확인할 수 있으며, 설정 파일을 직접 수정할 필요는 없습니다.
리스닝 주소는 127.0.0.1로 유지하고, 0.0.0.0에 바인딩해 공용 인터넷에 노출하지 마세요——가장 쉽게 간과되지만 결과는 가장 심각한 부분입니다.
어떤 대시보드를 선택해야 할까?
| 대시보드 | 특징 | 적합한 사용자 |
|---|---|---|
| yacd | 가볍고 UI가 간결하며, 연결 목록과 트래픽 그래프가 핵심 기능 | 연결 상태만 간단히 확인하고 싶은 사용자 |
| metacubexd | 기능이 더 풍부하며 규칙 테스트, 구독 관리, 다양한 테마를 지원 | 대시보드에서 더 많은 일상 작업을 처리해 클라이언트 전환을 줄이고 싶은 사용자 |
| 클라이언트 내장 대시보드 | GUI 클라이언트와 통합되어 있어 별도 배포가 불필요 | 이미 Clash Verge / CFW 등의 GUI 클라이언트를 사용 중인 사용자 |
yacd와 metacubexd 모두 오픈소스 정적 웹 프로젝트로, 어떤 정적 서버에도 배포할 수 있고 브라우저에서 로컬 파일을 직접 열어서 사용할 수도 있습니다. 연결할 때는 앞서 설정한 external-controller 주소와 secret만 입력하면 됩니다.
대시보드에서 가장 많이 쓰는 세 가지 화면
- Connections(연결): 현재의 모든 연결을 실시간으로 나열하며, 대상 도메인, 매칭된 규칙, 사용 중인 노드를 확인할 수 있습니다. "왜 이 사이트가 직접 연결로 나가는지" 확인할 때 가장 유용합니다.
- Proxies(노드): 모든 정책 그룹과 노드 지연시간을 확인할 수 있고, 수동으로 노드를 전환하거나 속도 테스트를 실행할 수 있습니다. 클라이언트 내 노드 패널과 동일한 효과를 냅니다.
- Logs(로그): 코어의 실행 로그를 실시간으로 출력합니다. 규칙이 적용되지 않거나 구독 파싱에 실패했을 때 가장 먼저 확인해야 할 곳입니다.
보안 주의사항
외부 제어는 본질적으로 속도 제한이 없고 권한 단위도 매우 거친 관리 인터페이스입니다——접속 권한을 얻으면 이 Clash 인스턴스를 거의 완전히 장악하는 것과 같으며, 모든 연결 기록을 보고, 노드를 변경하고, 설정 속 민감한 정보까지 읽을 수 있습니다. 따라서:
- 리스닝 주소는 127.0.0.1로 유지해 로컬에서만 접속되도록 하세요. 원격 접속이 정말 필요하다면 포트를 직접 노출하지 말고 SSH 터널로 포트를 전달하는 방식을 우선하세요.
- secret은 충분히 복잡한 무작위 문자열을 사용하고, 생일이나 사용자 이름처럼 쉽게 추측할 수 있는 값은 피하세요.
- LAN 공유(allow-lan)를 활성화했다면 외부 제어 포트를 함께 LAN에 개방하지 마세요. 두 개의 리스닝 범위는 별도로 관리해야 합니다.
설정이 끝나면 대시보드를 열고 주소와 키를 입력하는 것만으로 실시간 연결 목록을 볼 수 있습니다. 설정을 바꿀 때마다 클라이언트를 재시작하고 노드를 하나씩 테스트하는 것보다, 이렇게 "보면서 조정하는" 방식이 훨씬 효율적입니다. 특히 규칙을 디버깅하거나 특정 사이트 접속 문제를 조사할 때 큰 효과를 발휘합니다.
여러 기기, 여러 코어를 나눠서 관리하는 방법
집 라우터, 상시 구동 중인 NAS, 노트북의 로컬 테스트 인스턴스처럼 여러 기기에서 동시에 Clash를 돌리고 있다면, 같은 대시보드로 주소를 하나씩 바꿔가며 접속하는 것은 번거롭습니다. 이런 경우 각 인스턴스의 external-controller에 서로 다른 포트를 설정하고, 대시보드에 여러 연결 프로필을 저장해두면 브라우저 즐겨찾기처럼 언제든 전환할 수 있어 매번 주소를 다시 입력할 필요가 없습니다.
또한 secret은 인스턴스마다 별도로 설정하는 것이 좋습니다. 편하다는 이유로 모두 같은 키를 쓰지 마세요——한 인스턴스의 키가 유출돼도 다른 인스턴스에는 영향이 없습니다. 라우터나 NAS에서 장기간 구동되는 인스턴스는 공격 노출 범위가 더 크므로 키 교체를 우선적으로 고려해야 합니다.
대시보드가 열리지 않을 때 문제 해결하기
대시보드 연결이 실패하는 경우는 대체로 다음 몇 가지에서 벗어나지 않습니다. 순서대로 확인하면 대부분 문제를 찾을 수 있습니다.
- 주소나 포트를 잘못 입력함: 대시보드에 입력한 주소, 포트가 설정 파일의 external-controller 값과 정확히 일치하는지 확인하세요. 프로토콜 접두사나 포트 번호가 빠지지 않았는지 주의하세요.
- secret 불일치: 설정 파일의 secret을 변경한 뒤 코어를 재시작하지 않으면 새 키가 적용되지 않아 대시보드가 계속 인증 실패를 표시합니다.
- 코어가 해당 주소에서 리스닝하지 않음: 대시보드를 다른 기기에서 접속하는데 코어의 external-controller가 여전히 127.0.0.1로 설정돼 있다면 로컬에서만 접속 가능하므로 외부 기기는 당연히 연결할 수 없습니다——앞서 리스닝 범위를 함부로 바꾸지 말라고 강조한 이유가 바로 여기에 있으며, 원격 접속이 필요하면 리스닝 주소를 직접 개방하지 말고 SSH 터널을 사용해야 합니다.
- 브라우저 크로스 오리진 제한: 일부 브라우저는 HTTP 페이지에서 로컬 주소로 접속하는 데 추가 제한을 둡니다. 연결이 브라우저에 의해 차단된다면 다른 브라우저로 바꾸거나 대시보드 프로젝트가 제공하는 로컬 배포 방식을 시도해 보세요.
이 항목들을 하나씩 확인하면 대부분의 연결 문제를 해결할 수 있습니다. 대시보드 자체는 복잡하지 않으며, "사용이 안 되는" 대부분의 경우는 대시보드나 코어 자체의 문제가 아니라 설정의 세부 사항에서 발생합니다.