기타 옵션

[General]
ipv6 = true
loglevel = notify

skip-proxy = 127.0.0.1, 192.168.0.0/16, 10.0.0.0/8, 172.16.0.0/12, 100.64.0.0/10, localhost, *.local

tun-excluded-routes = 192.168.0.0/16, 10.0.0.0/8, 172.16.0.0/12
tun-included-routes = 192.168.1.12/32

공통 옵션

전체 IPv6 지원 활성화 (기본값: true)

ipv6 = true

loglevel (기본값: warning)

loglevel = notify

none, fatal, warning, notify, info 또는 verbose 중 하나. 일상 사용에서 verbose를 활성화하면 성능이 크게 저하되므로 권장하지 않습니다.

skip-proxy

skip-proxy = 127.0.0.1, 192.168.0.0/16, 10.0.0.0/8, 172.16.0.0/12, 100.64.0.0/10, localhost, *.local

iOS 버전에서는 이 옵션이 이 도메인/IP 범위로의 연결을 Chute 프록시 대신 Chute TUN이 처리하도록 강제합니다. macOS 버전에서는 "시스템 프록시로 설정"이 활성화될 때 이러한 설정이 시스템에 적용됩니다. 이 옵션은 일부 앱과의 호환성 문제를 해결하는 데 사용됩니다.

  • 단일 도메인을 지정하려면 도메인 이름을 입력하세요 - 예: apple.com.
  • 도메인의 모든 웹사이트를 지정하려면 별표를 도메인 이름 앞에 사용하세요 - 예: *apple.com.
  • 도메인의 특정 부분을 지정하려면 각 부분을 지정하세요 - 예: store.apple.com.
  • 호스트 또는 네트워크를 IP 주소로 지정하려면 특정 IP 주소를 입력하세요. 예: 192.168.2.11 또는 192.168.2.* 또는 192.168.2.0/24.

알림: IP 주소 또는 주소 범위를 입력하면 해당 주소를 사용하는 호스트에 연결할 때만 프록시를 우회할 수 있으며, 해당 주소로 해석되는 도메인 이름으로 연결할 때는 불가능합니다.


프록시 서버 수신 대기

interface = 127.0.0.1
port = 8118
socks-interface = 127.0.0.1
socks-port = 8119

interface / port는 HTTP 프록시 서버의 수신 주소와 포트를 제어합니다(기본값 127.0.0.1:8118). socks-interface / socks-port는 SOCKS5 프록시 서버를 제어합니다(기본값 127.0.0.1:8119).

호환성 별칭: doh-serverdoh의 별칭으로 허용됩니다. http-listen / socks5-listen(예: 0.0.0.0:6152, [::]:6153, 또는 포트 번호만)은 위의 interface/port 설정에 매핑됩니다. 와일드카드 수신 호스트(0.0.0.0, ::, *)를 지정하면 allow-wifi-access = true도 함께 설정됩니다.


인바운드 프록시 인증

http-auth = username:password

클라이언트가 Chute의 HTTP 및 SOCKS5 프록시 서버를 사용하기 전에 인증하도록 요구합니다. 이 줄을 반복하여 여러 자격 증명을 허용할 수 있습니다.


시스템 요청 우회

bypass-system = true

활성화되면 시스템 프로세스가 보낸 요청이 Chute 처리를 우회합니다.

기본값: true.


항상 실제 IP

always-real-ip = *.example.com, tracker.example.org

Chute가 하이재킹된 DNS 쿼리에 가짜 IP 주소를 제공할 때(hijack-dns 참조), 쉼표로 구분된 이 목록과 일치하는 호스트명은 항상 실제로 해석된 IP 주소로 응답됩니다. 와일드카드가 지원됩니다.


기존 연결 중단

interrupt-exist-connections = true

활성화되면 모든 정책 그룹에서 선택된 정책이 변경될 때(URL 테스트, 폴백, 로드 밸런스, SSID 또는 수동 선택을 통해) 기존 연결을 정상적으로 종료하여, 연결이 이전 정책에 머무르지 않고 즉시 새로 선택된 프록시를 사용하도록 합니다.

영향을 받는 각 연결은 3초의 시간 초과 내에 정상 종료를 시도하며, 그 후 강제 종료됩니다.

