문서 설정 서브 규칙

서브 규칙

특정 조건을 만족하는 트래픽을 독립적인 서브 규칙 목록으로 보내며, 서브 규칙을 모두 거쳤는데도 매칭되지 않으면 자동으로 메인 규칙으로 돌아가 판단을 계속합니다. 특정 유형의 연결에 별도의 라우팅 로직을 맞춤 설정하기에 적합합니다.

기본 작성법

config.yaml YAML
rules:
  - SUB-RULE,(NETWORK,tcp),rule1
  - SUB-RULE,(NETWORK,udp),sub-rule2
  - MATCH,DIRECT

sub-rules:
  rule1:
    - DOMAIN-SUFFIX,google.com,ss1
    - DOMAIN-SUFFIX,baidu.com,DIRECT
  sub-rule2:
    - IP-CIDR,1.1.1.1/32,REJECT
    - IP-CIDR,8.8.8.8/32,ss1
    - DOMAIN,dns.alidns.com,REJECT

메인 규칙에서 SUB-RULE,(조건),서브규칙이름으로 조건에 매칭되면, 트래픽은 해당 sub-rules 목록으로 보내져 계속 매칭됩니다. 서브 규칙 목록에서 모두 매칭되지 않으면 메인 규칙으로 돌아가 SUB-RULE 줄의 다음 항목부터 계속 판단합니다.

예시로 살펴보기

위 설정을 예로 들면:

  • google.com에 접속하는 TCP 요청첫 번째 SUB-RULE,(NETWORK,tcp),rule1에 매칭되어 rule1로 진입하고, DOMAIN-SUFFIX,google.com,ss1에 매칭되어 ss1로 아웃바운드됩니다
  • youtube.com에 접속하는 UDP(QUIC) 요청두 번째 SUB-RULE,(NETWORK,udp),sub-rule2에 매칭되어 sub-rule2로 진입하지만, sub-rule2에는 youtube.com에 매칭되는 규칙이 없으므로 메인 규칙으로 돌아가 MATCH,DIRECT에 도달합니다

인바운드와 함께 사용

listenerrule 필드를 개별적으로 지정할 수 있어, 해당 인바운드의 트래픽이 메인 규칙의 맨 위부터 매칭을 시작하는 대신 기본적으로 특정 서브 규칙으로 바로 진입하게 할 수 있습니다:

config.yaml YAML
listeners:
  - name: socks5-in-1
    type: socks
    port: 10808
    rule: rule1 # 해당 sub-rule을 찾지 못하면 바로 rules로 폴백합니다