Smartdns和Singbox导致路由器卡死问题的解决

瓦工BIGGERBOX-20-1024

Smartdns和Singbox配合出现问题,导致路由器卡顿、卡死,主要问题出在DNS HTTPS记录的解析问题上。

近期我的Openwrt 路由器使用了天灵的Homeproxy进行科学上网。Homeproxy是基于Sing-box的,我这里使用了Smartdns和Homeproxy配合,开机后会出现死机、卡机的情况。不使用其他工具软件配合,只使用Sing-box内置的功能那么使用起来问题不大。

Sing-box内置了dns功能,在Homeproxy中,所有dns的请求都需要经过Singbox的dns服务器,也就是5333端口。Singbox根据设置的DNS规则调用不同的上游dns服务器进行解析。由于Singbox的dns服务不是专业的dns服务程序,很多高级功能没有,比如域名集合别名、IPset和NFTset集合等等,所以我这里还是用的Smartdns作为Singbox DNS的上游DNS服务器。但是从安装以来,一直存在开机后如果电脑访问网页会卡死的问题,需要不操作一段时间或修改一下端口、缓存等等,才能正常工作。

这次新编译了官方openwrt,开机后访问部分网站没问题,部分网站又发生了以上问题。后直接打开Homeproxy的日志,等级调为warning。可以看到,在开机不久,访问网页会出现成千上万条一样的日志,观察htop,发现cpu直接100%,其中smartdns、Singbox耗用cpu各半。

+0000 2024-08-16 23:25:50 ERROR dns: exchange failed for _7826._https.broadcast.chat.bilibili.com. IN HTTPS: context canceled
+0000 2024-08-16 23:25:50 ERROR dns: exchange failed for _7826._https.broadcast.chat.bilibili.com. IN HTTPS: context canceled
+0000 2024-08-16 23:25:50 ERROR dns: exchange failed for _7826._https.broadcast.chat.bilibili.com. IN HTTPS: context canceled
+0000 2024-08-16 23:25:50 ERROR dns: exchange failed for _7826._https.broadcast.chat.bilibili.com. IN HTTPS: context canceled
+0000 2024-08-16 23:25:50 ERROR dns: exchange failed for _7826._https.broadcast.chat.bilibili.com. IN HTTPS: context canceled
+0000 2024-08-16 23:25:50 ERROR dns: exchange failed for _7826._https.broadcast.chat.bilibili.com. IN HTTPS: context canceled
+0000 2024-08-16 23:25:50 ERROR dns: exchange failed for _7826._https.broadcast.chat.bilibili.com. IN HTTPS: context canceled
+0000 2024-08-16 23:25:50 ERROR dns: exchange failed for _7826._https.broadcast.chat.bilibili.com. IN HTTPS: context canceled
+0000 2024-08-16 23:25:50 ERROR dns: exchange failed for _7826._https.broadcast.chat.bilibili.com. IN HTTPS: context canceled
+0000 2024-08-16 23:25:50 ERROR dns: exchange failed for _7826._https.broadcast.chat.bilibili.com. IN HTTPS: context canceled
+0000 2024-08-16 23:25:50 ERROR dns: exchange failed for _7826._https.broadcast.chat.bilibili.com. IN HTTPS: context canceled

关闭网页后,cpu耗用下降,但是内存占用不降低。达到800M之多。将Homeproxy的日志,等级调为info,再次访问任意网站,不出意外,日志又出现成千上万的同样日志,但是内容不一样了。

+0000 2024-08-17 00:25:38 INFO dns: exchanged pcrec.baidu.com HTTPS . 600 IN HTTPS 0 .
+0000 2024-08-17 00:25:38 INFO dns: exchanged www.baidu.com HTTPS . 600 IN HTTPS 0 .
+0000 2024-08-17 00:25:38 INFO dns: exchanged www.baidu.com HTTPS . 600 IN HTTPS 0 .
+0000 2024-08-17 00:25:38 INFO dns: exchanged www.baidu.com HTTPS . 600 IN HTTPS 0 .
+0000 2024-08-17 00:25:38 INFO dns: exchanged pcrec.baidu.com HTTPS . 600 IN HTTPS 0 .
+0000 2024-08-17 00:25:38 INFO dns: exchanged www.baidu.com HTTPS . 600 IN HTTPS 0 .
+0000 2024-08-17 00:25:38 INFO dns: exchanged pcrec.baidu.com HTTPS . 600 IN HTTPS 0 .
+0000 2024-08-17 00:25:38 INFO dns: exchanged www.baidu.com HTTPS . 600 IN HTTPS 0 .