기본값: false. 이것은 모든 정책 그룹에 영향을 미치는 전역 설정입니다.


네트워크 프레임워크 (macOS / tvOS)

network-framework = true

Apple Network.framework를 활성화하여 아웃바운드 연결에 사용합니다. Network.framework를 사용하면 지원되는 플랫폼에서 더 나은 성능과 최신 TLS 스택 통합을 제공할 수 있습니다.

기본값: macOS에서는 true, iOS 및 tvOS에서는 false.


단순 호스트명 제외

exclude-simple-hostnames = true

활성화되면 단일 레이블 이름(점 없는, 예: localhost)이 프록시 규칙을 우회하여 로컬로 해석됩니다. 이는 로컬 네트워크 이름에 대한 불필요한 DNS 조회를 방지하는 데 도움이 됩니다.

Chute Mac에서는 첫 실행 시 일회성 마이그레이션으로 이 옵션이 기본 활성화됩니다. 사용자가 명시적으로 끈 설정은 그대로 존중됩니다.

기본값: false.


데이터베이스 기록 비활성화

disable-db-record = true

활성화되면 Chute가 로컬 데이터베이스에 트래픽 기록 작성을 중지합니다. 이는 성능을 향상시키고 저장소 사용량을 줄일 수 있지만 Chute Dashboard에서 트래픽 기록을 사용할 수 없습니다.

기본값: false.


menu-bar-show-speed = true

활성화되면 Chute Mac이 메뉴 막대에 현재 업로드 및 다운로드 속도를 표시합니다.

기본값: false.


다른 DNS 서버 하이재킹

hijack-dns = 8.8.8.8:53

기본적으로 Chute는 Chute DNS 주소(198.18.0.2)로 전송된 DNS 쿼리에 대해서만 가짜 IP 주소를 반환합니다. 표준 DNS로 전송된 쿼리는 단순히 전달됩니다.

일부 기기나 소프트웨어는 항상 하드코드 DNS 서버를 사용합니다. (예: Google Speakers는 항상 8.8.8.8을 사용합니다). 이 옵션을 사용하여 쿼리를 하이재킹하고 가짜 주소를 얻을 수 있습니다.

hijack-dns = *:53을 사용하여 모든 DNS 쿼리를 하이재킹할 수 있습니다.


제외된 경로

tun-excluded-routes = 192.168.0.0/16, 10.0.0.0/8, 172.16.0.0/12

Chute VIF는 TCP 및 UDP 프로토콜만 처리할 수 있습니다. 이 옵션을 사용하여 특정 IP 범위를 우회하여 모든 트래픽이 통과할 수 있도록 합니다.

알림: 이 옵션은 VIF(utun) 향상 모드 유형에만 적용되며, PacketTunnel VPN 유형을 사용할 때는 효과가 없습니다. Chute 프록시 서버에서 처리된 요청은 영향을 받지 않습니다. 'skip-proxy'와 'tun-excluded-routes'를 결합하여 특정 HTTP 트래픽이 Chute를 우회하도록 합니다.

이 옵션은 시스템 오류 ENOMEM(메모리 할당 불가)을 발생시킬 수 있습니다. iOS 시스템의 버그로 보입니다. 이 옵션을 사용하지 않는 것이 좋습니다.


포함된 경로

tun-included-routes = 192.168.1.12/32

기본적으로 Chute VIF 인터페이스는 자신을 기본 경로로 선언합니다. 그러나 Wi-Fi 인터페이스는 더 작은 경로를 가지므로 일부 트래픽이 Chute VIF 인터페이스를 통과하지 못할 수 있습니다. 이 옵션을 사용하여 더 작은 경로를 추가하세요.

참고: 이 옵션은 VIF(utun) 향상 모드 유형에만 적용되며, PacketTunnel VPN 유형을 사용할 때는 효과가 없습니다.


프로토콜 스니핑

sniffing-enabled = true
sniffing-timeout = 100

Chute는 초기 바이트를 검사하여 연결의 실제 프로토콜을 감지할 수 있습니다. 이를 통해 PROTOCOL,TLS,Proxy와 같은 규칙이 비 HTTP 인바운드 연결에서도 올바르게 작동할 수 있습니다.

