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
7.94k stars 1.05k forks source link

通过address强制解析的2个IP地址怎么去探测这2个地址是否正常,验证不生效 #1547

Open maojianyou opened 8 months ago

maojianyou commented 8 months ago

问题现象
简要描述问题出现的现象 address /www.xiaohongshu.com/212.64.115.101,1.1.1.1 speed-check-mode ping,tcp:80,tcp:443 解析后结果能在 212.64.115.101 1.1.1.1 这2个IP之间进行轮询,但如果其中一个地址ping或者80,443不通,我就需要剔除这个不通地址,但通过 address /www.xiaohongshu.com/212.64.115.101,1.1.1.1 speed-check-mode ping,tcp:80,tcp:443 这个后缀命令然后看日志及抓包没看到存在探测功能,这个功能能否实现 image

运行环境

  1. 固件型号
    xen虚拟机
  2. 运营商
    电信
  3. smartdns来源以及版本 smartdns 1.2023.08.11-1937
  4. 涉及的配置(注意去除个人相关信息) bind [::]:53 -no-speed-check -force-aaaa-soa address /www.xiaohongshu.com/212.64.115.101,1.1.1.1 speed-check-mode ping,tcp:80,tcp:443

重现步骤

  1. 上游DNS配置。
    bind [::]:53 -no-speed-check -force-aaaa-soa bind-tls [::]:53

    tcp空闲

    tcp-idle-time 120 address /www.xiaohongshu.com/212.64.115.101,1.1.1.1 speed-check-mode ping,tcp:80,tcp:443

  2. 访问的域名。
    www.xiaohongshu.com

信息收集

PikuZheng commented 8 months ago

一个域名的多个配置应使用 domain-rules。可以试试 domain-rules -a 1.1.1.1,2.2.2.2 -c ping 之类的

PikuZheng commented 8 months ago

如果能确保两个地址至少有一个生效,将其同时提供给客户端即可,第一个不通时客户端会自己去连第二个的

maojianyou commented 8 months ago

一个域名的多个配置应使用 domain-rules。可以试试 domain-rules -a 1.1.1.1,2.2.2.2 -c ping 之类的

注释#address /www.xiaohongshu.com/212.64.115.101,1.1.1.1 speed-check-mode ping,tcp:80,tcp:443 后 然后添加domain-rules /www.xiaohongshu.com/ -a 212.64.115.101,1.1.1.1 -c speed-check-mode ping,tcp:80,tcp:443
解析地址还是这2个,但还是没有进行这2个地址探测,那是不是说明这个-c speed-check-mode ping,tcp:80,tcp:443 是不生效的 不会去探测源站是不是网络正常

maojianyou commented 8 months ago

如果能确保两个地址至少有一个生效,将其同时提供给客户端即可,第一个不通时客户端会自己去连第二个的

这种也存在单点故障,比如解析第一个地址能通,解析第二个地址不能通,客户端没这么智能的,因为他们不会判断解析出来的地址是不是通,不通直接故障了

PikuZheng commented 8 months ago

然后添加domain-rules /www.xiaohongshu.com/ -a 212.64.115.101,1.1.1.1 -c speed-check-mode ping,tcp:80,tcp:443 解析地址还是这2个,但还是没有进行这2个地址探测,那是不是说明这个-c speed-check-mode ping,tcp:80,tcp:443 是不生效的 不会去探测源站是不是网络正常

证实。address指定的ip是不测速的。 address多个ip测速排序问题可以考虑采用第二服务器多做一次查询

maojianyou commented 8 months ago

然后添加domain-rules /www.xiaohongshu.com/ -a 212.64.115.101,1.1.1.1 -c speed-check-mode ping,tcp:80,tcp:443 解析地址还是这2个,但还是没有进行这2个地址探测,那是不是说明这个-c speed-check-mode ping,tcp:80,tcp:443 是不生效的 不会去探测源站是不是网络正常

证实。address指定的ip是不测速的。 address多个ip测速排序问题可以考虑采用第二服务器多做一次查询

其实我想的是,如果我强制解析比如1.1.1.1,1.1.1.2,1.1.1.3 这3个地址轮询没有问题,就是假如某一天其中1.1.1.3地址不通了,但还是会正常轮询给客户端,客户端没有识别解析出来的1.1.1.3是否正常,照样会解析到1.1.1.3,从而访问会导致故障,如果可以新增探测,后续解析3个地址1.1.1.3会排序到最后,等于不通的地址不会优先直接给客户端解析结果,避免故障