Windows Mihomo Party 외부 컨트롤러 설정과 안전한 활성화 방법

Mihomo Party의 외부 컨트롤러 메뉴를 찾지 못했거나 Web 패널 연결에 실패했다면 이 가이드를 확인하세요. Windows에서 인증 정보를 설정하고 실제 API 응답까지 점검하는 순서로 설명합니다.

Windows에서 Mihomo Party의 외부 컨트롤러를 설정하면 별도의 Web 패널이나 관리 도구가 Mihomo의 상태를 조회하고, 프록시 그룹을 변경하며, 현재 연결 정보를 읽을 수 있습니다. 하지만 외부 컨트롤러는 단순한 웹페이지 주소가 아닙니다. 지정된 주소와 포트에서 API 서버를 열고, 필요하면 secret 인증까지 통과해야 하므로 주소·포트·인증 헤더 중 하나만 틀려도 연결에 실패합니다.

이 글에서는 Windows용 Mihomo Party를 기준으로 외부 컨트롤러 메뉴를 찾는 방법, 로컬 전용으로 안전하게 활성화하는 방법, Web 패널에 입력할 값, PowerShell에서 실제 API 응답을 확인하는 순서를 설명합니다. 클라이언트 버전에 따라 메뉴 이름이나 설정 화면의 배치는 조금 다를 수 있지만, 최종적으로 확인해야 할 핵심 값은 external-controllersecret입니다.

외부 컨트롤러가 하는 일

mihomo 커널은 프록시 연결을 처리하는 동시에 HTTP 기반의 외부 컨트롤러 API를 제공합니다. Mihomo Party 자체 화면도 내부적으로 이 API를 사용해 현재 모드, 프록시 그룹, 연결 수, 메모리 사용량과 로그를 표시합니다. 외부 컨트롤러를 활성화하면 다른 관리 패널이 같은 API에 접속해 설정 상태를 읽거나 일부 동작을 요청할 수 있습니다.

  • 상태 조회—커널 버전, 현재 모드, 업로드·다운로드 통계, 활성 연결을 확인합니다.
  • 프록시 그룹 변경—select 그룹의 현재 노드를 바꾸거나 url-test 그룹의 상태를 조회합니다.
  • 설정 점검—현재 로드된 설정, DNS 상태, 규칙 매칭 결과를 확인하는 데 사용합니다.
  • Web 패널 연결—브라우저 기반 패널이 mihomo API를 통해 대시보드 정보를 표시하도록 합니다.

여기서 외부라는 표현은 반드시 인터넷에 공개된다는 뜻이 아닙니다. 127.0.0.1에만 바인딩하면 같은 Windows 컴퓨터에서 실행 중인 프로그램만 접근할 수 있습니다. 반대로 0.0.0.0에 바인딩하면 모든 네트워크 인터페이스에서 접속을 받을 수 있으므로, Windows 방화벽과 공유기 설정에 따라 같은 네트워크의 다른 기기나 원격 사용자가 API 포트에 접근할 가능성이 생깁니다.

외부 컨트롤러 포트를 인터넷에 직접 공개하지 마세요

외부 컨트롤러는 프록시 그룹 변경과 연결 정보 조회 기능을 포함할 수 있습니다. 인증 secret만 믿고 0.0.0.0:9090을 인터넷에 노출하는 방식은 피해야 합니다. 별도 원격 관리가 필요하다면 먼저 VPN이나 SSH 터널처럼 인증된 통로를 구성하고, 기본 바인딩은 127.0.0.1:9090으로 유지하세요.

Mihomo Party에서 설정 메뉴 찾기