sniffing-enabled (기본값: false)

sniffing-enabled = true

TCP 연결에 대한 프로토콜 감지를 활성화합니다.

sniffing-timeout (기본값: 100ms)

sniffing-timeout = 200

프로토콜을 결정하기 위해 초기 데이터를 기다리는 최대 시간(밀리초)입니다. 느린 연결에서 프로토콜 감지가 실패할 경우 이 값을 늘리십시오.


QUIC 차단

block-quic = auto

Chute가 감지된 QUIC(HTTP/3 포함) 트래픽을 거부할지 제어합니다. QUIC은 UDP를 사용하므로 Chute의 HTTP MitM으로 복호화할 수 없습니다. QUIC을 거부하면 호환 클라이언트가 TCP로 다시 시도하도록 유도하여 TCP 기반 프록시 처리와, 구성된 경우 HTTPS 복호화를 적용할 수 있습니다.

동작
off 전역 QUIC 차단을 적용하지 않습니다(기본값). 감지된 QUIC 트래픽은 일반 라우팅 규칙을 따릅니다.
on DIRECT로 라우팅된 트래픽을 포함하여 감지된 모든 QUIC 흐름을 거부합니다.
auto 최종 아웃바운드 정책이 프록시인 경우에만 감지된 QUIC을 거부합니다. DIRECT로 라우팅된 트래픽은 허용되며, REJECT로 라우팅된 트래픽은 해당 규칙에 따라 계속 거부됩니다.

TUN을 통해 들어오는 트래픽의 경우 Chute는 거부된 QUIC 흐름에 ICMP/ICMPv6 Port Unreachable 메시지로 응답하므로, 호환 클라이언트가 QUIC 시간 초과를 기다리지 않고 TCP로 폴백할 수 있습니다.

block-quic의 QUIC 감지는 자동으로 수행되며 sniffing-enabled가 필요하지 않습니다. sniffing-enabled는 TCP 프로토콜 스니핑을 제어합니다. 개별 QUIC 흐름을 규칙으로 처리하려면 PROTOCOL,QUIC,... 규칙을 사용하십시오.


TUN 우회

bypass-tun = 192.168.0.0/16, 10.0.0.0/8

skip-proxy와 유사하게 TUN/VIF 라우팅 수준에서 작동합니다. 이러한 IP 범위 연결은 TUN 인터페이스를 완전히 우회하여 시스템 네트워크 스택을 직접 통과합니다.

참고: 이 옵션은 VIF(utun) 향상 모드 유형에만 적용되며, PacketTunnel VPN 유형을 사용할 때는 효과가 없습니다.


거부 시 오류 페이지 표시

show-error-page-for-reject = true

활성화되면 Chute는 거부된 요청에 대해 단순히 연결을 끊는 대신 사용자 친화적인 오류 페이지를 반환합니다.


낙관적 DNS

optimistic-dns = false

활성화되면 Chute는 캐시된 DNS 결과를 즉시 반환하면서 백그라운드에서 레코드를 새로 고칩니다. 이는 오래된 DNS 레코드가 반환될 수 있다는 대가로 연결 지연 시간을 줄입니다.

기본값: true. 비활성화하려면 optimistic-dns = false를 설정하세요.


Wi-Fi 접근 허용

allow-wifi-access = true

같은 네트워크의 다른 기기가 Chute의 HTTP 및 SOCKS5 프록시 포트에 접근할 수 있게 합니다. 두 리스너의 바인드 주소를 0.0.0.0으로 넓히는 동작입니다. Surge 스타일 설정(그리고 sing-box 가져오기의 allow-lan 매핑)은 이 플래그만 담고 interface는 기본값 127.0.0.1로 두기 때문에, 플래그 자체가 바인드 주소를 넓혀야 합니다.

이 플래그와 명시적인 와일드카드 interface는 같은 의도의 두 가지 표기이며 Chute는 합집합을 취합니다. 이미 0.0.0.0을 적어 둔 설정의 동작은 그대로입니다. 플래그를 바꾸면 두 리스너가 다시 바인딩되므로, 접근을 회수하면 다음 시작이 아니라 리로드 시점에 적용됩니다.

