대부분의 GUI 클라이언트에는 이미 그래픽 인터페이스가 내장되어 있지만, 실시간 연결 목록, 각 연결의 트래픽, 노드 지연 곡선을 더 직관적으로 보고 싶다면 웹 대시보드를 연결하는 것이 로그를 뒤지는 것보다 훨씬 편리합니다. 이 모든 것의 입구가 바로 external-controller입니다.

external-controller 활성화하기

이를 활성화하면 로컬에 RESTful API 서비스가 열리며, 웹 대시보드는 이 인터페이스를 통해 코어의 실시간 상태를 읽어옵니다. 이 자체는 트래픽 전달과는 무관합니다.

external-controller: 127.0.0.1:9090 secret: "접근 키를 설정하세요"
external-controller의 리스닝 주소를 0.0.0.0으로 바꿔 LAN 내 다른 기기에서 접근할 수 있게 한다면, 반드시 secret도 함께 설정하세요. 그렇지 않으면 그 포트에 접근할 수 있는 누구든 여러분의 프록시 설정을 읽거나 심지어 수정할 수 있습니다.

external-ui: 정적 패널을 내장하기

일부 코어는 external-ui 필드를 지원하는데, 패키지화된 패널 정적 리소스 디렉터리를 지정하면 http://127.0.0.1:9090/ui에 접속하는 것만으로 바로 패널을 열 수 있습니다. 추가 배포가 필요 없습니다.

external-ui: ./ui

패널에서 볼 수 있는 것

모듈내용
Proxies모든 노드와 프록시 그룹, 확인/수동 전환/속도 테스트 실행 가능
Connections현재 활성화된 모든 연결: 목적지 주소, 사용 중인 노드, 사용한 트래픽, 연결 시간
Logs실시간 로그 스트림, 규칙 매칭, 연결 생성/종료 등의 이벤트
Rules현재 로드된 모든 규칙과 규칙 세트, 매칭 순서를 확인하기 편리함
Traffic실시간 업/다운로드 속도 그래프, 현재 대역폭 사용량을 직관적으로 확인

흔히 쓰는 패널 프로젝트는 어떻게 고를까

오픈소스 커뮤니티에는 바로 연결해 사용할 수 있는 성숙한 웹 대시보드 프로젝트가 여러 개 있습니다. 대부분 순수한 프런트엔드 정적 페이지이며 배포 방식도 간단합니다. 패키지화된 정적 리소스를 다운로드해 external-ui를 해당 디렉터리로 지정하거나, 브라우저로 해당하는 온라인 버전 페이지를 직접 열어 자신의 external-controller 주소와 secret을 입력하면 연결됩니다. 선택할 때 주로 봐야 할 두 가지는, 인터페이스가 명확하고 직관적인지, 그리고 현재 사용 중인 코어 버전의 API 필드를 지원하는지입니다(코어 브랜치마다 API가 다를 수 있으며, 패널 버전이 너무 오래되면 일부가 제대로 표시되지 않을 수 있습니다).

패널 보안 강화 권장 사항

  • 반드시 secret을 설정하세요: 127.0.0.1에서만 사용하더라도, 키를 설정하는 습관을 들이면 나중에 리스닝 주소를 실수로 바꿨을 때의 위험을 피할 수 있습니다.
  • 컨트롤 포트를 공개 인터넷에 노출하지 마세요: 정말로 원격 접근이 필요하다면, external-controller를 공개 IP에 직접 리스닝시키기보다 SSH 터널이나 VPN을 통해 로컬 포트로 전달하는 방식을 우선하세요.
  • 패널의 출처를 정기적으로 확인하세요: 공식 저장소나 잘 알려진 오픈소스 프로젝트의 패널 리소스만 사용하고, 출처가 불명확한 서드파티 빌드는 피하세요.

휴대폰에서도 패널을 쓸 수 있을까

가능합니다. 원리는 완전히 동일합니다. 휴대폰과 Clash를 실행 중인 기기가 같은 LAN에 있다면, 휴대폰 브라우저에서 http://코어가 실행 중인 기기의 LAN IP:9090/ui(external-controller의 리스닝 주소를 0.0.0.0으로 바꾸고 secret도 함께 설정해야 함)에 접속하면 같은 패널을 열 수 있습니다. 많은 사람이 이를 코어를 "원격으로 조작"하는 방법으로 사용합니다. 컴퓨터에서 코어를 실행하고, 휴대폰에서 패널을 열어 연결과 트래픽을 확인하는 식으로, 기기를 오가며 전환할 필요가 없습니다.

