pymumu / smartdns

A local DNS server to obtain the fastest website IP for the best Internet experience, support DoT, DoH. 一个本地DNS服务器,获取最快的网站IP,获得最佳上网体验,支持DoH,DoT。
https://pymumu.github.io/smartdns/
GNU General Public License v3.0
8.25k stars 1.06k forks source link

开启第二服务器使用非udp协议dns被污染 #554

Closed WROIATE closed 1 year ago

WROIATE commented 4 years ago

问题现象

使用第一服务器作为国内,第二服务器国外,国外dns均为tcp、tls、https,并且均设置走代理,国内dns有一个udp,其余也为tcp和https,然后smartdns在启动的一段时间内返回的是正确结果,但在之后过不定时间第二服务器便会被运营商污染返回错误ip,单独检查每个非tls和https的国内dns只有ns-a.ustclug.org返回错误ip,但该dns并未分到第二服务器中

运行环境

  1. 固件型号
    OpenWrt SNAPSHOT / LuCI 17.01 Lienol (git-297a920) adguardhome填写的第一服务器用作去国内广告,作为dnsmasq上游,passwall填写的dns为第二服务器
  2. 运营商
    中国移动

重现步骤

  1. 上游DNS配置。
    
    speed-check-mode tcp:443,tcp:80,ping

server ns-a.ustclug.org -check-edns server 202.141.178.13:5353 -check-edns server 202.38.93.153:5353 -check-edns server 202.141.162.123:5353 -check-edns

server-tcp 9.9.9.9 -group fq_dns -exclude-default-group server-tcp 8.8.8.8 -group fq_dns -exclude-default-group server-tcp 1.0.0.1 -group fq_dns -exclude-default-group server-tcp 208.67.222.222:5353 -group fq_dns -exclude-default-group

server-tls 115.159.131.230 -host-name dns.rubyfish.cn server-tls dns.rubyfish.cn server-tls dns.233py.com -group fq_dns -exclude-default-group server-tls 8.8.8.8 -host-name dns.google -group fq_dns -exclude-default-group

server-tls dns.google -group fq_dns -exclude-default-group

server-tls 1.0.0.1 -host-name 1dot1dot1dot1.cloudflare-dns.com -group fq_dns -exclude-default-group

server-tls 1dot1dot1dot1.cloudflare-dns.com -group fq_dns -exclude-default-group

server-https https://neatdns.ustclug.org/resolve

server-https https://115.159.131.230/resolve -host-name dns.rubyfish.cn -http-host dns.rubyfish.cn

server-https https://dns.rubyfish.cn/dns-query server-https https://dns.containerpi.com/dns-query -group fq_dns -exclude-default-group server-https https://210.17.9.228/dns-query -host-name dns.twnic.tw -http-host dns.twnic.tw

server-https https://dns.twnic.tw/dns-query -group fq_dns -exclude-default-group

server-https https://i.233py.com/dns-query -group fq_dns -exclude-default-group server-https https://9.9.9.9/dns-query -host-name dns9.quad9.net -http-host dns9.quad9.net -group fq_dns -exclude-default-group

server-https https://dns9.quad9.net/dns-query -group fq_dns -exclude-default-group

server-https https://1.0.0.1/dns-query -group fq_dns -exclude-default-group

server-https https://cloudflare-dns.com/dns-query -group fq_dns -exclude-default-group

server-https https://146.112.41.2/dns-query -host-name doh.opendns.com -http-host doh.opendns.com -group fq_dns -exclude-default-group

server-https https://doh.opendns.com/dns-query -group fq_dns -exclude-default-group

