정책 그룹

정책 그룹은 여러 정책을 포함할 수 있습니다. 프록시 서버, 다른 정책 그룹 또는 내장 정책(DIRECT, REJECT와 그 변형 또는 PROXY)이 될 수 있습니다.

일곱 가지 그룹 유형이 있습니다: select, url-test, fallback, load-balance, random, relay 및 ssid(subnet으로도 씀). [Proxy Group] 섹션은 정책 그룹을 선언합니다. smart 유형도 허용되며 url-test로 처리됩니다. 그 밖의 유형의 그룹 — Surge의 external 또는 Chute가 모르는 유형 — 은 거부되는 대신 멤버를 유지한 채 select 그룹으로 동작하며, 로그에 알림이 남습니다.

수동 선택 그룹

사용자 인터페이스에서 사용할 정책을 선택합니다.

SelectGroup = select, ProxyHTTP, ProxyHTTPS, DIRECT, REJECT

선택적 매개변수: default=(처음에 선택되는 멤버 — 그 이름 또는 0부터 세는 인덱스. Shadowrocket의 select=와 policy-select-name=도 같은 뜻), policy-provider:Name(프록시 제공자에서 멤버 가져오기), filter= / exclude-filter=(제공자가 제공한 멤버에 적용되는 정규식), 그리고 HIDDEN=true. ssid를 제외한 모든 그룹 유형은 구독 및 멤버 매개변수도 받습니다.

iOS 버전에서는 Today 위젯이 숨겨지지 않은 처음 세 개의 select 그룹의 정책을 전환하며, 몇 개를 표시할지는 앱의 Today 위젯으로 그룹 선택으로 설정합니다. macOS 버전에서는 메뉴 바 메뉴에서 정책을 전환할 수 있습니다.


자동 URL 테스트 그룹

URL에 대한 지연 시간을 벤치마킹하여 사용할 정책을 자동으로 선택합니다.

AutoTestGroup = url-test, ProxySOCKS5, ProxySOCKS5TLS, url = http://www.google.com/generate_204

매개변수

url: 선택

Chute는 각 정책을 거쳐 URL 호스트의 80번 포트로 그 URL에 대한 일반 HTTP GET 요청을 보냅니다: URL의 https:// 스킴이나 포트는 무시되므로, 80번 포트에서 제공되는 http:// URL을 사용하세요. 테스트는 응답 데이터 수신 여부만 확인하며, 응답이 HTTP 오류이더라도 상관없습니다. 자체 test-url=이 있는 멤버는 대신 그 URL로 프로브됩니다. 생략하면 기본 프로브 URL http://www.gstatic.com/generate_204이 사용됩니다. [General]의 proxy-test-url을 설정하면 url을 생략한 모든 그룹에서 이 기본값을 대신합니다.

interval: 선택, 초 (기본값: 600초).

정책을 재테스트하는 빈도입니다. 전역 1초 타이머가 정책 그룹의 사용 여부와 관계없이 interval초마다 자동 재테스트를 수행합니다. 두 가지 예외가 있습니다. lazy=true인 그룹은 처음 사용될 때까지 테스트를 시작하지 않으며, 그룹이 idle-timeout보다 오래 유휴 상태로 남아 있으면 테스트가 일시 중지됩니다. 0은 생략한 것과 같습니다.

tolerance: 선택, ms (기본값: 100ms).

각 회차에서는 모든 멤버를 한꺼번에 테스트합니다. 가장 먼저 응답한 멤버가 사용 중인 멤버가 아니면, Chute는 사용 중인 멤버를 최대 tolerance밀리초 더 — 그 회차의 timeout을 넘기지 않는 선에서 — 기다립니다: 그 안에 응답하면 사용 중인 멤버가 자리를 지키고, 그렇지 않으면 그룹은 가장 먼저 응답한 멤버로 전환합니다. 아직 어느 회차도 멤버를 고르지 않았다면 가장 먼저 응답한 멤버를 곧바로 택하며, 어떤 멤버도 응답하지 않은 회차는 아무것도 바꾸지 않습니다. 0은 생략한 것과 같습니다.

timeout: 선택, 초 (기본값: 5초).