Mihomo Party의 버전과 테마에 따라 설정 화면의 명칭은 "외부 컨트롤러", "External Controller", "API", "External Controller API"처럼 다르게 표시될 수 있습니다. 먼저 Mihomo Party를 실행한 뒤 설정 아이콘 또는 톱니바퀴 메뉴를 열고, 일반 설정이나 고급 설정에서 컨트롤러 관련 항목을 찾습니다. Profiles 화면의 YAML 편집기에서 직접 값을 수정하는 방식도 있지만, GUI에 같은 항목이 있다면 GUI를 우선 사용하는 편이 오타와 설정 덮어쓰기 문제를 줄일 수 있습니다.

  1. Windows에서 Mihomo Party를 실행하고 트레이 아이콘이 정상적으로 표시되는지 확인합니다.
  2. 왼쪽 메뉴의 설정 또는 Settings를 연 다음 일반, 고급, Core 또는 mihomo 관련 영역을 차례로 살펴봅니다.
  3. 외부 컨트롤러 주소를 127.0.0.1:9090으로 입력합니다. 이미 다른 프로그램이 9090 포트를 사용한다면 127.0.0.1:9091처럼 사용하지 않는 포트로 변경합니다.
  4. Secret 또는 API Secret 입력란에 충분히 긴 임의의 문자열을 입력합니다. 예를 들어 MP-local-2026-Only-ChangeMe-7fQ2처럼 다른 사람이 쉽게 추측하기 어려운 값을 사용합니다.
  5. 저장 또는 적용을 누른 뒤 커널 재시작, 프로필 다시 적용, Mihomo Party 재시작 중 필요한 동작을 실행합니다.

설정 화면에 주소와 secret을 각각 입력하는 칸이 있다면 주소에는 인증 정보를 붙이지 않습니다. 주소는 127.0.0.1:9090처럼 호스트와 포트만 작성하고, secret은 별도 입력란에 넣어야 합니다. 일부 Web 패널은 URL을 http://127.0.0.1:9090 형태로 요구하지만, mihomo 설정의 external-controller 값은 보통 프로토콜을 제외한 127.0.0.1:9090 형식입니다.

안전한 YAML 설정과 주소 선택

GUI에 외부 컨트롤러 항목이 보이지 않거나 저장 후 값이 사라진다면 현재 프로필의 YAML 설정을 확인할 수 있습니다. 다음은 로컬 컴퓨터에서만 API를 열고 secret 인증을 사용하는 기본 예시입니다.

external-controller: 127.0.0.1:9090
secret: "MP-local-2026-Only-ChangeMe-7fQ2"

YAML은 들여쓰기와 특수문자에 민감합니다. secret에 콜론, 해시, 앞뒤 공백 같은 문자가 포함될 수 있으므로 큰따옴표로 감싸는 편이 안전합니다. 설정 파일에 이미 external-controller가 있다면 같은 키를 두 번 만들지 말고 기존 값을 수정하세요. 중복 키는 편집기마다 다르게 처리될 수 있으며, 화면에 보이는 값과 실제 커널이 읽은 값이 달라질 수 있습니다.

설정 예시접속 범위권장도주의점
127.0.0.1:9090현재 Windows PC만가장 권장같은 PC의 Web 패널에서만 접속 가능
0.0.0.0:9090모든 네트워크 인터페이스신중히 사용방화벽과 공유 네트워크에서 접근 범위가 넓어짐
192.168.1.20:9090지정한 LAN 주소조건부 권장IP 변경과 방화벽 규칙을 함께 관리해야 함
포트 생략 또는 잘못된 값API 서버 시작 실패 가능사용 금지Web 패널이 연결할 대상 자체가 없음

외부 기기에서 Web 패널을 사용해야 한다는 이유로 처음부터 모든 인터페이스에 바인딩할 필요는 없습니다. 먼저 같은 PC의 브라우저에서 로컬 연결을 검증한 뒤, 정말 필요한 경우에만 LAN 주소 바인딩을 검토하세요. LAN에서 사용할 때에도 Windows Defender 방화벽에서 해당 포트를 전체 인터넷이 아닌 신뢰할 수 있는 사설 네트워크에만 허용하는 방식이 안전합니다.

Windows에서 실제 API 응답 확인하기

