summarylogtreecommitdiffstats
path: root/config.yaml
blob: 4bfc49aae65ca100b8a480a1906888685d4f408e (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
log:
  level: info
  file: ""

plugin:
  - tag: main_server # 启动服务器
    type: server
    args:
      entry: main_sequence
      max_concurrent_queries: 0
      server:
        - protocol: udp
          addr: 127.0.0.1:53
        - protocol: tcp
          addr: 127.0.0.1:53
        - protocol: udp
          addr: "[::1]:53"
        - protocol: tcp
          addr: "[::1]:53"

  ################# 可执行插件 ################

  - tag: main_sequence
    type: sequence
    args:
      exec:
        - _default_cache # 缓存
        - if:
            - query_is_ad_domain # 已知的广告域名
          exec:
            - _block_with_nxdomain # 屏蔽
          goto: _end

        - if:
            - query_is_local_domain # 已知的本地域名
            - "!_query_is_common" # 和不常见的请求类型
          exec:
            - forward_local # 用本地服务器
          goto: _end

        - if:
            - query_is_non_local_domain # 已知的非本地域名
          exec:
            - forward_remote # 用远程服务器
          goto: _end

          # 剩下的域名用 IP 分流。
          # 有两种方案:"顺序分流"或"并发分流"。
          # 下面的是"顺序分流"的配置.

        - forward_local # 先请求转发至本地服务器
        - if:
            - response_has_local_ip # 如果应答包含本地 IP
          goto: _end # 就直接采用结果
        - forward_remote # 否则用远程服务器的结果

        # 如果想用类似 ChinaDNS 的"并发分流"逻辑。将上面的配置注释掉,然后用下面的配置。
        # 注意: 如果上游支持连接复用,不要用并发分流。因为服务器延时不可预测,会有问题。

        # - parallel:
        #     - - forward_local                 # 并发请求本地和远程服务器
        #       - if:
        #           - "!response_has_local_ip"  # 如果本地服务器返回的非本地 IP
        #         exec:
        #           - _drop_response            # 应答会被丢弃
        #     - - forward_remote

  - tag: forward_local # 转发至本地服务器的插件
    type: forward
    args:
      upstream:
        - addr: https://223.5.5.5/dns-query

  - tag: forward_remote # 转发至远程服务器的插件
    type: forward
    args:
      upstream:
        - addr: https://dns.google/dns-query
        - addr: https://1.0.0.1/dns-query
        - addr: https://1.1.1.1/dns-query
        - addr: https://2606:4700:4700::1111/dns-query
        - addr: https://2606:4700:4700::1001/dns-query

  ################ 匹配器插件 #################

  - tag: query_is_local_domain # 匹配本地域名的插件
    type: query_matcher
    args:
      domain:
        - ext:/usr/share/v2ray/geosite.dat:cn

  - tag: query_is_non_local_domain # 匹配非本地域名的插件
    type: query_matcher
    args:
      domain:
        - ext:/usr/share/v2ray/geosite.dat:geolocation-!cn

  - tag: query_is_ad_domain # 匹配广告域名的插件
    type: query_matcher
    args:
      domain:
        - ext:/usr/share/v2ray/geosite.dat:category-ads-all

  - tag: response_has_local_ip # 匹配本地 IP的插件
    type: response_matcher
    args:
      ip:
        - ext:/usr/share/v2ray/geoip.dat:cn

include: []