smartdns
smartdns copied to clipboard
关于域名预先获取功能所使用分组问题
问题现象
版本Release 35
配置DNS组为cn,查询时也确实交给cn组,但ttl过期后域名预先获取功能会交给default组查询,这里预期应该交给cn组才对
重现步骤 配置: bind :6054 -group cn rr-ttl 30 prefetch-domain yes
信息收集
[2021-11-16 21:49:32,902][ INFO][ dns_server.c:2792] query server taobao.com from 127.0.0.1, qtype = 1
[2021-11-16 21:49:32,902][DEBUG][ dns_client.c:502 ] send query to group cn
[2021-11-16 21:49:32,902][DEBUG][ dns_client.c:2791] send query to server 223.6.6.6
......
[2021-11-16 21:50:01,564][DEBUG][ dns_server.c:3256] prefetch by cache taobao.com, qtype 1, ttl 30, hitnum 2
[2021-11-16 21:50:01,564][DEBUG][ dns_client.c:496 ] send query to group default
[2021-11-16 21:50:01,564][ERROR][ dns_client.c:2857] Send query to upstream server failed, total server number 0
[2021-11-16 21:50:01,564][ERROR][ dns_server.c:2729] send dns request failed.
serve-expired(过期缓存服务功能)也有相同的问题
我的没有这个问题啊
[2021-11-16 16:21:43,572][DEBUG][ dns_server.c:2766] recv query packet from xxx.xx.x.xxx, len = 28 [2021-11-16 16:21:43,572][DEBUG][ dns_server.c:2774] request qdcount = 1, ancount = 0, nscount = 0, nrcount = 0, len = 28, id = 3, tc = 0, rd = 1, ra = 0, rcode = 0 [2021-11-16 16:21:43,572][ INFO][ dns_server.c:2799] query server www.qq.com from 11.20.3.12, qtype = 28 [2021-11-16 16:21:43,572][ INFO][ dns_server.c:2108] RULE-MATCH, type: 6, domain: www.qq.com, rule: qq.com [2021-11-16 16:21:43,572][DEBUG][ dns_client.c:502 ] send query to group mainland ......... [2021-11-16 16:22:41,662][DEBUG][ dns_server.c:3262] prefetch by cache www.qq.com, qtype 28, ttl 60, hitnum 2 [2021-11-16 16:22:41,663][ INFO][ dns_server.c:2108] RULE-MATCH, type: 6, domain: www.qq.com, rule: qq.com [2021-11-16 16:22:41,663][DEBUG][ dns_client.c:502 ] send query to group mainland
我的没有这个问题啊
[2021-11-16 16:21:43,572][DEBUG][ dns_server.c:2766] recv query packet from xxx.xx.x.xxx, len = 28 [2021-11-16 16:21:43,572][DEBUG][ dns_server.c:2774] request qdcount = 1, ancount = 0, nscount = 0, nrcount = 0, len = 28, id = 3, tc = 0, rd = 1, ra = 0, rcode = 0 [2021-11-16 16:21:43,572][ INFO][ dns_server.c:2799] query server www.qq.com from 11.20.3.12, qtype = 28 [2021-11-16 16:21:43,572][ INFO][ dns_server.c:2108] RULE-MATCH, type: 6, domain: www.qq.com, rule: qq.com [2021-11-16 16:21:43,572][DEBUG][ dns_client.c:502 ] send query to group mainland ......... [2021-11-16 16:22:41,662][DEBUG][ dns_server.c:3262] prefetch by cache www.qq.com, qtype 28, ttl 60, hitnum 2 [2021-11-16 16:22:41,663][ INFO][ dns_server.c:2108] RULE-MATCH, type: 6, domain: www.qq.com, rule: qq.com [2021-11-16 16:22:41,663][DEBUG][ dns_client.c:502 ] send query to group mainland
看日志你使用了domain-rules等配置为特定域名指定了分组,这当然没这个问题 但我这除了(bind :6054 -group cn)设置了分组外再没有其它配置为特定域名指定分组 我预想是到端口6054的查询都由cn组处理
bind :6054 -group cn 你用6054来解析cn组,那设置cn组的dns server的时候有没从默认组删除掉? server 114.114.114.114 -group cn -exclude-default-group
bind :6054 -group cn 你用6054来解析cn组,那设置cn组的dns server的时候有没从默认组删除掉? server 114.114.114.114 -group cn -exclude-default-group
已从默认组删除,默认组也没其它的dns server
[2021-11-16 21:50:01,564][DEBUG][ dns_client.c:496 ] send query to group default [2021-11-16 21:50:01,564][ERROR][ dns_client.c:2857] Send query to upstream server failed, total server number 0 [2021-11-16 21:50:01,564][ERROR][ dns_server.c:2729] send dns request failed.
看了下代码 dns_server.c:2662,好像是因为request->conn中的dns_group没设置造成的。 在save cache时把dns_group存到cache data中,然后prefetch时从cache data取出dns_group设置到request->conn中就行?不知有没有理解错
我认为你说的对。当指定了某一个接口所有查询走某个组时。缓存查询时并不判断原接口的组标记
这个issue貌似还没有修复,不光是过期缓存和域名预加载会多一份从default组走,正常的dns请求也会走一次default组。
@pymumu 这几次升级后,prefetch这块可能是有新的问题了
最新代码验证看看,有问题发log