Web 패널의 오류 메시지만 보면 주소 문제인지 secret 문제인지 구분하기 어렵습니다. Windows PowerShell에서 API를 직접 호출하면 커널이 실제로 실행 중인지, 포트가 열려 있는지, 인증이 통과하는지를 단계별로 확인할 수 있습니다. 아래 예시에서 secret은 실제로 입력한 값으로 바꾸고, 명령줄 기록이 저장되거나 공유되지 않도록 주의하세요.

  1. PowerShell을 열고 다음 명령으로 포트가 열려 있는지 확인합니다.
Test-NetConnection 127.0.0.1 -Port 9090

결과의 TcpTestSucceeded : True가 나오면 해당 포트에서 TCP 연결을 받을 가능성이 있습니다. False라면 Mihomo Party가 실행되지 않았거나, 커널이 외부 컨트롤러를 열지 않았거나, 포트 번호가 다르거나, 다른 프로그램이 설정을 덮어쓴 경우를 확인해야 합니다.

  1. secret을 Authorization 헤더에 넣고 커널 버전 API를 호출합니다.
$secret = "MP-local-2026-Only-ChangeMe-7fQ2"
$headers = @{ Authorization = "Bearer $secret" }
Invoke-WebRequest -Uri "http://127.0.0.1:9090/version" -Headers $headers

인증과 연결이 모두 정상이라면 HTTP 상태 코드 200과 함께 mihomo의 버전 정보가 JSON으로 반환됩니다. JSON 내용을 보기 쉽게 표시하려면 다음처럼 실행할 수 있습니다.

(Invoke-WebRequest -Uri "http://127.0.0.1:9090/version" -Headers $headers).Content | ConvertFrom-Json

이제 프록시 그룹 API도 확인합니다.

$result = Invoke-WebRequest -Uri "http://127.0.0.1:9090/proxies" -Headers $headers
$result.StatusCode
$result.Content | ConvertFrom-Json

/proxies 응답에 정책 그룹과 노드 정보가 표시되면 단순한 포트 개방을 넘어 mihomo API가 정상적으로 작동하는 상태입니다. Web 패널에 연결할 때에는 주소에 http://를 포함하고, 패널의 secret 입력란에는 동일한 secret을 넣습니다. 패널에 "API URL"과 "Secret"이 따로 있다면 각각 http://127.0.0.1:9090과 secret 값을 입력하세요.

증상가능한 원인확인 방법
연결 거부 또는 timeout커널 미실행, 포트 오류, 주소 오류Test-NetConnection 결과와 설정 포트 대조
401 Unauthorizedsecret 불일치 또는 Bearer 형식 누락secret을 다시 복사하고 인증 헤더 확인
404 Not FoundAPI 경로 오타 또는 잘못된 패널/version, /proxies 경로로 재시험
200이지만 패널에 데이터 없음패널 API 호환성, CORS, 잘못된 API 주소브라우저 개발자 도구와 패널 주소 확인

Web 패널 연결과 권한 점검

API 직접 호출이 성공한 다음에 Web 패널을 연결해야 합니다. 패널에서 먼저 API 주소를 입력하고, 끝에 불필요한 경로를 붙이지 않습니다. 기본 주소가 http://127.0.0.1:9090이라면 /version이나 /proxies를 패널 주소에 직접 넣지 않습니다. 패널이 내부적으로 필요한 API 경로를 추가하기 때문입니다.

  • 주소—Mihomo Party와 Web 패널이 같은 Windows PC에서 실행되면 http://127.0.0.1:9090을 사용합니다.
  • secret—YAML의 secret 값과 대소문자까지 완전히 같아야 합니다.
  • 프로토콜—로컬 기본 설정은 일반적으로 http입니다. HTTPS를 사용하지 않으면서 https://를 입력하면 TLS 오류가 발생할 수 있습니다.
  • 브라우저 권한—Web 패널이 다른 출처에서 API를 호출하는 구조라면 CORS 관련 오류가 나타날 수 있습니다. 이때 secret을 반복해서 바꾸기보다 패널이 mihomo API를 지원하는지 먼저 확인합니다.

