문법
Mihomo는 YAML을 설정 파일 형식으로 사용합니다. 여기서는 설정을 작성할 때 사용되는 몇 가지 문법 규칙을 정리했습니다. 주석, 객체/배열, 앵커 참조, 도메인 와일드카드, 포트 범위 작성법을 포함합니다.
기본 규칙
YAML은 대소문자를 구분하며, 들여쓰기로 계층 관계를 표현합니다. 들여쓰기는 공백만 사용할 수 있고 탭은 사용할 수 없습니다. 정확히 몇 개의 공백을 쓰는지는 중요하지 않으며, 같은 레벨의 항목이 왼쪽으로 정렬되어 있으면 됩니다.
에디터에서 "들여쓰기가 맞지 않는데 보기엔 맞는" 오류가 나타난다면, 십중팔구 탭 문자가 실수로 섞여 들어간 경우입니다. 들여쓰기 방식을 확인해보세요.
주석
#로 시작해 줄 끝까지가 주석입니다. # 앞은 반드시 줄의 시작이거나 공백이 있어야 하며, 그렇지 않으면 주석으로 인식되지 않습니다(예를 들어 URL에 포함된 #은 영향을 받지 않습니다).
port: 7890 # http 프록시 포트 socks-port: 7891 # socks 프록시 포트
객체와 배열
객체는 key: value로 표현하며, 콜론 뒤에 공백을 하나 추가해야 합니다. YAML은 JSON의 상위 집합이므로 JSON 스타일 문법도 바로 사용할 수 있으며, 다음 네 가지 작성법은 완전히 동등합니다:
tun: enable: true stack: system auto-route: true auto-detect-interface: true
tun: { enable: true, stack: system, auto-route: true, auto-detect-interface: true }
배열은 -로 시작하는 줄로 표현하며, 한 줄 JSON 작성법 a: [b, c, d]도 지원하고 여러 줄 배열과 동등합니다:
a: - b - c - d
앵커와 참조
&는 설정의 한 부분에 앵커를 붙이는 데 사용하고, *는 이 앵커를 참조하는 데 사용하며, <<는 앵커 내용을 현재 객체에 병합한다는 의미입니다. 여러 프록시 프로바이더나 규칙 프로바이더를 작성할 때 공통 필드를 한 번만 작성하고 앵커로 재사용하면 중복 코드를 많이 줄일 수 있습니다.
p: &p type: http interval: 3600 health-check: enable: true url: https://www.gstatic.com/generate_204 interval: 300 proxy-providers: provider1: <<: *p url: "" path: ./proxy_providers/provider1.yaml provider2: <<: *p type: file path: ./proxy_providers/provider2.yaml
위 내용은 p 앵커의 내용을 provider1과 provider2에 각각 복사해 넣은 것과 동등합니다. 병합 시 중복된 필드가 있으면(예: provider2에서 type을 다시 작성한 경우) 직접 작성한 값이 우선하며 앵커에 의해 덮어써지지 않습니다. 또한 p라는 키 이름 자체는 mihomo에서 유효한 필드가 아니며 앵커를 담아두는 용도일 뿐이므로 해석 시 무시됩니다.
도메인 와일드카드
여기서 말하는 와일드카드는 fake-ip-filter, nameserver-policy 등의 필드에 전용으로 사용되며, 라우팅 규칙의 DOMAIN-WILDCARD와는 다른 것으로 두 문법은 서로 호환되지 않습니다.
| 와일드카드 | 매칭 범위 | 예시 |
|---|---|---|
* | 1단계 도메인만 매칭 | *.baidu.com은 tieba.baidu.com과 매칭되지만 123.tieba.baidu.com이나 baidu.com과는 매칭되지 않습니다 |
+ | 여러 단계를 모두 매칭(접두사 작성법, DOMAIN-SUFFIX와 유사) | +.baidu.com은 baidu.com, tieba.baidu.com, 123.tieba.baidu.com을 모두 매칭합니다 |
. | 여러 단계를 모두 매칭하지만 순수 도메인 자체는 포함하지 않음 | .baidu.com은 tieba.baidu.com과 매칭되지만 baidu.com과는 매칭되지 않습니다 |
와일드카드를 사용할 때는 YAML이 다른 유형으로 해석하지 않도록 인용 부호로 감싸는 것을 권장합니다:
fake-ip-filter: - ".lan" - "xbox.*.microsoft.com" - "+.xboxlive.com" - localhost.ptlogin2.qq.com
도메인 세트 가져오기
일부 필드(예: fake-ip-filter)는 rule-set이나 geosite 세트를 바로 가져오는 것을 지원하며, 작성법은 유형:세트이름입니다:
여기서의 rule-set은 behavior가 domain / classical인 규칙 프로바이더만 지원합니다.
fake-ip-filter: - "rule-set:xxx" - "geosite:xxx"
포트 범위
-로 포트 범위를 표현하고, /나 ,로 여러 포트/포트 범위를 구분하며 혼용해서 작성할 수 있습니다:
# 114-514, 810-1919 두 범위와 단독 65530 포트를 매칭 114-514/810-1919,65530