시간 초과 내에 완료되지 않으면 정책을 포기합니다. timeout을 생략하거나 0으로 두면 [General]의 test-timeout이 설정된 경우 그 값이 적용됩니다.

lazy: 선택 (true/false, 기본값: false).

활성화되면 정책은 시작 시가 아닌 첫 사용 시에만 테스트됩니다.

max-failed-times: 선택 (기본값: 0, 비활성화).

정책이 비정상으로 간주되기까지의 연속 테스트 실패 횟수입니다. 이 옵션은 로드 밸런스 그룹에서만 효과가 있으며, 그곳에서 비정상 정책이 선택에서 제외됩니다. url-test 및 fallback 그룹에서는 실패 횟수가 집계되기는 하지만 선택에는 영향을 주지 않습니다. 설정하지 않으면(0) 테스트 실패로 정책이 제외되지 않습니다.

expected-status: 선택 (기본값: 비어 있음).

expected-status=204

예상한 상태 코드의 응답만 성공으로 칩니다. 단일 코드(204), 범위(200-299), 또는 이를 /로 이은 목록(200/204/300-399)을 쓸 수 있습니다. 다른 상태로 응답한 정책은 그 회차에서 빠지며 실패로 집계됩니다. 이 형식에 맞지 않는 값은 경고와 함께 무시되고, 그 경우 어떤 응답이든 받아들입니다. url-test 그룹에서 적용됩니다.

idle-timeout: 선택, 초.

idle-timeout = 120

정책 그룹이 이 시간보다 오래 사용되지 않으면(새 연결이 이 그룹에서 정책을 가져가지 않으면) 주기적인 URL 테스트가 일시 중지됩니다. 그룹이 다시 사용되면 테스트가 재개됩니다. 이 옵션으로 연결이 종료되는 일은 없습니다.

HIDDEN=true, filter=, exclude-filter=, policy-provider:Name도 지원됩니다.


폴백 그룹

우선순위에 따라 사용 가능한 정책을 선택합니다. 가용성은 자동 URL 테스트 그룹과 마찬가지로 URL에 접근하여 테스트합니다. 앞에 정의된 정책이 높은 우선순위를 가집니다. 각 회차에서는 모든 멤버를 한꺼번에 테스트하며, 그룹은 가장 최근 회차에 응답한 멤버 가운데 작성된 순서상 첫 번째 멤버를 사용합니다. 아직 끝난 회차가 없을 때와 어떤 멤버도 응답하지 않은 회차 뒤에는 첫 번째 멤버를 사용합니다. 한 회차의 결과는 그 회차가 끝날 때 반영됩니다 — 모든 멤버가 응답하면 바로, 그렇지 않으면 timeout이 다 되었을 때입니다 — 따라서 회차 도중에 그룹의 멤버가 바뀌는 일은 없습니다. 전환은 회차 결과로 사용 중인 멤버가 바뀔 때만 일어납니다. 이때 정책 그룹 주 정책이 변경됨 알림에는 전환 전후에 실제로 사용 중인 멤버가 표시되고, interrupt-exist-connections는 이전 멤버의 연결을 닫습니다.

FallbackGroup = fallback, ProxySOCKS5, ProxySOCKS5TLS, url = http://www.google.com/generate_204

매개변수

url: 선택

테스트할 URL을 지정합니다. url-test 그룹과 마찬가지로 프로브는 URL 호스트의 80번 포트로 보내는 일반 HTTP GET이며, 자체 test-url=이 있는 멤버는 대신 그 URL로 프로브됩니다. 생략하면 기본 프로브 URL http://www.gstatic.com/generate_204이 사용됩니다. [General]의 proxy-test-url을 설정하면 url을 생략한 모든 그룹에서 이 기본값을 대신합니다.

interval: 선택, 초 (기본값: 600초).

정책을 재테스트하는 빈도입니다. 자동 URL 테스트 그룹과 동일한 의미이지만, idle-timeout은 — expected-status와 마찬가지로 — url-test 전용입니다. 폴백 그룹에는 유휴 시 일시 중지가 없어 간격마다 계속 테스트합니다.

