可能 Cache 中存在某些异常,仅有 Apple App Store 受到了影响
问题现象
当 SmartDNS 长时间运行(1~3天不等),打开 Apple App Store 会显示网络异常,必须多次点刷新 App ,或者重启 SmartDNS 才能回复 App Store 的访问。
我查看了日志,解析部分的 debug 没有 error 或者 waring ,均为正常解析,也尝试了去掉广告屏蔽列表,问题依旧。
或者让 Dnsmasq 不监听 53 端口,直接让 SmartDNS 监听 53 端口,该现象更为稳定复现,有时 12 小时内即可复现。
如果设置了 serve-expired yes ,该问题也能复现,但时间至少需要 1 天以上。
运行环境
- 固件型号
Debian12 x86_64
- 运营商
不相关
- smartdns来源以及版本
smartdns.1.2024.06.12-2222.x86_64-linux-all.tar.gz
- 涉及的配置(注意去除个人相关信息)
其中 x.home.arpa 为内网域名,172.16.1.1 为主路由地址,主路由已经设置了放行来自 SmartDNS 服务器地址到任意地址 53 端口的流量。
conf-file /etc/smartdns.d/*.conf
cache-file /tmp/smartdns.cache
log-level notice
bind [::]:6053@lo
bind-tcp [::]:6053@lo
prefetch-domain yes
rr-ttl-min 60
rr-ttl-max 28800
rr-ttl-reply-max 14400
force-qtype-SOA 65
max-query-limit 1024
max-reply-ip-num 24
server 172.16.1.1 -group intranet -exclude-default-group
nameserver /x.home.arpa/intranet
domain-rules /x.home.arpa/ -speed-check-mode none -no-cache
server-tcp 223.5.5.5 -bootstrap-dns
server-tcp 52.80.66.66 -bootstrap-dns
server-tcp 2400:3200::1 -bootstrap-dns
server-tcp 2400:7fc0:849e:200::4 -bootstrap-dns
server-tls dot.pub
server-tls dns.alidns.com
server-tls dot-pure.onedns.net
server-https https://doh.pub/dns-query
server-https https://dns.alidns.com/dns-query
server-https https://doh-pure.onedns.net/dns-query
重现步骤
- 上游DNS配置。
除了主配置文件中的上游,还用了我自己写的 SmartDNS CN 域名加速脚本来生成配置。
https://gitee.com/callmer/smartdns_china_list_installer
server 223.5.5.5 -group flash -exclude-default-group
server 180.184.1.1 -group flash -exclude-default-group
server 119.29.29.29 -group flash -exclude-default-group
server 114.114.114.114 -group flash -exclude-default-group
server 2402:4e00:: -group flash -exclude-default-group
server 2400:3200::1 -group flash -exclude-default-group
每天自动获取 Adlist 并执行一次域名加速脚本(加速脚本中有重启 SmartDNS 的功能)
20 9 * * * /usr/bin/curl --retry-connrefused --retry 5 --retry-delay 5 --retry-max-time 60 -fsSLR -o /etc/smartdns.d/anti-ad.smartdns.conf https://anti-ad.net/anti-ad-for-smartdns.conf
30 9 * * * /usr/bin/bash /opt/smartdns-plugin.sh
- 访问的域名。
Apple App Store 的域名
只能发log看,可以打开audit log。看对应时间返回了什么地址给客户端,导致链接不上。
我也有这种情况 一般 关掉App Store 重新打开就好了
不行就多试几次
为什么不知道...
捕获到了一次日志,但是很长,如果有更好的分享日志的方法麻烦告诉我一下。 大概出现的时间是 16:07 分左右,所以我把前后的日志也都包含进来了。 smartdns-audit.log smartdns.log
PS: 我发现了几个这样的日志:
[2024-09-03 16:07:45,148][DEBUG][ dns_client.c:2871] remote server not supported.
[2024-09-03 16:07:45,149][DEBUG][ dns_client.c:1324] server 54.223.159.81 closed.
经过查看这个是 *.onedns.net 的 DoT 、DoH ,不过这个地址是我最近才加上的,之前一直只有 Alidns 和 Dnspod 的 DoT 、DoH ,也同样是有这个问题,这个问题最早可以追溯到 R45 版本。
没想到 *.onedns.net 竟然没有证书来验证。。。
盲猜一下,不知道是不是和这个也有关: https://github.com/pymumu/smartdns/issues/1236#issuecomment-2246786370
盲猜一下,不知道是不是和这个也有关:
https://github.com/pymumu/smartdns/issues/1236#issuecomment-2246786370
盲猜 关闭缓存应该解决...
盲猜一下,不知道是不是和这个也有关: #1236 (comment)
盲猜 关闭缓存应该解决...
现在 Alidns 和 Dnspod 都有 DNS 限速,关闭缓存,基本上就不太能用了,分分钟就超过限额,然后 DNS query failed
我这也是,搞得我一头雾水,测试了一下,只保留一个提供商的DNS短时间没问题,删除缓存重新启动以后可能恢复,但是多DNS一段时间就无法访问github等等网站了,即使设置了单独的组(cloudeflare,googles dns),看log,在不同的组里面是返回了正确的IP,但是依然无法使用,而且有的无法访问的页面会引用缓存,没法子,只能先单独使用移动的DNS了(呕).
把cache size 改大点 明显好转
把cache size 改大点 明显好转
你改成了多大
把cache size 改大点 明显好转
你改成了多大
29998 现在很少碰到那种情况了
把cache size 改大点 明显好转
你改成了多大
29998 现在很少碰到那种情况了
我的内存是 2GB ,按照代码,应该是 262144 这么个数字吧 ?
{
uint64_t memsize = get_system_mem_size();
if (dns_conf_cachesize >= 0) {
return;
}
if (memsize <= 16 * 1024 * 1024) {
dns_conf_cachesize = 2048; /* 1MB memory */
} else if (memsize <= 32 * 1024 * 1024) {
dns_conf_cachesize = 8192; /* 4MB memory*/
} else if (memsize <= 64 * 1024 * 1024) {
dns_conf_cachesize = 16384; /* 8MB memory*/
} else if (memsize <= 128 * 1024 * 1024) {
dns_conf_cachesize = 32768; /* 16MB memory*/
} else if (memsize <= 256 * 1024 * 1024) {
dns_conf_cachesize = 65536; /* 32MB memory*/
} else if (memsize <= 512 * 1024 * 1024) {
dns_conf_cachesize = 131072; /* 64MB memory*/
} else {
dns_conf_cachesize = 262144; /* 128MB memory*/
}
}
我也不知道 我只是改了后 明显好转
32768
我也不知道 我只是改了后 明显好转
32768
你的内存是多少?
我也不知道 我只是改了后 明显好转
32768
你的内存是多少?
512 路由器 红米6000
如果是 512 的话,默认应该是 131072 ?
不过我也试了一下 32768 这个值,手机过了一晚上没碰,的确这个问题有缓解的迹象,没有出现无法联网的界面。
这么来看,似乎是手动改小缓存容量可以缓解这个问题。
$ sudo smartdns --cache-print /tmp/smartdns.cache | wc -l
3198
目前缓存只吃了 3198 。
如果是 512 的话,默认应该是 131072 ?
不过我也试了一下 32768 这个值,手机过了一晚上没碰,的确这个问题有缓解的迹象,没有出现无法联网的界面。
这么来看,似乎是手动改小缓存容量可以缓解这个问题。
$ sudo smartdns --cache-print /tmp/smartdns.cache | wc -l 3198目前缓存只吃了 3198 。
我是由小改大
这两天我把 force-qtype-SOA 65 这个参数去掉了,似乎也有所帮助。
可以试下关闭特定域名的缓存
# apple app store
domain-rules /itunes.apple.com/ -no-cache
domain-rules /apps.apple.com/ -no-cache
domain-rules /mzstatic.com/ -no-cache
domain-rules /cdn-apple.com/ -no-cache
domain-rules /ocsp2.apple.com/ -no-cache
domain-rules /certs.apple.com/ -no-cache
我这边配置后,iOS/MacOS 的 AppStore 到现在 2 周多没出现过中断了
打开prefetch看看
打开prefetch看看
prefetch-domain yes 这个是开着的呀
这两天我把
force-qtype-SOA 65这个参数去掉了,似乎也有所帮助。
进一步测试了 3 天,还是会出现这个问题,那么应该不是这个参数导致的。
问题依旧,我这里smartdns会将applemusic的地址解析到海外,但是部分服务又是解析到国内,个人感觉可能是苹果国内的cdn的问题
补充siri好像也受波及了
把 rr-ttl-min 改小 会有效果 比如10
# apple cdn
domain-rules /.apple.co/ -nameserver isp -no-cache -speed-check-mode none
domain-rules /.apple.com/ -nameserver isp -no-cache -speed-check-mode none
domain-rules /.apple.com.cn/ -nameserver isp -no-cache -speed-check-mode none
domain-rules /.icloud.com/ -nameserver isp -no-cache -speed-check-mode none
domain-rules /.icloud-content.com/ -nameserver isp -no-cache -speed-check-mode none
domain-rules /.aaplimg.com/ -nameserver isp -no-cache -speed-check-mode none
domain-rules /.apple-mapkit.com/ -nameserver isp -no-cache -speed-check-mode none
domain-rules /.mzstatic.com/ -nameserver isp -no-cache -speed-check-mode none
domain-rules /.apple-dns.net/ -nameserver isp -no-cache -speed-check-mode none
domain-rules /.apple-dns.cn/ -nameserver isp -no-cache -speed-check-mode none
domain-rules /.tl88.net/ -nameserver isp -no-cache -speed-check-mode none
domain-rules /.qtlcdn.com/ -nameserver isp -no-cache -speed-check-mode none
其中 isp 可配置为本地运营商 dns
有没有可能是因为你的网络环境对瞬时打开大量连接有限制?
smartdns默认的测速策略是ping,tcp:80,tcp:443,这就意味着如果上游返回了16个ip,那么会瞬间建立32个tcp连接和16个ping,触发了限制
请问解决了吗,我从46.1用到47还是有这问题,一年了,如果是bug应该会解决吧
我感觉不是bug,就是CDN回溯的问题,“快”的cdn不一定“快”