연결이 되더라도 Web 패널의 모든 기능이 Mihomo Party 버전과 완전히 호환된다는 뜻은 아닙니다. mihomo API 버전, 패널이 기대하는 엔드포인트, 패널이 사용하는 기능에 따라 일부 통계나 설정 화면이 비어 있을 수 있습니다. /version/proxies가 정상 응답하는데 특정 화면만 작동하지 않는다면 기본 연결이 아니라 패널 호환성 문제일 가능성이 큽니다.

보안 유지와 변경 후 점검

외부 컨트롤러를 장기간 사용할 때는 secret을 설정 파일과 동일하게 관리해야 합니다. 설정 파일을 다른 사람에게 보내거나 화면을 캡처해 공유할 때 secret이 노출되지 않도록 가립니다. 구독 URL처럼 외부 컨트롤러 secret도 API 접근 권한으로 취급해야 하며, 채팅 기록이나 공개 문서에 그대로 남기지 않는 것이 좋습니다.

  • 로컬 전용 사용이라면 항상 127.0.0.1 바인딩을 우선합니다.
  • 9090 포트가 이미 사용 중이면 임의로 방화벽을 끄지 말고 다른 로컬 포트를 선택합니다.
  • 설정 변경 후 Mihomo Party의 커널 재시작 또는 프로필 재적용을 실행합니다.
  • API가 필요 없을 때는 외부 컨트롤러를 비활성화하거나 포트를 닫아 공격 표면을 줄입니다.
  • secret을 바꾼 뒤 기존 Web 패널에 저장된 이전 인증 정보를 삭제하고 새 값으로 다시 연결합니다.

정상 설정의 최종 기준

Test-NetConnection이 성공하고, 올바른 Bearer secret으로 /version에서 200 응답을 받으며, /proxies에 정책 그룹이 표시되고, Web 패널에서도 같은 그룹을 읽는다면 연결 구성이 완료된 것입니다. 단순히 패널 화면이 열리는지만 보지 말고 API 응답까지 확인하세요.

자주 묻는 질문

외부 컨트롤러 메뉴가 Mihomo Party에 보이지 않습니다

버전에 따라 일반 설정이 아니라 고급 설정, Core 설정 또는 프로필 YAML 편집 화면에 표시될 수 있습니다. 현재 적용된 프로필에 external-controllersecret을 추가한 뒤 커널을 다시 시작해 보세요. GUI에서 값을 관리하는 기능이 있다면 YAML과 GUI에 중복으로 작성하지 않는 것이 좋습니다.

401 오류가 계속 발생하는 이유는 무엇인가요?

secret이 실제 적용된 프로필의 값과 다르거나, API 호출 헤더가 Authorization: Bearer secret값 형식이 아닐 가능성이 높습니다. 앞뒤 공백, 따옴표 자체를 값에 포함했는지, 대소문자가 바뀌었는지를 확인하세요.

127.0.0.1 대신 0.0.0.0을 사용해도 되나요?

다른 기기에서 관리해야 하는 명확한 이유가 있을 때만 검토하세요. 0.0.0.0은 모든 인터페이스에서 요청을 받을 수 있으므로 Windows 방화벽의 허용 범위와 네트워크 프로필을 함께 제한해야 합니다. 같은 PC에서 사용하는 Web 패널이라면 127.0.0.1이 더 안전합니다.

API 포트는 열렸지만 Web 패널만 연결되지 않습니다

PowerShell에서 /version/proxies가 200을 반환한다면 주소와 커널은 정상일 가능성이 큽니다. 패널 주소에 잘못된 경로를 붙였거나 HTTPS를 잘못 선택했거나, 해당 패널이 현재 mihomo API와 호환되지 않는지 확인하세요.

다음 설정으로 이동하기

Windows에서 Mihomo Party를 먼저 설치하거나 기본 프록시 모드와 프로필 적용 순서를 확인하려면 다운로드 센터와 빠른 시작 안내를 함께 참고하세요.