timeout: 선택, 초 (기본값: 5초).

시간 초과까지 완료되지 않으면 정책을 포기합니다. timeout을 생략하거나 0으로 두면 [General]의 test-timeout이 설정된 경우 그 값이 적용됩니다.

lazy / max-failed-times: 선택.

자동 URL 테스트 그룹과 동일합니다. HIDDEN=true, filter=, exclude-filter=, policy-provider:Name도 지원됩니다.


SSID 그룹

현재 네트워크(Wi-Fi 이름, 액세스 포인트, 인터페이스 유형, 라우터)에 따라 정책을 선택합니다. 유형은 Surge의 현재 이름인 subnet으로도 쓸 수 있습니다.

SSIDGroup = subnet, default = ProxyHTTP, cellular = ProxyHTTP, "Home WiFi" = DIRECT, SSID:Office* = ProxySOCKS5, TYPE:WIRED = DIRECT, ROUTER:192.168.1.1 = DIRECT

매개변수

default: 필수.

일치하는 SSID 옵션이 발견되지 않았을 때의 정책입니다.

cellular: 선택.

셀룰러 네트워크에서의 정책입니다. 제공되지 않으면 기본 정책이 사용됩니다. 정확히는 기기가 Wi-Fi에 있지 않고 일치하는 멤버가 없을 때 사용됩니다.

default는 필수입니다. 멤버는 <selector> = <policy> 쌍이며 순서대로 확인해 처음 일치한 것이 사용됩니다. 선택자는 네트워크 이름(공백이나 콜론이 있으면 따옴표로 묶음), SSID:<name>, BSSID:<address>, TYPE:WIFI / TYPE:CELLULAR / TYPE:WIRED, ROUTER:<gateway address>이며, 이름에는 *와 ? 와일드카드를 쓸 수 있습니다. MCCMNC:는 허용되지만 일치하지 않습니다. Apple TV에서는 이 그룹이 항상 default를 사용합니다.


로드 밸런스 그룹

로드 밸런싱 전략을 사용하여 여러 프록시에 요청을 분산합니다.

LBGroup = load-balance, ProxySOCKS5, ProxyHTTPS, url = http://www.google.com/generate_204, strategy = round-robin

매개변수

strategy: 선택 (기본값: round-robin)

로드 밸런싱 전략을 지정합니다:

전략 설명
round-robin 모든 프록시에 순서대로 균등하게 요청 분산
consistent-hashing 동일한 호스트명을 일관되게 동일한 프록시로 라우팅
sticky-sessions 마지막으로 선택한 프록시를 모든 연결에 계속 재사용. 고정된 선택은 전역이며(클라이언트별이 아님) 선택된 시점부터 600초 후 만료

url: 선택

url = http://www.google.com/generate_204

Chute는 URL 호스트의 80번 포트로 일반 HTTP GET 요청을 보내 프록시 가용성을 테스트합니다. 생략하면 기본 프로브 URL http://www.gstatic.com/generate_204이 사용됩니다. 테스트 결과는 max-failed-times가 0보다 클 때만 선택에 영향을 주며, 기본값 0에서는 비정상 프록시가 제외되지 않습니다. [General]의 proxy-test-url을 설정하면 url을 생략한 모든 그룹에서 이 기본값을 대신합니다.

interval: 선택, 초 (기본값: 600초).

interval = 300

프록시 가용성을 재테스트하는 빈도입니다. 0은 생략한 것과 같습니다.

timeout: 선택, 초 (기본값: 5초).

timeout = 3

가용성 테스트 요청의 시간 초과입니다. timeout을 생략하거나 0으로 두면 [General]의 test-timeout이 설정된 경우 그 값이 적용됩니다.

lazy: 선택 (true/false, 기본값: false).

자동 URL 테스트 그룹과 동일합니다. 그룹이 처음 사용될 때까지 테스트를 시작하지 않습니다.

max-failed-times: 선택 (기본값: 0, 비활성화).

max-failed-times = 3

프록시가 비정상으로 표시되어 로드 밸런싱에서 제외되기까지의 연속 테스트 실패 횟수입니다. 기본값 0에서는 테스트 결과로 프록시가 제외되지 않습니다. 모든 프록시가 비정상이면 다시 모든 프록시가 사용됩니다.

