域名预加载服务故障
问题现象
简要描述问题出现的现象
开启域名预加载,设置最小ttl观察下级adguardhome,发现热门域名超时后并没有发起预加载。
运行环境
- 固件型号
x86 openwrt - 运营商
中国电信 - smartdns来源以及版本 固件预装版本,smart版本应该是比较新的,固件一直有更新最新版本插件
- 涉及的配置(注意去除个人相关信息) 缓存开启预加载,设置条数20000,设置最小ttl600,关闭域名过期服务。选取下级adguardhome请求排行靠前的域名观看记录,发现,域名开始请求,ttl为600,过了ttl一段时间时间后再次请求,ttl都是3,再次请求后才会变成600,且排名靠前的域名都观察过,均如此,因此判断预加载没有生效,而是错误触发了过期缓存服务
重现步骤
-
上游DNS配置。
为阿里腾讯360的doh -
访问的域名。
cn.bing.com umdc.alibaba-inc.com 等等
如11:18返回: CNAME: vip-chinanet-umdc.alibabachengdun.com. (ttl=394) A: 123.183.232.1 (ttl=394) A: 123.183.232.65 (ttl=394)
11:35则是 CNAME: vip-chinanet-umdc.alibabachengdun.com. (ttl=3) A: 123.183.232.1 (ttl=3) A: 123.183.232.65 (ttl=3)
且观察多个靠前域名过期后返回ttl均为3,但是并未启用过期缓存,adg也未启用缓存功能
信息收集
- 将/var/log/smrtdns.log日志作为附件上传(注意去除个人相关信息)。
- 如进程异常,请将coredump功能开启,上传coredump信息文件,同时上传配套的smartdns进程文件。
在自定义界面,开启设置->自定义设置->生成coredump配置,重现问题后提交coredump文件 coredump文件在/tmp目录下
猜测配置文件写得不对或smartdns版本不对
开启测速后,首次查询返回的是3s,因为首次ip可能不是最佳
猜测配置文件写得不对或smartdns版本不对
openwrt,软件包里面smartdns 版本显示:45-1 自定义配置那里是空的 只有高级设置里面设置了缓存大小,启用域名预加载,启用持久化缓存,最小ttl为600,其他均为空或者·未勾选,测速为空,模式为最快响应。首页客户端规则,和ip规则未启用,分流测速为空,其他也没选配配置。依旧无效,均为ttl3。我测试了一下午,发现高级设置内设置不生效,在自定义设置里面手动加入prefetch-domain yes和serve-expired no以后就好了,这是什么情况?
开启测速后,首次查询返回的是3s,因为首次ip可能不是最佳
没有启用测速,全关了openwrt,软件包里面smartdns 版本显示:45-1 自定义配置那里是空的 只有高级设置里面设置了缓存大小,启用域名预加载,启用持久化缓存,最小ttl为600,其他均为空或者·未勾选,测速为空,模式为最快响应。首页客户端规则,和ip规则未启用,分流里测速为空,其他也没选配配置。依旧无效,均为ttl3。我测试了一下午,发现高级设置内设置不生效,在自定义设置里面手动加入prefetch-domain yes和serve-expired no以后就好了,这是什么情况,是高级设置的内容不会生效吗?
开启测速后,首次查询返回的是3s,因为首次ip可能不是最佳
response-mode fastest-response 也会是3s吗?这是否与设计不符(我认为此时应该完全透传上游的结果
开启测速后,首次查询返回的是3s,因为首次ip可能不是最佳
response-mode fastest-response 也会是3s吗?这是否与设计不符(我认为此时应该完全透传上游的结果
高级设置内设置了测速无,最快响应模式,绝大部分是3,少部分是设置的最小ttl的600的值,得在自定义设置框内手动加入prefetch-domain yes和serve-expired no后,ttl呈现随机值,不在固定在3
config smartdns option server_name 'china' option port '6054' option tcp_server '0' option seconddns_server_group 'guowai' option ipv6_server '0' option seconddns_port '7054' option auto_set_dnsmasq '0' option tls_server '0' option doh_server '0' option seconddns_force_https_soa '0' option log_output_mode 'file' option auto_update_week_time '*' option auto_update_day_time '5' option seconddns_tcp_server '0' option dualstack_ip_selection '0' option serve_expired '0' option resolve_local_hostnames '0' option force_https_soa '0' option response_mode 'fastest-response' option bind_device '0' option speed_check_mode 'none' option cache_persist '1' option prefetch_domain '1' option seconddns_no_speed_check '1' option seconddns_no_rule_ipset '1' option seconddns_no_rule_soa '1' option seconddns_no_dualstack_selection '1' option seconddns_no_rule_addr '1' option seconddns_no_rule_nameserver '1' option enabled '1' option cache_size '20000' option log_level 'info' option rr_ttl_min '30' option rr_ttl_max '30' option old_port '6054' option old_enabled '1' option old_auto_set_dnsmasq '0'
config server option enabled '1' option name 'google' option type 'https' option ip 'https://8.8.8.8/dns-query' option server_group 'guowai'
config server option enabled '1' option name 'Cloudflare' option type 'https' option server_group 'guowai' option ip 'https://1.1.1.1/dns-query'
config client-rule option enabled '0' option speed_check_mode 'none' option dualstack_ip_selection '0' option force_https_soa '0'
config domain-rule option speed_check_mode 'none'
config ip-rule option enabled '0'
config server option enabled '1' option name '99' option ip 'https://9.9.9.9/dns-query' option type 'https' option server_group 'guowai'
这是完整配置文件,单独分流特点域名多次测试返回ttl均为3,如youtube,返回CNAME: youtube-ui.l.google.com. (ttl=3) A: 74.125.200.190 (ttl=3) A: 74.125.200.136 (ttl=3) A: 74.125.130.190 (ttl=3) A: 74.125.130.93 (ttl=3) A: 142.251.12.93 (ttl=3) A: 74.125.24.136 (ttl=3) A: 74.125.68.136 (ttl=3) A: 142.250.4.136 (ttl=3)。
smartdns,再次测试,开启日志功能,检检查日志,如果在高级设置内,设置测速模式:无,响应模式:最快,勾选域名预加载 缓存大小设置10,勾选持久化缓存,其他选项均不勾选。下游dns设置分流,只分配youtube域名给smartdns,查看日志发现,域名预加载不生效,下游检查多次请求ttl返回值始终为3,且smartdns上游使用其他dns插件,设置最大ttl为30,发现过期任然不会刷新,在自定义设置内再手动加入一模一样的设置,如下
预加载
prefetch-domain yes
延迟响应
serve-expired no
双栈预选
dualstack-ip-selection no
测速模式
speed-check-mode none
返回模式
response-mode fastest-response 后,日志出现prefetch by cache www.youtube.com, qtype 1, ttl 30, hitnum 1,并且开始规律刷新。因此判断问题原因为高级设置无效