자주 나타나는 오류와 원인별 해결법

증상가능한 원인확인할 항목
로그인 명령이 즉시 연결 거부Clash가 꺼져 있거나 포트가 다름mixed-port, HTTP 포트, 로컬 리스닝 상태
브라우저 인증은 끝났지만 CLI가 대기콜백 주소가 프록시나 보안 프로그램에 의해 차단됨localhost를 NO_PROXY에 포함했는지 확인
TLS handshake timeout노드 품질 저하, 잘못된 규칙, MTU 문제Clash 로그, 다른 노드, TUN 사용 여부
인증 성공 후 요청만 실패API 요청이 다른 호스트로 이동하거나 규칙에서 DIRECT 처리됨요청 도메인의规则匹配 결과와 프록시 그룹
명령을 찾을 수 없음CLI 설치 경로가 PATH에 없음codex --help, 운영체제 PATH, 설치 방식
인증 정보가 반복해서 사라짐권한 문제, 임시 컨테이너, 자격 증명 저장 실패설정 디렉터리 쓰기 권한과 실행 환경

로그인 콜백이 멈추는 경우에는 NO_PROXY가 지나치게 넓게 설정되지 않았는지 확인하세요. localhost127.0.0.1은 로컬 콜백을 위해 직접 연결하는 것이 일반적이지만, 외부 인증 서버 도메인을 무심코 NO_PROXY에 넣으면 브라우저 인증 페이지와 CLI의 인증 요청이 서로 다른 경로로 나갈 수 있습니다.

반대로 TUN 모드에서 localhost까지 가상 인터페이스로 보내면 콜백 서버가 정상적으로 응답하지 않을 수 있습니다. 이런 환경에서는 DNS 하이재킹과 자동 라우팅을 켜더라도 로컬 주소 예외를 유지하세요. TUN을 켠 뒤 문제가 시작됐다면 TUN을 끄고 환경 변수 방식으로 재시험하면 원인을 빠르게 분리할 수 있습니다.

프록시 오류와 인증 오류를 구분하세요

“connection refused”, “timeout”, “TLS handshake”는 대체로 네트워크 경로 문제이고, 인증 만료·권한 부족·잘못된 계정은 서버가 반환하는 인증 단계의 오류입니다. 전자는 Clash 로그와 포트를 먼저 보고, 후자는 Codex CLI의 로그아웃 후 재로그인과 계정 권한을 확인해야 합니다.

TUN과 DNS를 사용할 때의 추가 점검

Codex CLI가 실행하는 셸 명령이나 패키지 도구까지 같은 네트워크 정책으로 처리해야 한다면 TUN 모드가 편리할 수 있습니다. 다만 TUN은 단순히 브라우저를 프록시로 바꾸는 기능이 아니라 시스템 라우팅과 DNS 흐름을 변경하는 기능입니다. Windows에서는 서비스 모드와 관리자 권한이 필요할 수 있고, macOS에서는 네트워크 확장 또는 VPN 구성 허용이 요구될 수 있습니다.

mihomo 기반 클라이언트에서는 auto-route, auto-detect-interface, dns-hijack 설정이 서로 맞물립니다. 자동 라우팅이 꺼져 있으면 TUN 인터페이스가 만들어져도 일부 트래픽이 기존 네트워크 카드로 빠질 수 있습니다. DNS 하이재킹이 빠지면 도메인 조회는 운영체제 DNS로 남아 규칙 매칭이 불안정해질 수 있습니다. fake-ip을 사용하는 경우 198.18.0.1/16과 같은 가상 대역이 로컬 네트워크 규칙에 의해 차단되지 않는지도 확인하세요.

  • Clash 로그에서 DNS 요청이 기록되는지 확인합니다.
  • nslookup 또는 dig 결과가 매번 바뀌는지, 특정 잘못된 주소가 반복되는지 비교합니다.
  • 사내 도메인과 로컬 프린터 주소는 NO_PROXY 또는 DIRECT 규칙으로 분리합니다.
  • 패키지 설치 명령이 실패하면 Codex 자체가 아니라 패키지 저장소의 인증서, 별도 프록시 설정, 저장소 정책을 확인합니다.