HIDDEN: 선택 (true/false, 기본값: false).

HIDDEN = true

활성화하면 앱들이 그 정책 그룹을 목록에 표시하지 않습니다: Chute Mac의 메뉴 바 메뉴와 메인 창의 프록시 탭, Chute iOS와 그 Today 위젯, Chute tvOS, Chute Android, Chute Dashboard, 웹 콘솔 모두 이 그룹을 빼고 보여 줍니다. 규칙과 다른 그룹에서는 평소대로 사용됩니다. 현재 선택되어 있는 숨긴 그룹 — 예를 들어 글로벌 모드가 사용 중인 그룹 — 은 무엇이 쓰이고 있는지 보이도록 계속 목록에 나오고 체크 표시가 붙습니다. HTTP 제어 API가 글로벌을 select 그룹으로 지정하면, 평소에는 select 그룹이 없는 각 앱의 글로벌 목록에도 그 그룹이 나오고 체크 표시가 붙습니다. HTTP 제어 API는 여전히 모든 그룹을 반환하며, 각 그룹에 "hidden": true 또는 false가 붙습니다.

이 키는 관례상 대문자로 쓰지만 대소문자를 구분하지 않고 일치하므로 hidden=true도 동작합니다. select, url-test, fallback, ssid 그룹에서도 사용할 수 있습니다.

참고: interrupt-exist-connections 매개변수는 이제 전역 [General] 설정입니다. 기타 옵션을 참조하세요.


무작위 그룹

Shadowrocket의 random 그룹입니다. 새 연결마다 멤버 하나를 무작위로 고릅니다.

RandomGroup = random, ProxyA, ProxyB, ProxyC

각 연결은 이전 연결과 무관하게 멤버 중에서 같은 확률로 고릅니다. UDP는 UDP를 중계하는 멤버 중에서만 고르며, 그런 멤버가 없으면 그룹은 UDP를 중계하지 않고 udp-policy-not-supported-behaviour를 따릅니다. 멤버는 policy-provider: 참조를 포함해 select 그룹과 같은 방식으로 적으며, 멤버 자신의 underlying-proxy는 유지됩니다. 바꿀 선택은 없습니다: 웹 콘솔과 HTTP 제어 API는 멤버를 나열하지만 선택 변경은 거부하며, default=는 효과가 없습니다. HIDDEN=true는 다른 그룹처럼 이 그룹을 숨깁니다.


릴레이 그룹

멤버를 적힌 순서대로 하나의 경로로 연결합니다. 첫 번째 멤버에는 직접(또는 그 멤버 자신의 underlying-proxy를 통해) 연결하고, 이후의 각 멤버에는 그 앞의 멤버들을 거쳐 도달하며, 마지막 멤버가 목적지에 연결합니다. Clash 및 mihomo와 같은 순서입니다.

RelayGroup = relay, Entry, Exit

RelayGroup을 거치는 연결은 기기에서 Entry로, Entry에서 Exit로, Exit에서 목적지로 이어집니다. 목적지에서는 연결이 Exit에서 온 것으로 보입니다.