![Snipaste_2020-07-15_21-09-17](https://user-images.githubusercontent.com/44677306/87548781-92bba880-c6df-11ea-9674-906a43a36dc8.png)

2. 访问的域名。  
www.google.com
或者路由器内`nslookup -p 第二服务器端口号 www.google.com`,返回错误ip

**信息收集**  
1. 将/var/log/smrtdns.log日志作为附件上传。  
2. 如进程异常,请将coredump功能开启,上传coredump信息文件。  
在自定义界面,开启设置->自定义设置->生成coredump配置,重现问题后提交coredump文件
coredump文件在/tmp目录下

日志没看出问题

[2020-07-15 20:53:30,583][ WARN][ dns_client.c:1889] http server query from 115.159.131.230:443 failed, server return http code : 503, Service [2020-07-15 20:53:35,013][ WARN][ dns_client.c:1889] http server query from 202.141.178.13:443 failed, server return http code : 503, Service

pymumu commented 4 years ago

按你的配置,应该没有问题,你用dig -p 7913 查询一下看看?

WROIATE commented 4 years ago

按你的配置,应该没有问题,你用dig -p 7913 查询一下看看?

一样的结果,返回的运营商的ip Snipaste_2020-07-16_11-57-53

pymumu commented 4 years ago

逐个排查一下,看看是哪个服务器返回的

WROIATE commented 4 years ago

逐个排查一下,看看是哪个服务器返回的

我在问题里说了,查了udp和tcp只有udp的ns-a.ustclug.org服务器返回错误ip,其他tls和https我不知道怎么验证 但这个udp是第一服务器的,为什么查第二服务器会被第一服务器的dns污染

WROIATE commented 4 years ago

逐个排查一下,看看是哪个服务器返回的

现在我把ns-a.ustclug.org这个服务器禁用了,就正常了,但是奇怪的就是为啥查第二会有第一服务器的结果

yutian33 commented 4 years ago

把 ns-a.ustclug.org 添加 -exclude-default-group 试试呢?

WROIATE commented 4 years ago

把 ns-a.ustclug.org 添加 -exclude-default-group 试试呢?

我就是需要他在第一服务器,添加了exclude和禁用没区别啊

yutian33 commented 4 years ago

第二服务器没有勾选跳过缓存?

是不是这个原因呢?

pymumu commented 4 years ago

逐一排查一下吧。 正常情况,TLS,https,是无法伪造的。 另外,不确认的话,可以开启证书校验。这样就能明确是哪个出问题了

WROIATE commented 4 years ago

逐一排查一下吧。 正常情况,TLS,https,是无法伪造的。 另外,不确认的话,可以开启证书校验。这样就能明确是哪个出问题了

请问能否给个例子?我没在readme里找到样例

ibigbug commented 4 years ago

同问,有时候返证书的CN和域名对不上,例如 image

pymumu commented 4 years ago

某个上游返回了污染的地址,可以排除掉有问题的上游

ibigbug commented 4 years ago

除了手工排除有什么好的办法吗?

能否增加推荐的上游列表

lnaxk commented 3 years ago

我是跟WROIATE一样的配置 ad去广告 smart开启第二服务器,我发现了同样的问题.第二个服务器只设置了单独的doh服务器, 开启了缓存 ,解析出google的ip是错误的 证书也验证 dns.google 也设置了hosts 8.8.8.8 只要开启缓存就会获取到第一服务器的解析的ip 关闭缓存就没有问题

lnaxk commented 3 years ago

image

lnaxk commented 3 years ago

image 目前没有开启缓存 在测试(:з」∠)

lnaxk commented 3 years ago

image

缓存没有关闭是上面,关闭缓存是下面 等过缓存失效然后新的记录 也是被污染的ip 且google解析已强制用第二服务器解析

lnaxk commented 3 years ago

@WROIATE 话说你出去是用passwall吗?

WROIATE commented 3 years ago

@WROIATE 话说你出去是用passwall吗?

是的

lnaxk commented 3 years ago

@WROIATE 话说你出去是用passwall吗?

是的

出去时候是否启用了 chinadns?或chnlist?

WROIATE commented 3 years ago

@WROIATE 话说你出去是用passwall吗?

是的

出去时候是否启用了 chinadns?或chnlist?

xtyzhen commented 3 years ago

我想请问你是不是也用了ShadowsocksR Plus+这个插件? 我想问题可能在这里。

pymumu commented 1 year ago

最新版本验证,有问题reopen issue