-
Notifications
You must be signed in to change notification settings - Fork 190
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
使用 chinadns-ng 替代 dnsmasq 时,需要注意的事项 #165
Comments
在描述问题,不小心点了comment,等会,, |
看你配置,是gfwlist分流? 路由器上使用?mips吗 没网的时候,有去路由器上观察chinadns-ng什么状态没?还在运行?能否正常dig解析域名 |
关了cache就正常? |
是的。是gfwlist分流,之前以为是使用chinafirst,发现有很多国内的域名解析到国外了。所以就改了一下配置。不匹配gfwlist的都走china了。
是在路由器上使用,是x86的openwrt。
没网的时候。chinadns-ng是正在运行的。局域网下的设置是能用dig解析域名的,但只局限于dig。其他客户端就表示没网络。
是的。关了就正常。就慢一点。 |
就是说,出现“没网的时候”,在其他局域网机器上,可以用dig正常解析,但是常规app就是提示没网? |
是的。是的。但是我dig的都只是一些常规的域名。。例如什么www.qq.com www.baidu.com www.163.com等 |
在这种“没网”的情况下,是否试过使用curl、wget测试?能否访问 baidu、google、youtube 之类的(模拟正常解析dns) |
是有的。我常用wget。是可以解析的。也能直接wget到他们的index.html的。dns感觉运行是正常的。 |
你说的wget测试,在什么机器上进行?openwrt路由器上?还是其他局域网机器上?都ok吗? |
路由器上和局域网下都是ok的。局域网里有2台linux设备。 |
那就奇了怪了,出现你说的“无网络”症状时:
手机上获取的网关和dns都是指向这台openwrt路由器吗? 这个透明代理用的是什么插件?这里可能会有问题吗? |
手机上提示没网络。主要集中于高频app。(微信,抖音,头条等) 路由器上,是做了dns 53端口胁持的。所有局域网内设置的dns查询都是被REDIRECT到路由器的53端口的。 透明代理用的是ssrplus。但是国内流量。都是直连的。。而且大半个ssrplus我自己重写过了。iptables上我试过把ssrplus的规则删除。情况依旧。透明代理插件应该没问题。 现在主要的区别就是cache与非cache的区别。。。 |
手机没网的时候,能把那个时间段chinadns-ng日志发出来吗(开一下verbose日志) |
我有与你类似的使用场景,也是透明代理,chinadns-ng作为唯一的dns服务器,但不是openwrt,而是在树莓派上。 开了缓存等功能,也在上面持续跑了快半个月了,最长持续运行时间(未重启)应该有5天左右,没有你说的问题。 需要一些更详细的信息,才能分析(主要是我没法重现):
|
稍等。我写个脚本捕获一下日志。 |
记得把cache开启。配置带上verbose行,启用详细日志 |
dhcp还需要dnamasq呢。是不是dhcp没了 |
不是的dnsmasq没关,只是监听端口改为了0,chinadns-ng监听53而已。 |
可以考虑用mosdns运行一段时间看看有没有问题。 |
那倒不必。只要前面再套上dnsmasq,打开缓存。关掉chinadns-ng的cache 现在不想用dnsmasq去解析dns。。是因为chinadns-ng不出问题的时候是真的快。。 |
看了下 cache 的代码,发现有个地方可能会导致 与某些客户端不兼容。
不确定是否是这个问题导致。
|
但是我直接 更何况,影响的是访问高频的域名。微信,抖音,腾讯视频,爱奇艺等这 APP。这些日常使用频率高的app,应该不会存在NODATA的吧。。 晚上9点的时候我添加了一个参数 下午截了大概3小时的日志,出现无网络情况时。所有的dig,wget,cpu,内存,进程等都是正常的。 |
下午又出现了“无网络”是吗? 我看下log先 |
是的。大概出现在下午5点钟左右,我女放学回来玩手机的时候说,日志上的时间+8小时。 |
这个log的结束时间点是不是就是出故障的那段时间 |
看日志没啥问题。。。 |
其实这个问题在上一个版本的时候就已经有,更早之前的不清楚。那时候还没用chinadns-ng替代dnsmasq。,当时我还跟你说过以为是tc的问题,也以为是edns返回的包超过512字节的问题,才做了第一版的cache调整。
这个log的结束点。。。是被我女儿投诉上不了网后我又把dnsmasq加上去结束chinadns-ng缓存的时候的。
日志是看不出问题,dig,wget等都是正常的。当时我让她试了一些其他app〉小红书等,也是能正常使用的。 |
恩,我先暂定观察6小时,因为昨天关了cache运行16小时没异常。 |
看起来没问题?我改了下cache.zig,去掉zig的hashmap,待会你试试(开缓存)。 |
|
ok,那可以确定是cache.zig的问题了,可能reply数据错位了。 不确定是zig的hashmap问题,还是我使用不当。 |
cache 0和直接注释#cache 10000是一样的么? 一样,cache 选项默认值就是0。0就是不启用缓存。 |
我先放上去开启缓存观察一下。。。 |
@zfl9 还是不行。。不知道是啥问题了,先不弄了。。老母有大意见,。先在前面套个dnsmasq用着先。。 |
那就不知道你这边啥问题了,我也无能为力。 因为我和其他人都是正常使用,没见你这种情况。 关了。。 |
不知道跟我双拨有没有关系。。。。 我老母家是双拨电信千兆,。 我自己家是单拨移动千兆。。。 我自己那的单拨,好像问题不大。虽然也有偶发性的解析问题,但是没有老母家的严重。 |
有可能是 LTO 优化的问题,待会给你构建一个不带 LTO 的版本,试试? |
可以有。。LTO是什么。。。目前关了cache。。套上了dnsmasq,,已经跑了一天多了。。很正常。。 |
链接时优化,今天晚上我和另一个小伙伴测试 x86_64 版本的 chinadns-ng,发现有些问题。 不确定与你的错误是否有关系。 |
哦对的。我老娘那是x86的。电信,双拨,经常反馈有问题。 我自己用的是mipsel,只出现了偶尔的半次打不开阿里云的连接。其他时间很正常。 |
@zfl9 中午的时候换了不带LTO版本的。老娘反馈还是不行。反馈有问题的时候,套上dnsmasq也不行,后来要把chinadns-ng用回原来的4.13带LTO的才可以 目前正常使用的部署是用dnsmasq监听53端口并做缓存,chinadns-ng只做转发查询分流关闭cache。 先不管了。先这样用着。到时想到是什么问题再反馈。。。 |
如果后面有空,记得补充细节,从整个issue来看,还是缺少一个整体的描述,特别是“问题”出现时:
还有个办法,如果可能,建议换个环境测试,先排除是不是被openwrt上的某些东西影响到了。 另外,建议多去了解 DNS 相关的细节知识(虽然我也不太抱有什么希望了),就先这样吧。。。 |
恩,有空再去测了。反正现在套个dnsmasq作缓存。也能用。。。再弄下去。。老母估计会把宽带都取消掉了。。 |
是的,主要看你自己这边了,不想折腾就现在这样也没问题。。。 |
已破案,这个原因主要是dnsmasq的port设置为0后,它将停止dns的功能,这会导致他的dhcp服务不会向客户端提供dhcp_option '6,192.168.0.1'这个东西。。客户端获取不到DNS服务器地址导致无法解析域名。而平时有时能正常使用,是因为ipv6 ra时会给客户端下发路由器的ipv6地址作为dns服务器。当ra更新的时候,,就失效了。 查阅了几个案例。发现有部分用户同样使用adgurad home代替dnsmasq时都会出现同样症状, 如若用chinadns-ng替代dnsmasq,则需要手动给dnsmasq添加 至于缓存问题,,,可能是错觉。。但也有可能是ipv6所导致。。目前还不清楚。只知道添加 还需给普通用户备注提醒。。。 |
总算找到问题原因了哈,我就说这种“奇怪的”现象和 chinadns-ng 应该没关系,因为不符合程序的常理。。
后面我在 readme 补充说明下,防止还有人掉坑。 |
翻了下 dnsmasq 文档: By default, dnsmasq sends some standard options to DHCP clients, the netmask and broadcast address are set to the same as the host running dnsmasq, and the DNS server and default route are set to the address of the machine running dnsmasq. 我猜测 dnsmasq 内部逻辑是这样,当 dnsmasq 的 DNS 功能启用时(可能还有个条件,那就是端口必须是标准的 53),才会自动下发 dns-server 这个 dhcp-option,并且 dns-server 的 IP 是 dnsmasq 所在的主机的 IP。 当这个条件不满足时,比如这个 issue(port=0,关闭了 DNS),就不(自动)下发这个 dns-server option 了,于是就出现了你说的这个问题。。确实挺坑的。 解决方法就是:显式的给出 dhcp-option,不要依赖默认行为。 翻了翻源码,看来和我猜想的差不多: |
我是这样配置 dnsmasq 的 dhcp server 的: pid-file
user=dnsmasq
keep-in-foreground
# port=0 关闭 dns 服务
port=0
# dhcp-range 代表开启 dhcp server
dhcp-range=x.x.x.100,x.x.x.200
# 0.0.0.0 是特殊字段, 代表运行 dnsmasq 的主机的 ip
dhcp-option=option:dns-server,0.0.0.0
dhcp-option=option:router,0.0.0.0 |
省流:请直接拉到最后。
原始comment
症状:
第一天[4月13日]:使用chinadns-ng作为主服务,开启cache,监听53端口,代替dnsmasq。客户端设备表现为无网络,dig没问题,手机就是连不上网。(设备主要是使用国内APP。抖音微信等日常的)
第二天[4月14日-15日]:为了保障家里设置能正常上网,chinadns-ng监听5354端口,关闭chinadns-ng的cache,开启dnsmasq的cache并作为主dns服务,chinadns-ng作为dnamasq的上游,客户端备设使用正常两天
第三天,同上
第四天[4月16日]:因为摆脱不了chinadns-ng的高性能,又把chinadns-ng作为了主服务。设置跟4月13日一样代替dnsmasq,客户端设备表现为无网络,无法连网,还是能dig通
第五天[4月17日]:又改回了**第二天[4月14日-15日]**的设置。客户端备设使用正常
第六天[4月18日]:又把chinadns-ng作为了主服务,但此次关闭了自带的cache。客户端备设使用正常
设备连不上网,表现为:chinadns-ng重启后,能短暂的使用一会。大概过了一个小时,就开始陆陆续续地出现网络无法连接的问题,重启chinadns-ng后,又正常一段时间。
曾经以为,resolver不支持edns或者tc等问题而提出过修改#160 (comment)
也曾经以为是返回的reply过大#160 (comment)
在4月16日测试的时候,我发现上游的223.5.5.5和119.29.29.29返回reply并不带有AUTHORITY和ADDITIONAL,返回的reply肯定不会超过512,于是我把国内的dns设为了
china-dns 223.5.5.5,udp://119.29.29.29
,但情况一样,一个小时左右客户端设置就开始出了无法连接到网络。目前情况就是若想正常使用chinadns-ng作为主服务,就必须把它的cache给关了
配置如下
The text was updated successfully, but these errors were encountered: