zfl9 / chinadns-ng

chinadns 重构增强版,支持域名分流、ipset/nftset、UDP/TCP/DoT
GNU Affero General Public License v3.0
1.14k stars 188 forks source link

2024.09.08 版本不定期崩溃 #206

Closed azhuge233 closed 1 month ago

azhuge233 commented 1 month ago

问题描述

ChinaDNS-ng (2024.09.08 x86_64) 不定期出现问题,表现为:

更换过同版本下的 x86_64_v2,也会出错,退回 2024.07.21 后正常 之前几个版本没有出现类似问题

相关日志

系统日志

...
Fri Oct 11 13:14:53 2024 daemon.warn miniupnpd[7329]: upnp_event_process_notify: connect(192.168.16.40:2869): Operation timed out
Fri Oct 11 13:14:53 2024 daemon.warn miniupnpd[7329]: upnp_event_process_notify: connect(192.168.16.40:2869): Operation timed out
Fri Oct 11 13:20:13 2024 kern.info kernel: [527898.271762] chinadns-ng[4417]: segfault at 7f8e35ddc050 ip 00000000002307cd sp 00007fff388857b0 error 4 in chinadns-ng[216000+77000] likely on CPU 1 (core 1, socket 0)
Fri Oct 11 13:20:13 2024 kern.info kernel: [527898.287145] Code: 89 5c 24 50 0f b7 0d 06 c2 fd ff 66 89 4c 24 54 41 89 c5 66 89 44 24 52 48 8d 84 24 1a 01 00 00 48 89 44 24 40 48 8b 44 24 08 <48> 8b 40 10 48 89 44 24 48 83 3d 13 e2 05 00 00 0f 84 80 01 00 00
Fri Oct 11 13:27:02 2024 cron.err crond[15595]: crond (busybox 1.36.0) started, log level 5
Fri Oct 11 13:27:05 2024 cron.err crond[19058]: crond (busybox 1.36.0) started, log level 5
...

内核日志

...
[181328.682215] TCP: request_sock_TCP: Possible SYN flooding on port 5000. Sending cookies.  Check SNMP counters.
[207434.831030] chinadns-ng[30554]: segfault at 7ff3a9468050 ip 00000000002306de sp 00007ffc035b27a0 error 4 in chinadns-ng[216000+77000] likely on CPU 2 (core 2, socket 0)
[207434.849354] Code: 89 5c 24 50 0f b7 0d 45 c2 fd ff 66 89 4c 24 54 41 89 c5 66 89 44 24 52 48 8d 84 24 1a 01 00 00 48 89 44 24 40 48 8b 44 24 08 <48> 8b 40 10 48 89 44 24 48 83 3d 72 eb 05 00 00 0f 84 90 01 00 00
[527898.271762] chinadns-ng[4417]: segfault at 7f8e35ddc050 ip 00000000002307cd sp 00007fff388857b0 error 4 in chinadns-ng[216000+77000] likely on CPU 1 (core 1, socket 0)
[527898.287145] Code: 89 5c 24 50 0f b7 0d 06 c2 fd ff 66 89 4c 24 54 41 89 c5 66 89 44 24 52 48 8d 84 24 1a 01 00 00 48 89 44 24 40 48 8b 44 24 08 <48> 8b 40 10 48 89 44 24 48 83 3d 13 e2 05 00 00 0f 84 80 01 00 00

运行环境

系统信息

https://github.com/xiaorouji/openwrt-passwall/issues/3433 还有一些 Passwall 相关图片

zfl9 commented 1 month ago

构建一个 debug 版本的 chinadns-ng(如下),并确保 openwrt 的 coredump 未禁用。然后复现一下。

zig build -Dmode=debug -Dwolfssl -Dtarget=x86_64-linux-musl -Dcpu=x86_64

zig 使用 0.10.1 版本,构建依赖以及说明见 readme。

zfl9 commented 1 month ago
# 这个时候是 x86_64 还是 x86_64_v2 还是 x86_64_v3 ?
[207434.831030] chinadns-ng[30554]: segfault at 7ff3a9468050 ip 00000000002306de sp 00007ffc035b27a0 error 4 in chinadns-ng[216000+77000] likely on CPU 2 (core 2, socket 0)
[207434.849354] Code: 89 5c 24 50 0f b7 0d 45 c2 fd ff 66 89 4c 24 54 41 89 c5 66 89 44 24 52 48 8d 84 24 1a 01 00 00 48 89 44 24 40 48 8b 44 24 08 <48> 8b 40 10 48 89 44 24 48 83 3d 72 eb 05 00 00 0f 84 90 01 00 00

# 这个时候是 x86_64 还是 x86_64_v2 还是 x86_64_v3 ?
[527898.271762] chinadns-ng[4417]: segfault at 7f8e35ddc050 ip 00000000002307cd sp 00007fff388857b0 error 4 in chinadns-ng[216000+77000] likely on CPU 1 (core 1, socket 0)
[527898.287145] Code: 89 5c 24 50 0f b7 0d 06 c2 fd ff 66 89 4c 24 54 41 89 c5 66 89 44 24 52 48 8d 84 24 1a 01 00 00 48 89 44 24 40 48 8b 44 24 08 <48> 8b 40 10 48 89 44 24 48 83 3d 13 e2 05 00 00 0f 84 80 01 00 00
azhuge233 commented 1 month ago

第一个是 x86_64,第二个是 x86_64_v2

# x86_64
[207434.831030] chinadns-ng[30554]: segfault at 7ff3a9468050 ip 00000000002306de sp 00007ffc035b27a0 error 4 in chinadns-ng[216000+77000] likely on CPU 2 (core 2, socket 0)
[207434.849354] Code: 89 5c 24 50 0f b7 0d 45 c2 fd ff 66 89 4c 24 54 41 89 c5 66 89 44 24 52 48 8d 84 24 1a 01 00 00 48 89 44 24 40 48 8b 44 24 08 <48> 8b 40 10 48 89 44 24 48 83 3d 72 eb 05 00 00 0f 84 90 01 00 00

# x86_64_v2
[527898.271762] chinadns-ng[4417]: segfault at 7f8e35ddc050 ip 00000000002307cd sp 00007fff388857b0 error 4 in chinadns-ng[216000+77000] likely on CPU 1 (core 1, socket 0)
[527898.287145] Code: 89 5c 24 50 0f b7 0d 06 c2 fd ff 66 89 4c 24 54 41 89 c5 66 89 44 24 52 48 8d 84 24 1a 01 00 00 48 89 44 24 40 48 8b 44 24 08 <48> 8b 40 10 48 89 44 24 48 83 3d 13 e2 05 00 00 0f 84 80 01 00 00

退回的版本都是 x86_64,没有退回过 x86_64_v2

zfl9 commented 1 month ago

看了下,没啥有价值的信息,等你用 debug 版本重现,记得打开系统的 coredump 功能,确保能生成 core dump file。

zfl9 commented 1 month ago

chinadns-ng 的 log 文件有吗,看看当时在做什么。

azhuge233 commented 1 month ago

已经把 chinadns-ng 替换成了 debug 版本,在等下一次崩溃生成 coredump Passwall 给 chinadns-ng 的运行配置是有 verbose 的,但是没输出到文件,Passwall 的日志里也没有,所以无法提供

zfl9 commented 1 month ago

好的

battlerxx3 commented 1 month ago

虽然我目前没有遇到,但是我至少在L大群里看到两个人在说新版chinadns-ng会崩溃的问题了,另外passwall那边讨论区也有两个人说DNS会莫名停止运行 https://github.com/xiaorouji/openwrt-passwall/discussions/3406

azhuge233 commented 1 month ago

等到了,下面是 coredump 的下载链接 https://send.vis.ee/download/da0f9eb327e5a281/#eHgbln9n6wRw2WZrP6kdiw

coredump 在 10:52 生成,10:27 我这边的 WAN 接口运营商换 IP 自动重启了一下,应该与崩溃没关系

Snipaste_2024-10-12_11-02-55

这次系统日志和内核日志都没有之前的输出

zfl9 commented 1 month ago

chinadns-ng的debug版本可执行文件也发一下,感谢。

azhuge233 commented 1 month ago

chinadns-ng debug https://send.vis.ee/download/4eef198cc3446580/#G84jyLy02_yZ_eKGdo-m1A