이들은 프록시 포트이며 http-auth를 설정하지 않으면 인증이 없습니다. 통제하지 않는 네트워크에서는 자격 증명도 함께 설정하십시오.


관리형 설정

#!MANAGED-CONFIG https://example.com/config.conf interval=86400 strict=false

첫 줄에 #!MANAGED-CONFIG 헤더가 있는 구성은 해당 URL에서 자동으로 다시 가져옵니다. 헤더 매개변수와 업데이트 동작은 관리형 구성에 문서화되어 있습니다.


복제 / 트래픽 기록

replica = true

[General]replica 키(replica = true)가 트래픽 기록을 활성화합니다. [Replica] 섹션은 Chute Dashboard에 표시되는 내용을 필터링하며, 해당 키는 Replica에 문서화되어 있습니다.


외부 컨트롤러 접근 (Chute Dashboard)

external-controller-access = password@0.0.0.0:6155

Chute Dashboard가 사용하는 원격 제어 서버를 시작합니다. 값은 password@host:port 형식이며, 비밀번호 앞에 선택적으로 사용자 이름을 붙일 수 있습니다(user:password@host:port). iOS에서는 보조 USB 채널이 port + 1에서 열립니다(macOS에서는 열리지 않습니다). 연결 방법은 Chute Dashboard 페이지에 있습니다.


HTTP 제어 API 및 웹 UI

[General]
external-http-controller = 127.0.0.1:9090
external-http-secret = your-secret-token
external-http-ui = true
external-http-cors = false

Chute는 Clash 및 Surge 대시보드와 유사한 내장 HTTP 제어 API 및 웹 기반 관리 UI를 제공합니다. API는 REST 엔드포인트를 통해 커널 상태, 트래픽, 연결, DNS, 정책 제어 및 구성 관리를 노출합니다.

external-http-controller (기본값: 비활성화)

external-http-controller = 127.0.0.1:9090

HTTP 제어 서버의 주소와 포트입니다. 로컬 전용으로 쓰려면 127.0.0.1을 사용하십시오. 루프백이 아닌 주소(예: 192.168.1.5:9090)에 바인딩하려면 external-http-secret을 명시해야 합니다. 없으면 서버는 시작을 거부하고 무엇이 빠졌는지 로그에 남깁니다.

와일드카드 주소(0.0.0.0, ::, *)는 이 검사에서 루프백이 아닌 것으로 취급됩니다. 모든 인터페이스에서 수신하므로 로컬 전용의 정반대이기 때문입니다. 허용되는 표기는 0.0.0.0:9090, *:9090(같은 뜻), IPv6는 [::]:9090입니다 — 맨 :::9090은 대괄호를 자동으로 붙여 줍니다. 파싱할 수 없는 주소는 컨트롤러를 조용히 꺼 두는 대신 설정 오류로 보고됩니다. 127.0.0.1뿐 아니라 127.0.0.0/8 전체가 루프백입니다.

external-http-secret (기본값: 자동 생성된 토큰)

external-http-secret = your-secret-token

