ドキュメント 設定 サブルール

サブルール

特定の条件を満たすトラフィックを独立したサブルールのリストに送り、サブルールをすべて処理してもマッチしなかった場合は自動的にメインルールにフォールバックして判定を続けます。特定の種類の接続に専用のルーティングロジックを構築したい場合に適しています。

基本的な書き方

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 リストに送られてマッチングが続きます。サブルールのリスト内で1つもマッチしなかった場合は、メインルールに戻り、SUB-RULE の行の次から判定を続けます。

例を追ってみる

上記の設定を例にすると:

  • google.com にアクセスする TCP リクエスト最初の SUB-RULE,(NETWORK,tcp),rule1 にヒットし、rule1 に入り、DOMAIN-SUFFIX,google.com,ss1 にマッチして ss1 経由で出口
  • youtube.com にアクセスする UDP(QUIC)リクエスト2番目の SUB-RULE,(NETWORK,udp),sub-rule2 にヒットし、sub-rule2 に入るが、sub-rule2 には youtube.com にマッチするルールがないため、メインルールにフォールバックし、MATCH,DIRECT に落ち着く

受信設定との併用

listenerには個別に rule フィールドを指定できます。これにより、その受信のトラフィックはメインルールの最上部からマッチングするのではなく、デフォルトで直接特定のサブルールに入るようになります:

config.yaml YAML
listeners:
  - name: socks5-in-1
    type: socks
    port: 10808
    rule: rule1 # 該当する sub-rule が見つからない場合は直接 rules にフォールバックします