zfl9 commented 1 month ago

找到了一个可疑的地方,但不确定是不是他导致的,我待会改下。

zfl9 commented 1 month ago

对了,把 chinadns-ng.conf 配置文件发我一下吧。

azhuge233 commented 1 month ago

chinadns_ng.conf.zip

zfl9 commented 1 month ago

你的openwrt是不是主路由?我看你上面有提到WAN口拨号之类的,那估计对上了,估计是WAN口的公网上,有程序在端口扫描,碰巧触发了这个bug

azhuge233 commented 1 month ago

你的openwrt是不是主路由?我看你上面有提到WAN口拨号之类的,那估计对上了,估计是WAN口的公网上,有程序在端口扫描,碰巧触发了这个bug

是主路由

zfl9 commented 1 month ago

@azhuge233 帮忙测下dev分支(更到最新),看看修复了没(继续 debug 版本吧,万一有新情况,也方便排查)。

azhuge233 commented 1 month ago

OKOK

wangmice commented 1 month ago

确实是有崩溃问题,看上去是在正常运行,用systemctl restart 都卡死,只能kill -9结束运行,日志看上去这样: 2024-10-10 00:32:06 W [server.zig:666 on_reply] dns.check_reply(udpi://119.29.29.29) failed: invalid reply msg 2024-10-10 00:47:13 W [server.zig:666 on_reply] dns.check_reply(udpi://119.29.29.29) failed: invalid reply msg 结束的时候有这个提示: chinadns.service: Main process exited, code=killed, status=9/KILL 10月 12 20:36:42 nas systemd[1]: chinadns.service: Failed with result 'signal'. 10月 12 20:36:42 nas systemd[1]: Stopped chinadns.service. 10月 12 20:36:42 nas systemd[1]: chinadns.service: Consumed 2d 18h 22min 54.460s CPU time, 3.3M memory peak, 0B memory swap peak. 应该是已经卡死两天了。这两天没任何日志输出。 查询提示一直timeout。用的版本是 ChinaDNS-NG 2024.09.08 d1078ab | wolfssl-5.7.0 | target:x86_64-linux-musl | cpu:x86_64_v3 | mode:fast+lto | https://github.com/zfl9/chinadns-ng

zfl9 commented 1 month ago

你这个应该是同一个问题

wangmice commented 1 month ago

现在有修复吗?自己不会编译

zfl9 commented 1 month ago

chinadns-ng-dev.tgz

azhuge233 commented 1 month ago

@wangmice 这是我编译的最新 dev 分支(ChinaDNS-NG 2024.09.08 d6c0dfc | wolfssl-5.7.0 | target:x86_64-linux-musl | cpu:x86_64 | mode:debug),有条件可以帮忙测试 chinadns-ng-fix.zip

目前只运行了不到 24 小时,没有崩溃,还有待观察

wangmice commented 1 month ago

chinadns-ng-dev.tgz

好的,我测试下。

zfl9 commented 1 month ago

看样子应该没问题了,我先发布个版本吧(见 2024.10.14 版本)。

ywx1983cn commented 1 month ago

看样子应该没问题了,我先发布个版本吧(见 2024.10.14 版本)。

今天passwall 4.78-3更新ChinaDNS-NG 2024.10.14 版本还是有问题 出现tcp udp 未运行,dns运行中 ,只能访问国内网站。退回 2024.07.21 后正常。单节点,所有设置保持默认。

zfl9 commented 1 month ago

看样子应该没问题了,我先发布个版本吧(见 2024.10.14 版本)。

今天passwall 4.78-3更新ChinaDNS-NG 2024.10.14 版本还是有问题 出现tcp udp 未运行,dns运行中 ,只能访问国内网站。退回 2024.07.21 后正常。单节点,所有设置保持默认。

先向pw项目反馈,并确认chinadns是否正常运行(dig测试?)。根据你给的信息,能访问国内网站就说明dns没问题(dns运行中也反应了一点),应该只是可信dns无法访问,导致无法访问国外网站(tcp/udp未运行),估计是代理那边出问题了。

zfl9 commented 1 month ago

先关了。

azhuge233 commented 1 month ago

已经运行一个多星期,可以确认修复了