패널로 문제를 해결하는 방법

  1. 특정 사이트가 느리거나 접속되지 않을 때: Connections에서 해당 연결을 찾아 어느 노드를 쓰고 있는지 확인하고, 그 노드만 따로 지연을 테스트해봅니다.
  2. 규칙 매칭이 잘못된 것 같을 때: Logs에서 규칙 매칭 로그 레벨을 열어, 특정 도메인이 실제로 어떤 규칙에 매칭되는지 실시간으로 관찰합니다.
  3. 트래픽이 비정상적으로 높을 때: Connections를 트래픽 기준으로 정렬해, 어떤 연결/프로세스가 대량의 대역폭을 소비하고 있는지 빠르게 찾아냅니다.
클라이언트 자체에 패널 진입점이 없더라도, 브라우저로 일반적인 오픈소스 웹 대시보드 프로젝트를 직접 열어 자신의 external-controller 주소와 secret을 입력하면 연결해 사용할 수 있습니다.

패널과 클라이언트 기본 인터페이스는 어떤 차이가 있을까

많은 사람이 클라이언트에 이미 그래픽 인터페이스가 있는데 왜 굳이 웹 대시보드를 추가로 연결해야 하는지 궁금해합니다. 사실 둘의 역할은 조금 다릅니다. 클라이언트 내장 인터페이스는 보통 크게 단순화되어 "원클릭 연결", "빠른 노드 전환" 같은 일상적으로 가장 많이 쓰는 기능을 앞에 내세우고, 대부분의 내부 세부 사항은 숨깁니다. 반면 External Controller + 웹 대시보드는 코어의 가장 원시적인 실행 상태를 노출하며, 필드가 더 풍부하고 갱신도 더 실시간이며, 인터페이스를 통한 추가 개발(트래픽 데이터를 정기적으로 가져와 통계를 내는 스크립트 등)도 지원합니다. 일상적인 사용에는 클라이언트 기본 인터페이스로 충분하며, 더 깊은 문제 해결이나 자동 모니터링이 필요할 때만 추가로 패널을 연결할 가치가 있습니다.

인터페이스로 간단한 자동 모니터링 하기

External Controller가 제공하는 것은 표준 RESTful 인터페이스입니다. 즉 기존 웹 대시보드로 보는 것에 그치지 않고, 직접 스크립트를 작성해 정기적으로 인터페이스를 호출해 트래픽 데이터를 기록하고 장기 통계를 내거나, 특정 노드가 연속으로 이상을 보일 때 알림을 트리거할 수도 있습니다. 이는 응용 단계의 활용법으로 필수는 아니지만, 자신의 네트워크 사용 현황을 더 세밀하게 모니터링하고 싶다면 탐구해볼 만한 방향이며, 패널을 반복적으로 수동으로 열어 확인하는 것보다 훨씬 편리합니다.

여러 기기에서 하나의 패널 공유하기

집에 여러 기기(컴퓨터, 라우터, NAS)가 있고 각각 독립된 Clash 인스턴스를 실행하고 있다면, 이론적으로는 각 인스턴스에 독립된 external-controller 포트를 하나씩 배정하고, 같은 패널 프로젝트에서 연결 주소만 바꿔가며 각각을 확인할 수 있습니다. 인스턴스마다 별도의 패널을 배포할 필요가 없습니다. 이런 "하나의 패널로 여러 인스턴스를 관리"하는 방식은 라우터를 서브 게이트웨이로 쓰거나 여러 노드를 배포한 환경에서 흔히 볼 수 있습니다.

정리

External Controller는 본질적으로 코어가 외부에 공개하는 "관찰 가능성" 인터페이스로, 추가적인 성능 비용 없이 연결 수준의 상세 데이터를 얻을 수 있습니다. 패널과 함께 사용하면 "속도가 느려진 것 같다", "잘못된 노드를 쓰고 있는 것 아닐까" 같은 모호한 의문들을 직접 관찰하고 검증할 수 있는 구체적인 현상으로 바꿀 수 있습니다.