IrineSistiana / mosdns

一个 DNS 转发器
GNU General Public License v3.0
2.96k stars 336 forks source link

使用了V3,log里很多警告记录[BUG] #235

Closed ShadowEmbrace closed 2 years ago

ShadowEmbrace commented 2 years ago

出现了什么问题 虽然也可以用,但是log警告确实很多, 简要描述一下问题的表现,以及执行了什么操作导致了问题的出现: 发现把dns服务器删得只剩- addr: 'https://1.1.1.1/dns-query' 之后故障消失,不过我不记得以前用iij和nextdns有问题啊 把nextdns和iij换成tls协议之后也没有报错了 mosdns 的 log 记录:

2022-01-03T14:29:36.384+0800 warn forward_remote bundled_upstream/bundled_upstream.go:91 upstream failed {"query": "www.bing.com. IN A 18529 63 127.0.0.1:xxxx", "from": "https://public.dns.iij.jp:443/dns-query", "error": "couldn't do a GET request to 'https://public.dns.iij.jp:443/dns-query', cause: Get \"https://public.dns.iij.jp:443/dns-query?dns=SGEBAAABAAAAAAAAA3d3dwRiaW5nA2NvbQAAAQAB\": read tcp xxx.xxx.xxx.xxx:xxxx->103.2.57.5:443: wsarecv: An existing connection was forcibly closed by the remote host.", "errorVerbose": "couldn't do a GET request to 'https://public.dns.iij.jp:443/dns-query', cause: Get \"https://public.dns.iij.jp:443/dns-query?dns=SGEBAAABAAAAAAAAA3d3dwRiaW5nA2NvbQAAAQAB\": read tcp xxx.xxx.xxx.xxx:xxxx->103.2.57.5:443: wsarecv: An existing connection was forcibly closed by the remote host.\n at github.com/AdguardTeam/dnsproxy/upstream.(dnsOverHTTPS).exchangeHTTPSClient()\n\tgithub.com/AdguardTeam/dnsproxy@v0.39.12/upstream/upstream_doh.go:96\n at github.com/AdguardTeam/dnsproxy/upstream.(dnsOverHTTPS).Exchange()\n\tgithub.com/AdguardTeam/dnsproxy@v0.39.12/upstream/upstream_doh.go:59\n at github.com/IrineSistiana/mosdns/v2/dispatcher/plugin/executable/forward.(upstreamWrapper).Exchange()\n\tgithub.com/IrineSistiana/mosdns/v2/dispatcher/plugin/executable/forward/forward.go:138\n at github.com/IrineSistiana/mosdns/v2/dispatcher/pkg/bundled_upstream.(BundledUpstream).ExchangeParallel.func1()\n\tgithub.com/IrineSistiana/mosdns/v2/dispatcher/pkg/bundled_upstream/bundled_upstream.go:77\n at runtime.goexit()\n\truntime/asm_amd64.s:1581"}

环境

描述一下问题出现的环境,便于复现以更快定位问题。必须包含:

mosdns 的版本号(mosdns -v3):

操作系统和平台: win10 64位 使用的配置文件:

  - tag: 'main_sequence'
    type: sequence
    args:
      exec:
        - if:
            - query_is_ad_domain    # 已知的广告域名
          exec:
            - _block_with_nxdomain  # 生成 NXDOMAIN 应答
            - _return               # 返回。不再执行后续插件。

        - mem_cache      # 运行缓存插件。放在这里就可以避免缓存到无用的广告域名。

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

        - if:
            - query_is_non_local_domain  # 已知的非本地域名
          exec:
            - _prefer_ipv4               # 优先 IPv4
            - forward_remote             # 用远程服务器
            - _return

        # 剩下的未知域名用 IP 分流。详细分流原理请参考 `fallback` 的工作流程。
        - primary:
            - forward_local     # 本地服务器为主。
            - if:
                - '!response_has_local_ip'  # 过滤掉非本地的 IP。
              exec:
                - _drop_response
          secondary:
            - _prefer_ipv4
            - forward_remote
          fast_fallback: 200  # 这里建议设置成 local 服务器正常延时的 2~5 倍。
                              # 这个延时保证了 local 延时偶尔变高时,其结果不会被 remote 抢答。
                              # 如果 local 超过这个延时还没响应,可以假设 local 出现了问题。
                              # 这时用就采用 remote 的应答。单位: 毫秒。
          always_standby: true

  # 缓存
  - tag: 'mem_cache'
    type: 'cache'
    args:
      size: 1024

  # 修改应答 ttl
  - tag: 'modify_ttl'
    type: 'ttl'
    args:
      minimal_ttl: 300
      maximum_ttl: 3600

  # 转发请求至本地服务器的插件
  - tag: 'forward_local'
    type: forward
    args:
      upstream:
        - addr: 'tls://dot.pub'
          ip_addr: 
            - '162.14.21.56'
            - '162.14.21.178'
        - addr: 'tcp://202.100.199.8'
        - addr: '202.100.192.68'
        - addr: 'tls://dns.alidns.com'
          ip_addr:
            - '223.5.5.5'
            - '223.6.6.6'
      bootstrap:
        - 'https://223.5.5.5/dns-query'
  # 转发请求至远程服务器的插件
  - tag: 'forward_remote'
    type: forward
    args:
      upstream:
        - addr: 'https://public.dns.iij.jp/dns-query'
          ip_addr:  
            - '103.2.57.5'
            - '103.2.57.6'
        - addr: 'https://1.1.1.1/dns-query'
      bootstrap:
        - 'https://223.5.5.5/dns-query'        

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

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

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

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

  # 匹配本地 IP 的插件
  - tag: 'response_has_local_ip'
    type: response_matcher
    args:
      ip:
        - 'ext:./geoip.dat:cn'
IrineSistiana commented 2 years ago

大概率是网不稳。