릴레이 그룹에는 멤버가 두 개 이상 필요하며 select 그룹과 같은 방식으로 적습니다. 멤버는 정책이어도 되고 다른 그룹이어도 됩니다. 첫 번째 멤버는 어떤 프로토콜이든 쓸 수 있습니다. 이후의 멤버는 그 앞의 멤버들을 거쳐 자신의 서버에 연결하므로 체이닝할 수 있는 유형이어야 합니다 — underlying-proxy를 참고하세요. 멤버(또는 멤버 그룹이 현재 선택한 정책)가 체이닝할 수 없으면 연결은 거부되고 로그에 기록되며 절대 직접 전송되지 않습니다. 릴레이 안에서 이후 멤버 자신의 underlying-proxy는 무시됩니다. 그 앞의 멤버들이 곧 그 경로이기 때문입니다. 멤버 가운데 릴레이 그룹은 그 자리에서 자신의 멤버로 펼쳐지며, 전체 경로는 최대 8홉입니다. 멤버 그룹이 현재 선택한 것이 다른 릴레이 그룹이면 그 홉을 연결 시점에 끼워 넣을 수 없으므로 연결은 거부되고 로그에 기록됩니다. 첫 번째 이후의 멤버는 그 앞의 멤버를 거쳐서만 도달할 수 있으며, Chute는 이들을 직접 테스트하지 않습니다. WireGuard, AmneziaWG, SSH는 자신의 상위를 거친 연결 하나를 유지하므로 첫 번째 멤버는 될 수 있지만 그 이후 멤버는 될 수 없습니다. 마지막 멤버의 UDP가 그 앞의 멤버를 거칠 수 있으면 릴레이 그룹은 UDP도 전달합니다. 규칙은 underlying-proxy와 같아서, VMess, VLESS, Trojan, AnyTLS 출구는 어떤 멤버 위에서도, Shadowsocks, SOCKS5, Hysteria2, TUIC, MASQUE 출구는 앞의 멤버가 UDP를 나를 때만 가능합니다. 그렇지 않으면 보낸 UDP는 udp-policy-not-supported-behaviour를 따릅니다. 상태 확인도 없고 선택할 대상도 없습니다.


구독 및 멤버 매개변수

다음 매개변수는 select, url-test, fallback, load-balance 그룹에서 동작합니다(underlying-proxy는 SSID 그룹을 제외한 모든 그룹에서 동작합니다).

[Proxy Group]
Airport = select, policy-path=https://example.com/nodes.list, update-interval=86400, policy-regex-filter="^(HK|JP) \d{1,2}$"
Everything = url-test, include-all-proxies=true
Streaming = fallback, HK-Node, include-other-group=Airport, policy-regex-filter="^HK"
  • policy-path=<URL>(Surge)은 구독으로 그룹 멤버를 채웁니다. Chute는 이를 format=auto인 숨겨진 프록시 제공자로 바꾸며, 그 제공자의 interval은 그룹의 update-interval(기본값 86400)입니다. policy-regex-filter=는 이름이 일치하는 노드만 남깁니다. 숨겨진 제공자는 어떤 제공자 목록에도 나타나지 않고 파일에 기록되지도 않으며, 그룹 줄은 작성한 그대로 저장됩니다.
  • include-all-proxies=true는 [Proxy] 섹션의 모든 정책을 추가하고, include-other-group=<group>(여러 번 사용 가능)은 다른 그룹의 멤버를 재귀적으로 추가합니다. 둘 다 전체 구성을 읽은 뒤 전개되며, 순환은 끊기고 알 수 없는 그룹 이름은 알림만 남깁니다. 저장되는 것은 직접 나열한 멤버입니다. include-other-group은 다른 그룹의 멤버와 제공자를 가져오지만 필터는 가져오지 않습니다: 제공자가 공급하는 노드는 포함하는 쪽 그룹 자신의 filter=, policy-regex-filter=, exclude-type=으로 걸러지며, 위의 Streaming이 필터를 하나 설정한 이유가 그것입니다 — 필터가 없으면 Streaming은 Airport 구독의 모든 노드를 가져갑니다.
  • exclude-type=Shadowsocks|Vmess는 제공자가 기여하는 멤버에서 프로토콜 전체를 제외합니다 — 보통은 클라이언트가 그 위로 UDP를 실어 나르지 못하기 때문입니다. 이름은 |로 구분하며 대소문자를 구분하지 않고 별칭으로도 인식되므로 ss와 Shadowsocks는 같은 종류를 가리킵니다. 직접 나열한 멤버에는 영향을 주지 않으며, 구성을 저장할 때 다시 기록됩니다.
  • underlying-proxy=<policy>(Surge Mac 6.9 / iOS 5.22)은 그룹의 프록시 멤버를 하나의 상위를 거쳐 보냅니다. 직접 나열했거나 policy-path, include-all-proxies, include-other-group으로 들어온 모든 프록시 정책은 파생 정책 "멤버 (via 상위)"로 그룹에 나타나며, 멤버 자신의 underlying-proxy 대신 그 상위를 거쳐 연결합니다. 원래 정책은 다른 곳에서는 전과 같이 쓰입니다. 정책 그룹인 멤버는 영향을 받지 않으며(자신의 underlying-proxy를 설정할 수 있습니다), DIRECT와 REJECT는 그대로 남습니다. 그룹이 자기 자신을 거쳐 체이닝되면 그 그룹을 거치는 연결은 거부되고 로그에 기록됩니다.
  • external-policy-modifier="key=value,…"(Surge)은 policy-path로 가져온 모든 정책에서 이 매개변수들을 덮어씁니다. 예: external-policy-modifier="test-url=http://apple.com/,tfo=true". 구독에서 온 정책에만 적용되므로, 그룹 전체를 상위를 거쳐 보내려면 위의 underlying-proxy를 쓰세요.
  • 매개변수는 따옴표 밖의 쉼표로 나뉘므로, 위 예처럼 쉼표가 들어간 정규식은 따옴표로 묶어야 합니다.
  • evaluate-before-use, no-alert, icon-url, persistent처럼 Chute가 모르는 매개변수는 유지되고 다시 기록되지만 효과는 없습니다.

