모듈

Chute는 재사용 및 공유 가능한 규칙, 스크립트, MitM 호스트, DNS 매핑으로 구성을 확장하기 위해 외부 모듈 파일(.sgmodule)을 지원합니다. 모듈은 Surge 모듈 형식을 따릅니다.

모듈은 [Module] 섹션에 정의됩니다:

[Module]
https://example.com/my-module.sgmodule
/Users/me/.chute/custom-module.sgmodule
~/.chute/another-module.sgmodule

http://와 https:// 모듈은 원격에서 가져오며, 로컬 파일은 스킴 없이 경로만 적습니다 — /path/to/local-module.sgmodule 또는 ~/.chute/local-module.sgmodule — 구성을 다시 저장할 때 기록되는 형태도 이것입니다. file:/// URL로 적어도 동작합니다. 읽을 수 없는 로컬 모듈 파일은 로그에 경고를 남기고 건너뜁니다.

모듈 파일 구조

.sgmodule 파일은 기본 구성 파일과 동일한 구문을 따릅니다. 지원되는 섹션:

섹션 용도
[MITM] MitM 호스트 목록에 호스트명 추가
[Script] JavaScript 스크립트 등록
[URL Rewrite] URL 재작성 규칙 추가
[Header Rewrite] 헤더 재작성 규칙 추가
[Rule] 라우팅 규칙 추가
[Host] DNS 호스트-IP 매핑 추가
[Map Local] 모의 응답 규칙 추가
[Body Rewrite] 본문 재작성 규칙 추가
[General] 몇 가지 목록형 옵션 확장(아래 참고)

호환성을 위해 모듈의 [DNS] 섹션은 [Host]의 별칭으로 허용됩니다.

모듈 메타데이터

모듈은 메타데이터 지시문(#!로 시작하는 줄)을 포함할 수 있습니다:

#!name = My Custom Module
#!desc = Blocks ads and trackers for example.com
#!system = ios,macos
지시문 설명
#!name 모듈 이름 (UI에 표시)
#!desc 모듈 설명
#!system 플랫폼 필터: ios, macos (쉼표로 구분)
#!arguments 기본값과 함께 모듈 변수를 선언 (예: #!arguments = var1:default1, var2:default2)
#!system_version Surge의 최소 시스템 버전. 정보로만 유지되며 강제되지 않음
#!REQUIREMENT Surge의 버전 요구 사항(//!REQUIREMENT로도 씀). 기록되지만 무시됨

#!system은 모듈 편집기에 표시되는 정보성 메타데이터입니다. 현재는 로드를 제한하지 않으며, 모듈은 모든 플랫폼에서 적용됩니다.

#!arguments는 여러 번 나타날 수 있으며, 뒤에 선언된 것이 앞의 것을 덮어씁니다. 모듈 본문의 {{{variable}}} 자리 표시자는 그 변수의 #!arguments 기본값으로 치환되며, 기본값을 선언하지 않았다면 빈 문자열로 치환됩니다. 현재 모듈 인자를 재정의하는 방법을 제공하는 앱은 없으므로, 언제나 선언된 기본값이 적용됩니다.

#!IOS-ONLY, #!MACOS-ONLY, #!TVOS-ONLY를 앞에 붙인 줄은 해당 플랫폼에서만 적용되고 다른 곳에서는 제외됩니다 — 모듈 안이든 구성 파일 자체든 어디에 있어도 마찬가지입니다.

[Rule]
#!IOS-ONLY DOMAIN-SUFFIX,mobile-ads.example,REJECT
#!MACOS-ONLY PROCESS-NAME,Updater,REJECT

앱이 구성을 저장할 때 접두사는 쓰인 그대로 유지됩니다. 이 플랫폼에서 제외된 줄은 파일에서 사라지지도, 주석으로 바뀌지도 않으므로 같은 프로필이 다른 플랫폼에서 계속 동작합니다.

모듈 예제

#!name = Ad Block Module
#!desc = Block common ad domains
#!system = ios,macos

[Rule]
DOMAIN-SUFFIX,doubleclick.net,REJECT
DOMAIN-SUFFIX,googlesyndication.com,REJECT
DOMAIN-SUFFIX,googleadservices.com,REJECT

[Host]
localhost = 127.0.0.1

[MITM]
hostname = *.google-analytics.com

[URL Rewrite]
^https://example\.com/old-api https://example.com/new-api 302

모듈의 hostname 값에 포함된 %APPEND% / %INSERT% 지시문은 제거되고 호스트명은 MitM 목록에 병합됩니다. 호스트명 앞에 붙은 - 제외 접두사는 유지됩니다.

모듈의 [General] 섹션은 %APPEND%(끝에 추가) 또는 %INSERT%(앞에 추가)로 실행 중인 구성의 목록형 옵션 다섯 가지(skip-proxy, tun-excluded-routes, tun-included-routes, dns-server, always-real-ip)를 확장할 수 있습니다. 병합은 다섯 가지 모두에서 이루어집니다. 두 라우트 목록을 어느 플랫폼의 터널이 읽는지는 포함 라우트와 제외 라우트에 설명되어 있습니다. 값은 모듈을 적용할 때 병합되고, 모듈을 제거하거나 비활성화하면 철회됩니다. 목록 전체 교체는 지원되지 않으므로 지시문이 없는 값도 알림과 함께 끝에 추가되며, 그 밖의 [General] 키는 알림과 함께 무시됩니다.

[General]
skip-proxy = %APPEND% *.corp.example, 10.20.0.0/16

모듈 생명주기

  • 모듈은 기본 구성이 파싱된 후 로드됩니다.
  • 모듈의 규칙, 스크립트, MitM 호스트 및 DNS 호스트가 런타임 관리자에 추가됩니다.
  • 모듈의 [Rule] 줄은 Tailscale 자동 규칙 뒤, 구성 자체의 규칙 앞에 모듈 로드 순서대로 놓입니다. Surge와 같으며, 광고 차단 모듈의 REJECT가 구성의 앞선 규칙에 가려지지 않습니다.
  • 모듈의 [Map Local], [Body Rewrite], [General] 병합은 구성을 다시 로드한 뒤 다시 적용됩니다.
  • 모듈이 제거되거나 비활성화되면 해당 모듈의 모든 규칙, 스크립트 및 호스트가 등록 해제됩니다.
  • 원격 모듈 콘텐츠는 터널이 시작될 때 가져오며, 구성 재로드 시 [Module] URL 목록이 변경된 경우에만 다시 가져옵니다.
S. Smart Rabbit LLC © All Rights Reserved            updated 2026-09-29 21:57:05

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

results matching ""

    No results matching ""