IrineSistiana / mosdns

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

[Bug] ecs插件不工作,同时log中无ecs相关内容 #420

Closed UptonEdward closed 2 years ago

UptonEdward commented 2 years ago

在提交之前,请确认

mosdns 版本

v4.1.4

操作系统

debian 11

Bug 描述和复现步骤

1.在香港 VPS 上开启 mosdns 2.在韩国的 VPS 上 dig +edns @8.8.8.8 ww.microsoft.com +short,得到首尔IP 3.在韩国的 VPS 上 dig +edns @x.x.x.x ww.microsoft.com +short #x.x.x.x为香港 VPS 的 IP 地址,得到香港 IP

使用的配置文件

log:
  level: debug
  file: "./mosdns.log"

plugins:
  - tag: ecs
    type: ecs
    args:
      auto: true

  - tag: forward_remote
    type: fast_forward
    args:
      upstream:
        - addr: tls://8.8.8.8
          trusted: true
          enable_pipeline: true

  - tag: main_sequence
    type: sequence
    args:
      exec:
        - ecs
        - forward_remote
        - _return

servers:
  - exec: main_sequence
    listeners:
      - protocol: udp
        addr: ":53"
      - protocol: tcp
        addr: ":53"

mosdns 的 log 记录

#1.2.3.4 是韩国 VPS 的 IP 地址
2022-07-03T17:37:05.692+0800    info    coremain/mosdns.go:123  loading plugin  {"tag": "ecs", "type": "ecs"}
2022-07-03T17:37:05.692+0800    info    coremain/mosdns.go:123  loading plugin  {"tag": "forward_remote", "type": "fast_forward"}
2022-07-03T17:37:05.692+0800    info    coremain/mosdns.go:123  loading plugin  {"tag": "main_sequence", "type": "sequence"}
2022-07-03T17:37:05.692+0800    info    coremain/server.go:76   starting server {"proto": "udp", "addr": ":53"}
2022-07-03T17:37:05.692+0800    info    coremain/server.go:76   starting server {"proto": "tcp", "addr": ":53"}
2022-07-03T17:37:18.288+0800    debug   bundled_upstream/bundled_upstream.go:70 response received   {"query": "www.microsoft.com. IN A 38270 1 1.2.3.4", "from": "tls://8.8.8.8"}
2022-07-03T17:37:18.288+0800    debug   dns_handler/server_handler.go:88    entry returned  {"query": "www.microsoft.com. IN A 38270 1 1.2.3.4", "status": "responded"}
UptonEdward commented 2 years ago

这个问题和我开的 servers 的 protocol 也没关系,我开过doh、dot,也都是这个结果,同时跟上游的协议也没关系,我试过 udpme://8.8.8.8 和 https://8.8.8.8/dns-query 也是这样,感觉挺奇怪的,好像 ecs 插件被忽略了一样

IrineSistiana commented 2 years ago

没有 log 正常。v4 精简了大量 debug log。

感觉挺奇怪的,好像 ecs 插件被忽略了一样.

最好抓包看 mosdns 出去的请求有没有附加上 ECS,附加的地址是不是正确。

UptonEdward commented 2 years ago

最好抓包看 mosdns 出去的请求有没有附加上 ECS,附加的地址是不是正确。

抓包看了一下,请求里是带了我附加的 ECS 的,但返回 IP 仍然跟 ECS 所属地区没关系。 更离谱的是,我用了许多工具:dig/q/mosdns/nginx反代/dnsproxy,发现 Google/Quad9 等多个支持 ECS 的公共 DNS 都出现了一样的问题,即手动附带 ECS 是没有效果的,他的解析结果只有客户端IP变化才会变化。

我在多个服务器以多种方式都做过测试,出去的请求都带了我需要附带的ECS信息,但是回来的解析结果永远是那个服务器所属地区的 IP。这个情况也是不分域名的,microsoft.com/apple.com/amazon.com都是这样。 这个问题好像直接导致mosdns的 ECS 附带插件失效了,我尝试过 auto 也尝试过手动附带 ECS,都没有效果。

请问作者你那里的 ECS 插件使用起来有什么问题吗?或者你那里用各种方式附加 ECS 信息后请求解析会返回相应的结果吗?

IrineSistiana commented 2 years ago

如果mosdns发包正常那就不是 mosdns 的问题了。

最好留意服务器返回的ECS 的 SCOPE PREFIX-LENGTH 部分。如果这个部分都是0。可以理解为ECS没起作用。