IrineSistiana / mosdns

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

[BUG] 查询上游QUIC协议报错 reading response from quic://: EOF" #361

Closed mfandcc closed 2 years ago

mfandcc commented 2 years ago

Bug 描述和复现步骤(必填):

自动更新3.9.0后quic协议查询报

warn    main_server dns_handler/server_handler.go:117   entry returned an err   {"query": "google.com. IN A 47808 43 127.0.0.1", "error": "main_sequence: sequence_forward_local: sequence_forward_remote: forward_remote: reading response from quic://127.0.0.1:19953: EOF"}

mosdns quic上游使用dnsproxy,dnsproxy报

1#18588 [debug] got invalid number of questions: 288
1#18588 [debug] github.com/AdguardTeam/dnsproxy/proxy.(*Proxy).logDNSMessage(): OUT: ;; opcode: QUERY, status: SERVFAIL, id: 74
;; flags: qr ra; QUERY: 1, ANSWER: 0, AUTHORITY: 0, ADDITIONAL: 0
;; QUESTION SECTION:
;.  CLASS30054   TYPE274
1#18596 [error] unpacking quic packet: dns: bad rdata
1#18595 [info] got error when accepting a new QUIC stream: Application error 0x2

仅更换版本为3.7.3后正常

mosdns 的版本号(必填):

v3.9.0

操作系统和 CPU 架构(必填):

ubuntu amd64

使用的配置文件(必填):


log:
  level: info
  file: ''

plugin:
  - tag: main_server
    type: server
    args:
      entry:
        - main_sequence
      server:
        - protocol: udp
          addr: 0.0.0.0:5331
        - protocol: tcp
          addr: 0.0.0.0:5331

  - tag: main_sequence
    type: sequence
    args:
      exec:
        - if:
            - query_is_ad_domain
          exec:
            - _block_with_nxdomain
            - _end

        - if:
            - query_is_local_domain
            - '!_query_is_common'
          exec:
            - sequence_forward_local
            - _end

        - if:
            - query_is_non_local_domain
          exec:
            - sequence_forward_remote
            - _end
        - sequence_forward_local
        - if:
            - response_has_local_ip
          exec:
            - _end
        - sequence_forward_remote

  - tag: sequence_forward_local
    type: sequence
    args:
      exec:
        - add_ecs_local
        - forward_local

  - tag: sequence_forward_remote
    type: sequence
    args:
      exec:
        - forward_remote

  - tag: forward_local
    type: forward
    args:
      upstream:
        - addr: https://dns.alidns.com/dns-query
          ip_addr:
            - 223.5.5.5
            - 223.6.6.6

  - tag: forward_remote
    type: forward
    args:
      upstream:
        - addr: quic://127.0.0.1:19953
          trusted: true

  - tag: "add_ecs_local"
    type: ecs
    args:
      auto: false
      force_overwrite: true
      mask4: 24
      mask6: 32
      ipv4: "127.0.0.1"
      ipv6: ""

  - tag: "add_ecs_remote"
    type: ecs
    args:
      auto: false
      force_overwrite: true
      mask4: 24
      mask6: 32
      ipv4: "127.0.0.1"
      ipv6: ""

  - tag: query_is_local_domain
    type: query_matcher
    args:
      domain:
        - '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'

  - tag: response_has_local_ip
    type: response_matcher
    args:
      ip:
        - 'ext:./geoip.dat:cn'

mosdns 的 log 记录:


debug   main_sequence   handler/plugin_wrapper.go:80    executing plugin    {"query": "google.com. IN A 22193 93 127.0.0.1", "tag": "main_sequence"}
debug   query_is_ad_domain  handler/plugin_wrapper.go:63    matching query context  {"query": "google.com. IN A 22193 93 127.0.0.1", "tag": "query_is_ad_domain", "result": false}
debug   query_is_local_domain   handler/plugin_wrapper.go:63    matching query context  {"query": "google.com. IN A 22193 93 127.0.0.1", "tag": "query_is_local_domain", "result": false}
debug   _query_is_common    handler/plugin_wrapper.go:63    matching query context  {"query": "google.com. IN A 22193 93 127.0.0.1", "tag": "_query_is_common", "result": true}
debug   query_is_non_local_domain   handler/plugin_wrapper.go:63    matching query context  {"query": "google.com. IN A 22193 93 127.0.0.1", "tag": "query_is_non_local_domain", "result": false}
debug   sequence_forward_local  handler/plugin_wrapper.go:80    executing plugin    {"query": "google.com. IN A 22193 93 127.0.0.1", "tag": "sequence_forward_local"}
debug   add_ecs_local   handler/plugin_wrapper.go:80    executing plugin    {"query": "google.com. IN A 22193 93 127.0.0.1", "tag": "add_ecs_local"}
debug   forward_local   handler/plugin_wrapper.go:80    executing plugin    {"query": "google.com. IN A 22193 93 127.0.0.1", "tag": "forward_local"}
debug   forward_local   bundled_upstream/bundled_upstream.go:68 response received   {"query": "google.com. IN A 22193 93 127.0.0.1", "from": "https://dns.alidns.com:443/dns-query"}
debug   response_has_local_ip   handler/plugin_wrapper.go:63    matching query context  {"query": "google.com. IN A 22193 93 127.0.0.1", "tag": "response_has_local_ip", "result": false}
debug   sequence_forward_remote handler/plugin_wrapper.go:80    executing plugin    {"query": "google.com. IN A 22193 93 127.0.0.1", "tag": "sequence_forward_remote"}
debug   forward_remote_cf   handler/plugin_wrapper.go:80    executing plugin    {"query": "google.com. IN A 22193 93 127.0.0.1", "tag": "forward_remote"}
warn    main_server dns_handler/server_handler.go:117   entry returned an err   {"query": "google.com. IN A 22193 93 127.0.0.1", "error": "main_sequence: sequence_forward_local: sequence_forward_remote: forward_remote: reading response from quic://127.0.0.1:19953: EOF"}

IrineSistiana commented 2 years ago

dnsproxy 是最新的么?

mfandcc commented 2 years ago

把上游dnsproxy升级为最新后也有同样的问题了,dnsproxy的上游也是quic,看来是dnsproxy的问题

mfandcc commented 2 years ago

https://github.com/AdguardTeam/dnsproxy/issues/234 nextdns.io不适用于新版dnsproxy