相关文章推荐
光明磊落的登山鞋  ·  Python ...·  1 年前    · 
聪明的课本  ·  The WebSocket session ...·  1 年前    · 
坚韧的跑步鞋  ·  java word转html ...·  2 年前    · 

我也分享一个,适用于fakeip网关方案。

mosdns监听5454,在5454端口提供服务
forward_cf 发送带ecs信息的dns请求到8.8.4.4,根据返回的结果判断是否存在cn ip
forward_xinfeng_udp 专门给apple域名服务的dns,为本地dns,优化ios访问速度
forward_local 给cn域名提供服务的dns
forward_remote sing-box或者clash的dns服务端口,国外的域名和没有cn ip返回的域名,都发给此dns

dns处理逻辑
1:geosite_cn域名列表中的,发送到forward_local
2:geosite_apple域名列表中的,发送到forward_xinfeng_udp
3:geosite_no_cn域名列表中的,发送到forward_remote
4:其它域名的逻辑在如下代码中实现,先发送带ecs信息的dns请求至forward_cf,判断结果是否为rcode 2(无返回结果),如果没有结果,
就回落到forward_local解析;然后判断是否有中国ip(在geoip_cn中),如果有结果,就回落到forward_local解析;如果不是以上2种情况,
则发到remote_sequence进行解析。

  • tag: fallback_sequence
    type: sequence
    args:
  • exec: $forward_cf_upstream
  • matches: "rcode 2"
    exec: goto local_sequence
  • matches: "resp_ip $geoip_cn"
    exec: goto local_sequence
  • exec: $remote_sequence
  • 具体的配置
    level: error
    file: "/etc/mosdns/mosdns.log"

    http: "0.0.0.0:9091"

    include: []

    plugins:

    tag: geosite_cn
    type: domain_set
    args:
    files:
    - "/var/mosdns/geosite_cn.txt"

    tag: geoip_cn
    type: ip_set
    args:
    files:
    - "/etc/mosdns/unpack/geoip_cn.txt"

    tag: geosite_apple
    type: domain_set
    args:
    files:
    - "/var/mosdns/geosite_apple.txt"

    tag: geosite_no_cn
    type: domain_set
    args:
    files:
    - "/var/mosdns/geosite_geolocation-!cn.txt"

    tag: whitelist
    type: domain_set
    args:
    files:
    - "/etc/mosdns/rule/whitelist.txt"

    tag: blocklist
    type: domain_set
    args:
    files:
    - "/etc/mosdns/rule/blocklist.txt"

    tag: greylist
    type: domain_set
    args:
    files:
    - "/etc/mosdns/rule/greylist.txt"

    tag: ddnslist
    type: domain_set
    args:
    files:
    - "/etc/mosdns/rule/ddnslist.txt"

    tag: hosts
    type: hosts
    args:
    files:
    - "/etc/mosdns/rule/hosts.txt"

    tag: redirect
    type: redirect
    args:
    files:
    - "/etc/mosdns/rule/redirect.txt"

    tag: adlist
    type: domain_set
    args:
    files:
    - "/etc/mosdns/unpack/disable-ads.txt"

    tag: local_ptr
    type: domain_set
    args:
    files:
    - "/etc/mosdns/rule/local-ptr.txt"

    tag: lazy_cache
    type: cache
    args:
    size: 20000000
    lazy_cache_ttl: 259200000
    dump_file: /etc/mosdns/cache.dump
    dump_interval: 3600

    tag: reject_3
    type: sequence
    args:

  • exec: reject 3
  • tag: reject_blocklist
    type: sequence
    args:

  • exec: query_summary reject_blocklist
  • exec: $reject_3
  • tag: reject_adlist
    type: sequence
    args:

  • exec: query_summary reject_adlist
  • exec: $reject_3
  • tag: reject_ptrlist
    type: sequence
    args:

  • exec: query_summary reject_ptrlist
  • exec: $reject_3
  • tag: reject_qtype65
    type: sequence
    args:

  • exec: query_summary reject_qtype65
  • exec: $reject_3
  • tag: forward_cf
    type: forward
    args:
    concurrent: 3
    upstreams:
    - addr: "tls://8.8.4.4:853"
    socks5: "10.10.10.4:7891"
    enable_pipeline: false
    insecure_skip_verify: false
    idle_timeout: 30
    enable_http3: false

    tag: forward_xinfeng_udp
    type: forward
    args:
    concurrent: 2
    upstreams:
    - addr: "127.0.0.1:8055"

    tag: forward_local
    type: forward
    args:
    concurrent: 1
    upstreams:
    - addr: "127.0.0.1:8055"
    enable_pipeline: false
    insecure_skip_verify: false
    idle_timeout: 10

    tag: forward_remote
    type: forward
    args:
    concurrent: 1
    upstreams:
    - addr: "10.10.10.4:7874"
    enable_pipeline: false
    insecure_skip_verify: false
    idle_timeout: 10
    enable_http3: false

    tag: modify_ttl
    type: sequence
    args:

  • exec: ttl 0-0
  • tag: modify_ddns_ttl
    type: sequence
    args:

  • exec: ttl 5-5
  • tag: local_sequence
    type: sequence
    args:

  • exec: $forward_local
  • tag: remote_sequence
    type: sequence
    args:

  • exec: prefer_ipv4
  • exec: $forward_remote
  • tag: forward_cf_upstream
    type: sequence
    args:

  • exec: prefer_ipv4
  • exec: ecs 119.167.219.177
  • exec: $forward_cf
  • tag: has_resp_sequence
    type: sequence
    args:

  • matches: qname $ddnslist
    exec: $modify_ddns_ttl
  • matches: "!qname $ddnslist"
    exec: $modify_ttl
  • matches: has_resp
    exec: accept
  • tag: query_is_ddns_domain
    type: sequence
    args:

  • matches: qname $ddnslist
    exec: $local_sequence
  • tag: query_is_local_domain
    type: sequence
    args:

  • matches: qname $geosite_cn
    exec: $local_sequence
  • tag: query_is_no_local_domain
    type: sequence
    args:

  • matches: qname $geosite_no_cn
    exec: $remote_sequence
  • tag: query_is_whitelist_domain
    type: sequence
    args:

  • matches: qname $whitelist
    exec: $local_sequence
  • tag: query_is_greylist_domain
    type: sequence
    args:

  • matches: qname $greylist
    exec: $remote_sequence
  • tag: query_is_reject_domain
    type: sequence
    args:

  • matches: qname $blocklist
    exec: $reject_blocklist
  • matches: qname $adlist
    exec: $reject_adlist
  • matches:
  • qtype 12
  • qname $local_ptr
    exec: $reject_ptrlist
  • matches: qtype 65
    exec: $reject_qtype65
  • tag: query_is_non_local_ip
    type: sequence
    args:

  • exec: $forward_local
  • matches: "!resp_ip $geoip_cn"
    exec: drop_resp
  • tag: apple_domain_fallback
    type: fallback
    args:
    primary: query_is_non_local_ip
    secondary: forward_xinfeng_udp
    threshold: 100
    always_standby: true

    tag: query_is_apple_domain
    type: sequence
    args:

  • matches: "!qname $geosite_apple"
    exec: return
  • exec: $apple_domain_fallback
  • tag: fallback_sequence
    type: sequence
    args:

  • exec: $forward_cf_upstream
  • matches: "rcode 2"
    exec: goto local_sequence
  • matches: "resp_ip $geoip_cn"
    exec: goto local_sequence
  • exec: $remote_sequence
  • tag: main_sequence
    type: sequence
    args:

  • exec: $hosts
  • exec: jump has_resp_sequence
  • matches:
  • "!qname $ddnslist"
  • "!qname $blocklist"
  • "!qname $adlist"
  • "!qname $local_ptr"
    exec: $lazy_cache
  • exec: $redirect
  • exec: jump has_resp_sequence
  • exec: $query_is_apple_domain
  • exec: jump has_resp_sequence
  • exec: $query_is_ddns_domain
  • exec: jump has_resp_sequence
  • exec: $query_is_whitelist_domain
  • exec: jump has_resp_sequence
  • exec: $query_is_reject_domain
  • exec: jump has_resp_sequence
  • exec: $query_is_greylist_domain
  • exec: jump has_resp_sequence
  • exec: $query_is_local_domain
  • exec: jump has_resp_sequence
  • exec: $query_is_no_local_domain
  • exec: jump has_resp_sequence
  • exec: $fallback_sequence
  • tag: udp_server
    type: udp_server
    args:
    entry: main_sequence
    listen: ":5454"

    tag: tcp_server
    type: tcp_server
    args:
    entry: main_sequence
    listen: ":5454"

    - exec: $private_sequence - matches: "resp_ip $geoip_cn" exec: goto local_sequence # 这句也可以不要 # 好像应该把- exec: accept 这一行改成下面的,意思是,如果返回国内ip就去local_sequence ,不是就丢弃,触发secondary - exec: drop_resp 或者这样直接点 - exec: $local_sequence - matches: "!resp_ip $geoip_cn" # 取反,不是国内,直接丢弃 exec: drop_resp # fallback - tag: fallback type: fallback args: primary: fallback_sequence secondary: remote_sequence threshold: 2000 always_standby: true