API 인증에 사용하는 Bearer 토큰입니다. 요청에는 Authorization: Bearer <secret> 헤더가 있어야 합니다. 토큰은 이 헤더로만 받으며 쿼리 파라미터로는 받지 않고, 비교는 상수 시간으로 수행됩니다. 인증 실패는 401{"ok": false, "error": {"code": "unauthorized", "message": "missing or invalid token"}}을 반환합니다. 보호되는 것은 /api/* 경로와 Clash 호환 별칭뿐이며 Web UI 정적 자원에는 토큰이 필요 없습니다(external-http-ui = false이면 아예 사라져 페이지가 404가 됩니다).

이 키가 없으면 Chute는 인증 없이 서비스하는 대신 토큰을 생성합니다. 생성된 토큰은 Chute의 공유 폴더에 있는 control-token에 소유자만 읽을 수 있는 권한으로 기록되며 — 설정 파일 옆이 아니라 iOS와 tvOS에서는 App Group 컨테이너, Android에서는 앱의 비공개 데이터 디렉터리입니다 — 재시작 후에도 재사용되고 각 앱이 보여 줍니다 — 웹 콘솔 열기를 참고하십시오. 제어 API는 연결 데이터베이스를 넘겨줄 수 있고, 그 기록에는 이번 실행에서 본 모든 URL과 헤더, 프로세스 이름이 담깁니다. 열린 제어면은 합리적인 기본값이 아닙니다.

그래도 인증 없이 서비스하려면 설정에 분명히 적으십시오:

external-http-secret = none

이 값은 루프백 바인딩에서만 허용됩니다. 루프백이 아닌 곳에서는 none도, 키를 빼는 것도 충분하지 않습니다. 제어 서버는 시작을 거부하고 무엇이 필요한지 알려 줍니다.

업그레이드 참고: external-http-secret이 없는 것을 「인증 없음」으로 사용해 왔다면 로컬 스크립트가 401을 받기 시작합니다. 앱에서 생성된 토큰을 읽거나, external-http-secret = none을 적어 기존 동작을 의도적으로 유지하십시오.

external-http-ui (기본값: true)

external-http-ui = true

활성화되면 Chute는 컨트롤러 주소에서 내장 웹 UI를 제공합니다. 웹 UI는 개요 대시보드, 연결 관리, DNS 검사, 트래픽 모니터링, 정책 제어 및 구성 편집을 제공합니다. false로 설정하면 API는 활성화된 상태에서 UI를 비활성화합니다.

웹 콘솔 열기

콘솔은 제어 서버 주소에서 제공되며, 각 앱이 주소와 토큰을 건네줍니다 — 자동 생성된 토큰까지 포함해서입니다. 그렇지 않으면 그 값을 읽을 방법이 없습니다:

  • Chute Mac: 메뉴 막대 → 웹 콘솔 열기, 그리고 웹 콘솔 토큰 복사. 연결 상세 창에도 요청 및 기록이 있어 콘솔을 엽니다 — 열리는 것은 홈이지 그 연결 자체는 아닙니다.
  • Chute iOS: 제어판 → Web UI 행 → 열기, 주소 복사, 액세스 토큰 복사.
  • Chute tvOS: 제어판에는 Web UI 스위치 아래에 별도의 Web UI 주소 행이 있어 호스트와 포트를 보여 줍니다. 선택하면 리스너에 다른 기기에서 접근할 수 있을 때 QR 코드를 표시하며 — 로그인 토큰은 화면이 아니라 코드 안에만 들어 있습니다 — 컨트롤러가 루프백에 바인딩되어 있으면 대신 설명을 보여 줍니다. 루프백 콘솔은 휴대전화에서 열 수 없기 때문입니다.
  • Chute Android: 제어판은 주소를 HTTP API 스위치의 부제목으로 보여 주고, 별도의 생성된 액세스 토큰 행을 누르면 복사됩니다 — 이 행은 커널이 토큰을 생성했을 때만 나타나며, 직접 설정한 시크릿은 결코 표시되지 않습니다.

이 입구들이 만들어 주는 주소는 토큰을 쿼리 파라미터로 담고 있습니다. 페이지는 로드 시 그것을 소비하고 주소 표시줄에서 지우므로, 링크를 여는 것만으로 로그인이 끝나며 32자리 16진수를 옮겨 적을 필요가 없습니다.


external-http-cors (기본값: false)

external-http-cors = true

CORS(Cross-Origin Resource Sharing) 헤더를 API 응답에서 활성화합니다. 웹 UI 또는 서드파티 도구가 다른 오리진에서 API에 접근해야 할 때 유용합니다.

API 엔드포인트:

메서드 엔드포인트 설명
GET /api/status 런타임 상태, 포트, 가동 시간
GET /api/traffic 글로벌 및 정책별 트래픽 카운터
GET /api/connections 현재 활성 연결
DELETE /api/connections/:id 연결 종료
GET /api/connections/history 과거 연결 기록
GET /api/connections/processes 프로세스별 연결 통계
GET /api/connections/:id/request 연결에 대해 캡처된 요청 데이터
GET /api/connections/:id/response 연결에 대해 캡처된 응답 데이터
GET /api/dns DNS 캐시 레코드
DELETE /api/dns/cache DNS 캐시 삭제
DELETE /api/dns/records/:domain 단일 DNS 레코드 제거
GET /api/config 현재 구성
PUT /api/config 구성 재로드
POST /api/config/validate 구성을 파싱해 오류를 보고(로드하지는 않음)
GET /api/policies 정책 그룹 및 현재 선택
PUT /api/policies/:group 정책 그룹 선택 변경
PUT /api/mode 아웃바운드 모드 설정
GET /api/features 기능 스위치 상태
PUT /api/features/mitm MitM 토글
PUT /api/features/record-traffic 트래픽 기록 토글
GET /api/rules 로드된 규칙과, 실제로 적용된 재작성 규칙
POST /api/rules/match 요청이 어디로 갈지, 실제로 보내지 않고 확인
GET /api/logs 최근 로그 항목
GET /api/loglevel 현재 로그 수준과 기록 중인 섹션
PUT /api/loglevel 재시작 없이 로그 수준이나 섹션 변경
GET /api/health 엔진 상태: 거부 횟수, 세대, 메모리 사용량, 이전 종료
GET /api/events 이번 실행에서 주목할 사건
GET /api/tailscale Tailscale 엔진의 현재 상태
POST /api/diagnostics/ping ICMP 또는 TCP 도달성 검사
POST /api/diagnostics/dns-query 실행 중인 리졸버로 도메인 해석
POST /api/diagnostics/egress-probe 현재 이그레스 IP 확인
POST /api/diagnostics/url-test/:policy 정책의 지연 시간 테스트 실행
POST /api/diagnostics/bundle 민감 정보를 지운 진단 아카이브 생성
GET /api/connections/export 연결을 HAR 1.2로 내보내기
GET /api/rewrites 모든 재작성/Mock 계열과 MitM 호스트 목록
GET /api/rewrites/:family 한 계열의 규칙
POST /api/rewrites/:family 규칙 추가
DELETE /api/rewrites/:family/:id 규칙 제거
DELETE /api/rewrites/:family 계열 비우기
GET /api/mitm/hosts 현재 복호화 중인 호스트
POST /api/mitm/hosts 호스트 추가
DELETE /api/mitm/hosts/:host 호스트 제거
DELETE /api/mitm/hosts 목록 비우기

엔드포인트 참고 사항:

  • GET /api/connectionslimit(양의 정수, 기본값과 최대값 모두 1000)과 cursor(id가 커서보다 큰 연결만 반환)를 받습니다. 응답 data에는 connections, total, page_size, has_more가 담기고 — 더 많은 페이지가 있을 때는 — next_cursor도 담깁니다.
  • GET /api/connections/historylimit(기본값 100, 최대 1000)과 cursor/before(동의어; 둘 다 전달하면 거부됨)를 받습니다.
  • GET /api/connections/:id/request.../response{"connection_id": <id>, "data": "<base64>"}를 반환합니다. 2 MiB보다 큰 캡처는 413을 반환합니다.
  • GET /api/config는 민감한 값(http-auth, external-http-secret, ca-p12, ca-passphrase, WireGuard 키 등)이 <redacted>로 대체된 구성을 반환합니다 — 결과를 그대로 PUT /api/config에 다시 전달하지 마세요. 그렇게 하면 자리 표시자가 구성에 문자 그대로 기록됩니다.
  • PUT /api/config는 JSON {"configuration": "<full text>"} 또는 요청 본문으로 전달된 원시 구성 텍스트를 받습니다(1 MB 제한). 성공하면 커널이 다시 로드되며 — 실행 중이 아니었다면 시작됩니다.
  • PUT /api/policies/:group은 본문 키 policy, name, selected, select 중 첫 번째 것에서 선택 값을 가져옵니다; 값은 정책 이름이거나 문자열로 된 숫자 인덱스일 수 있습니다. 특수 그룹 이름 GLOBAL은 글로벌 선택 정책을 설정합니다.
  • PUT /api/mode는 JSON 숫자를 요구합니다: {"mode": 0}0 규칙, 1 다이렉트, 2 프록시.
  • PUT /api/features/mitmPUT /api/features/record-traffic{"enabled": true}를 받습니다.
  • GET /api/logssince(Unix 초)를 받습니다; 메모리 내 버퍼는 최근 1000개 항목을 유지하며, 각 항목은 {timestamp, level, section, message}입니다.
  • GET /api/health는 엔진이 무엇을 붙들고 있는지, 마지막으로 무엇을 왜 거절했는지, 그리고 이전 실행이 어떻게 끝났는지(clean, unclean, suspected_memory문제 해결 참고)를 보고합니다.
  • GET /api/events는 메모리 링을 제공합니다. ?persisted=1은 이번 실행의 저장된 기록을 읽으며, 기록이 꺼져 있으면 available: false로 답합니다.
  • [Tailscale] 섹션이 없으면 GET /api/tailscalestate: "idle"을 반환합니다. 오류가 아니라 정상적인 답입니다.
  • POST /api/diagnostics/* 검사들은 쿼리 문자열이나 JSON 본문에서 인자를 받고, 10초로 제한되며, 정확히 한 번만 응답합니다. url-test/:policy는 정의되지 않은 정책 이름을 거부하며 REJECT를 측정하지 않습니다.
  • POST /api/rules/match는 연결을 열지 않고 요청이 어디로 갈지 답합니다. host(또는 호스트와 포트를 가져올 url), port(기본 443), 그리고 선택적으로 ip, protocol, process, process_path, src_ip, src_port, in_port, in_type, in_user, in_name, network, ssid, bssid, from_tun, user_agent를 받습니다 — 모르는 필드는 무시되지 않고 허용 목록과 함께 거부됩니다. 응답에는 matched 규칙(규칙 줄, 종류, 그것이 지목하는 정책, 그리고 그룹이 현재 가리키는 resolved_policy), policy, need_resolve, 그리고 계산의 근거가 된 rule_countmatch_generation이 담깁니다. 도메인은 두 번 — 이름으로 한 번, 주소를 알고 나서 다시 한 번 — 일치되므로 passes에는 패스마다 한 항목이 들어갑니다. ip를 주지 않으면 해석 전 패스만 존재하고, 응답이 note로 그렇게 말합니다. explain=true를 더하면 함께 일치할 수 있었던 후보 규칙을 최대 50개까지, 펼치지 않은 규칙 집합의 수와 함께 돌려줍니다.
  • POST /api/config/validate는 구성을 파싱한 뒤 버립니다: 실행 중인 커널은 아무것도 받아들이지 않습니다. {"configuration": "<full text>"}로 보내거나 원문 텍스트를 그대로 보내십시오. 응답은 valid, error_count, advisory_count, rule_count, policy_count, 그리고 {line, severity, content, error}로 이루어진 errors 목록입니다 — severity거부된 줄과 단서를 달아 받아들인 줄을 구분하고, content는 문제가 된 줄입니다(가려짐 처리됨: 잘못된 [Proxy] 줄은 대개 그것을 잘못되게 만든 암호를 품고 있기 때문입니다). PUT /api/config 전에 쓰십시오. 그쪽은 디버깅 중인 실행을 재시작시킵니다.
  • GET /api/loglevel은 현재 level, nslog_level, 파일에 기록 중인 sections, 그리고 설정할 수 있는 available_levels / available_sections를 보고합니다. PUT(또는 PATCH)은 level, sections 또는 둘 다를 받습니다: sections는 섹션 이름의 배열이거나 문자열 "all"이고, 빈 배열은 거부됩니다 — 기록을 멈추려면 levelnone으로 하십시오. 이 방법으로 수준을 바꿔도 실행은 재시작되지 않으며, 그것이 요점입니다: 파일에 적은 loglevel = verbose는 재로드가 필요하고, 재로드는 보려던 것을 잃게 만듭니다.
  • GET /api/rulesrewrite_hits도 함께 보고합니다 — 이번 실행에서 적용된 모든 재작성/Mock 규칙과 횟수입니다. 거기에 없는 규칙은 한 번도 일치한 적이 없습니다. 재작성이 아무 일도 하지 않는 것처럼 보이는 흔한 이유가 바로 이것입니다. 이 표는 서로 다른 규칙을 최대 512개까지 추적하며, 그 이상은 rewrite_hit_dropped_rules로 보고합니다.
  • POST /api/rewrites/:family{"rule": "<configuration line>"}을 받습니다 — 파일에 적을 바로 그 텍스트입니다. 파싱되지 않는 줄은 400으로 거부되며, 결코 일치할 수 없는 규칙으로 저장되지 않습니다. :familyurl-rewrite, header-rewrite, body-rewrite, mock 중 하나입니다. 이렇게 추가한 규칙은 실행 중인 커널에만 존재하며 설정 파일로 다시 쓰이지 않습니다.
  • GET /api/connections/export?format=harHAR 1.2 문서를, POST /api/diagnostics/bundlezip을 반환합니다. 둘 다 파일이므로 다른 엔드포인트와 달리 {"ok": ..., "data": ...} 봉투로 감싸지 않습니다. exportsource(기본 current, 또는 history), limit(기본 100, 최대 300), ids, 그리고 캡처된 페이로드를 포함하는 bodies=1을 받습니다. 각 항목에는 HAR에 대응 필드가 없는 정보 — 선택된 정책, 일치한 규칙, 적용된 재작성 — 가 _kl 객체로 담깁니다.

예시 — 상태를 읽은 다음 정책 그룹을 전환합니다:

curl -H "Authorization: Bearer your-secret-token" http://127.0.0.1:9090/api/status
{"ok":true,"data":{"running":true,"outbound_mode":0,"mitm":false, ...}}

curl -X PUT -H "Authorization: Bearer your-secret-token" \
     -d '{"policy": "ProxyB"}' http://127.0.0.1:9090/api/policies/MainGroup
{"ok":true,"data":{"outbound_mode":0,"selectable_groups":[...], ...}}

예시 — 요청을 보내기 전에 그것이 어디로 갈지 묻습니다:

curl -X POST -H "Authorization: Bearer your-secret-token" \
     -d '{"url": "https://api.example.com/v1/orders", "explain": true}' \
     http://127.0.0.1:9090/api/rules/match
{"ok":true,"data":{"policy":"MainGroup","matched":{"rule":"DOMAIN-SUFFIX,example.com,MainGroup", ...}, ...}}

재현하는 동안 실행을 재시작하지 않고 로그를 한 하위 시스템으로 좁힙니다:

curl -X PUT -H "Authorization: Bearer your-secret-token" \
     -d '{"level": "verbose", "sections": ["MitM", "DNS"]}' \
     http://127.0.0.1:9090/api/loglevel

참고: 이 기능은 기본적으로 비활성화되어 있습니다. 모든 응답은 성공 시 {"ok": true, "data": {...}}, 오류 시 {"ok": false, "error": {"code": "...", "message": "..."}} 형식의 봉투(envelope)를 사용합니다; 요청 본문은 1 MB로 제한됩니다.

PUT 엔드포인트는 PATCH도 허용합니다. 서드파티 대시보드를 위해 Clash 호환 별칭 경로를 사용할 수 있습니다: /version, /traffic, /connections, /configs, /proxies, /rules — 경로에는 도달할 수 있지만, 응답은 Clash의 스키마가 아닌 Chute의 봉투와 필드 이름을 사용하므로(/version{"name", "run_id"}만 반환) Clash 대시보드가 바로 작동하지는 않습니다.


클라이언트 지문

global-client-fingerprint = chrome

자체 fingerprint를 지정하지 않은 모든 정책에 TLS 클라이언트 지문을 설정합니다. 정책 자체의 값이 항상 우선하므로 이것은 덮어쓰기가 아니라 기본값입니다.

사용할 수 있는 값은 chrome, firefox, safari, ios 그리고 edge, 360, qq, android, random이며 뒤의 값들은 모두 Chrome으로 처리됩니다. 인식할 수 없는 값은 무시되고 플랫폼 TLS 스택이 사용됩니다.

기본값: 비어 있음(플랫폼 TLS 스택). Trojan, VMess, VLESS, ShadowTLS 정책만 이 값을 읽습니다.

S. Smart Rabbit LLC © All Rights Reserved            updated 2026-09-05 00:47:48

이 페이지는 영어판의 번역본입니다. 내용이 다를 경우 영어판이 우선합니다.

results matching ""

    No results matching ""