프록시 제공자

프록시 제공자를 사용하면 외부 소스(파일 또는 URL)에서 프록시 목록을 가져올 수 있습니다. [Proxy Provider] 섹션에 정의됩니다:

[Proxy Provider]
MyProvider = url=https://example.com/proxies.yaml, interval=3600

매개변수

매개변수 필수 설명
type 아니오 http(기본값) 또는 file. 규칙 세트에는 [Ruleset <name>] 섹션으로 쓰는 inline 형태가 따로 있지만, 프록시 제공자에는 인라인 형태가 없어 여기에 type=inline을 써도 멤버가 하나도 추가되지 않습니다
url type=http일 때 예 프록시 목록을 가져올 URL
path type=file일 때 예 프록시 목록의 로컬 파일 경로
interval 아니오 갱신 기준 경과 시간(초) (기본값: 86400). 정책이 로드될 때마다 — 엔진 시작 시와 구성 재로드 시 — 이보다 오래된 캐시 사본을 백그라운드에서 다시 가져오며, 엔진이 실행되는 동안에는 아무것도 갱신되지 않습니다. 0은 캐시 사본을 절대 갱신하지 않지만 캐시가 없으면 최초 한 번은 가져옵니다. 음수 값은 아예 가져오지 않으므로, 마지막으로 성공한 캐시가 없다면 제공자는 비활성 상태로 남습니다
format 아니오 페이로드 형식: native 또는 surge는 [Proxy] 형식의 줄 목록을 읽고, auto이거나 값이 없으면 내용으로 판단하며, mihomo-yaml은 YAML 문서를 읽되 페이로드가 분명히 줄 목록이면 그렇게 읽습니다
filter 아니오 일치하는 프록시 이름만 포함하는 필터 정규식
exclude-filter 아니오 일치하는 프록시 이름을 제외하는 필터 정규식
underlying-proxy 아니오 제공자의 모든 노드가 노드 자신의 상위 대신 이 정책 또는 그룹을 거쳐 연결합니다(mihomo의 override: dialer-proxy). underlying-proxy 참고
policy 아니오 목록을 내려받을 때 거치는 정책 또는 그룹(mihomo의 proxy:). 그룹이면 다운로드가 시작될 때의 선택을 씁니다. 없거나 DIRECT이면 직접 가져오고, 정의되지 않은 이름이면 직접 가져오는 대신 다운로드를 거부합니다

YAML 페이로드는 proxies:(또는 payload:) 목록이 있는 mihomo 스타일 문서이고, 줄 목록 페이로드는 Name = trojan, example.com, 443, password=…처럼 한 줄에 [Proxy] 형식의 정책 하나를 씁니다.

프록시 제공자는 정책 그룹에서 policy-provider: 접두사로 참조됩니다:

[Proxy Group]
MyGroup = select, policy-provider:MyProvider
S. Smart Rabbit LLC © All Rights Reserved            updated 2026-09-29 21:57:05

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

results matching ""

    No results matching ""