터미널 명령 실행을 허용할 때는 네트워크가 안정적이라는 이유만으로 모든 명령을 자동 승인하지 마세요. Codex CLI가 파일을 수정하거나 외부 패키지를 설치하도록 설정되어 있다면 프로젝트 디렉터리, 셸 권한, 환경 변수에 저장된 비밀 정보까지 함께 고려해야 합니다. 먼저 읽기 작업으로 검증하고, 변경 작업은 명령별로 확인하는 것이 안전합니다.

FAQ: Codex CLI와 Clash 연결 문제

시스템 프록시를 켰는데도 Codex CLI가 직접 연결되는 이유는 무엇인가요?

터미널 프로그램이나 내부 HTTP 라이브러리가 운영체제의 시스템 프록시를 읽지 않을 수 있습니다. 현재 셸에 HTTP_PROXYHTTPS_PROXY를 직접 지정한 뒤 다시 실행하세요. 그래도 로그가 보이지 않으면 TUN 모드로 비교 테스트를 진행해 프로세스가 프록시 변수를 무시하는지 확인할 수 있습니다.

HTTP_PROXY와 HTTPS_PROXY에 서로 다른 포트를 넣어야 하나요?

Clash의 mixed 포트를 사용한다면 두 변수에 같은 HTTP 주소를 넣어도 됩니다. 다만 실제 클라이언트에서 HTTP와 SOCKS 포트가 분리되어 있다면 HTTPS 요청에 SOCKS 포트를 HTTP 주소로 입력하지 않도록 주의하세요. 포트 형식과 프로토콜이 맞지 않으면 연결 거부 또는 TLS 오류가 발생합니다.

Codex 로그인 후에는 환경 변수를 삭제해도 되나요?

로그인 정보가 안전하게 저장되고 이후 요청이 직접 연결로도 허용되는 환경이라면 가능하지만, 인증 후 API 요청도 프록시가 필요한 네트워크라면 환경 변수를 계속 유지해야 합니다. 테스트할 때는 변수를 삭제한 새 셸에서 간단한 요청을 실행해 인증 경로와 실제 작업 경로가 모두 정상인지 구분하세요.

노드를 바꾸면 Codex CLI 인증을 다시 해야 하나요?

일반적으로 노드 변경만으로 저장된 인증 정보가 사라지지는 않습니다. 그러나 출구 지역이나 IP가 바뀌면서 보안 확인이 추가되거나, 이전 연결이 만료되어 재인증이 요구될 수 있습니다. 짧은 시간에 여러 지역의 노드를 반복해서 바꾸기보다 안정적인 하나의 그룹을 선택하고 Clash 로그에서 연결 상태를 확인하세요.

다음 단계: Clash 설정과 Codex 실행 환경 정리

Codex CLI 연결 문제는 대부분 클라이언트 자체보다 로컬 포트, 셸 환경 변수, DNS 경로, 규칙 순서 중 하나에서 발생합니다. 먼저 mixed 포트와 전역 연결을 이용해 기본 경로를 검증한 뒤, 규칙 모드와 TUN 모드로 범위를 좁히면 불필요한 설정 변경을 줄일 수 있습니다. 설치 파일과 클라이언트 선택이 아직 정해지지 않았다면 다운로드 센터에서 플랫폼에 맞는 mihomo 기반 클라이언트를 확인하고, 적용 후에는 단계별 튜토리얼에 따라 프로필과 프록시 모드를 설정하세요.

Clash 클라이언트 다운로드

규칙 분리를 적용하려면 먼저 클라이언트가 트래픽을 인계받아야 합니다. 다운로드 센터에서 사용 중인 플랫폼에 맞는 클라이언트를 선택한 뒤, 다시 가이드로 돌아와 시스템 프록시 또는 TUN 인계를 완료하세요.

Clash 다운로드