可以知道,问题一定出现在HTTPS记录上。

DNS的HTTPS记录 是一种新的DNS资源记录类型,它扩展了传统的DNS功能,以支持HTTPS协议的更高级配置。与A记录(IPv4地址)或CNAME记录(别名)不同,HTTPS记录允许域名直接关联到HTTPS服务的各种参数,例如支持的加密协议、使用的证书等。DNS HTTPS(TYPE65)记录的解析,此功能用于快速DNS查询和解决HTTPS链接相关的问题,目前还是草案,一般这种记录可以用于:

比如我们查询google.com的https记录:

root@OpenWrt:~# dig -t HTTPS www.google.com @223.5.5.5 +tls

; <<>> DiG 9.18.27 <<>> -t HTTPS www.google.com @223.5.5.5 +tls
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 56727
;; flags: qr rd; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 1
;; WARNING: recursion requested but not available

;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 1232
; PAD: (87 bytes)
;; QUESTION SECTION:
;www.google.com.                        IN      HTTPS

;; ANSWER SECTION:
www.google.com.         1116    IN      HTTPS   1 . alpn="h2,h3"

;; Query time: 49 msec
;; SERVER: 223.5.5.5#853(223.5.5.5) (TLS)
;; WHEN: Sat Aug 17 13:43:18 CST 2024
;; MSG SIZE  rcvd: 173

root@OpenWrt:~# dig -t HTTPS pcrec.baidu.com @8.8.8.8

; <<>> DiG 9.18.27 <<>> -t HTTPS pcrec.baidu.com @8.8.8.8
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 29174
;; flags: qr rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 1, ADDITIONAL: 0

;; QUESTION SECTION:
;pcrec.baidu.com.               IN      HTTPS

;; ANSWER SECTION:
.                       30      IN      HTTPS   0 .

;; AUTHORITY SECTION:
pcrec.baidu.com.        30      IN      SOA     a.gtld-servers.net. nstld.verisign-grs.com. 1800 1800 900 604800 86400

;; Query time: 0 msec
;; SERVER: 8.8.8.8#53(8.8.8.8) (UDP)
;; WHEN: Sat Aug 17 13:29:47 CST 2024
;; MSG SIZE  rcvd: 138

可见,查询到了https记录。

pcrec.baidu.com,返回了0 .,问题就出在0.的记录上,0 . 表示这是别名记录,但没有别名地址,该HTTPS记录不要用。 Singbox似乎对 0 . 这样的HTTPS记录没有忽略,并尝试在不使用 SVCB 的情况下进行连接,也就不考虑这条HTTPS记录继续连接。Singbox还是继续请求 HTTPS记录 的查询,不断报Context Canceled;也有可能是Smartdns返回给Singbox的值有问题,导致两者不兼容。

可以确定就是因为HTTPS导致了Singbox和smartdns配合出现问题。最后一起将软路由cpu占用到了100%,导致死机。那么解决方法也简单,就是直接禁用smartdns的HTTPS记录解析。不返回给Singbox HTTPS记录,这样Singbox便不再要求smartdns给HTTPS记录。smartdns 自定义设置里面加入:

# 禁止https记录
force-qtype-SOA 65

保存重启一下。果然2者太平无事,软路由又能正常的提供服务了。

技术不断升级,请注意文章时效性。
本站文章,欢迎转发。转载请注明出处:https://www.bandwh.com/net/1796.html

(0)

BandWh.com 折腾之路●一起折腾

上一篇 2024年7月4日 17:37
下一篇 2024年10月25日 15:32
瓦工BIGGERBOX-20-1024

相关推荐

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注

请文明评论!

评论列表(2条)

  • chris
    chris 2025年1月17日 15:56

    我用的Mosdns 貌似和Homeproxy没有这样的问题

    • BandWh.com
      BandWh.com 2025年1月17日 15:58

      @chris不清楚mosdns,可能新版singbox解决了这个问题,以前有的。