DNS: do not use cache when returned DNS result has errors#3784
DNS: do not use cache when returned DNS result has errors#3784
Conversation
|
NXDomain 应该根据 SOA 缓存而不是不缓存。SOA 的 TTL 一般都大于 600,就算是现在写死的 TTL 600 也比不缓存要正常。 |
我在看到600写死之后也想过看soa 然后叫出dig瞟了一样脸滚键盘域名a根返回的ttl是86400 抿嘴无语一会之后 嗯 还是600吧 加个默认false的配置选项其实就能解决问题了 但是又得堆史加配置项 改函数签名把配置传进来 还得把这个操作copy四遍 就为了伺候一小撮灵车dns(而且现在用的好好的现在再加估计也没多少人用) 我更倾向于蒜了 |
|
如果我们从不返回这些 dns err 可以直接不存到 cache 里? |
不存cache和不命中cache 问题没有本质变化 核心到底要不要无视缓存机制往外转发所有无效域名的DNS请求 |
|
有用法不喜欢缓存就不存了?似乎发出了 DNS 请求也没啥大负面影响 |
如果觉得没大影响的话合并就行了 或者我可以按楼上的说法堆垃圾加一个config然后想办法传进来 |
|
能否改成源头那边不存? |
想必事可以的 不过这个的位置更深 要递config的话要改的更多(不递的话就没啥事了) |
|
试一下吧 我也觉得先不用加 config |
唔 好像有一点小问题 |
|
建议让提 #1231 的那位去看看 RFC 2308 而不是在这折腾一个根本不成立的问题。另外那位也没搞清楚 dns 出站和内部的 dns 模块是两回事。
|
看了一下这块确实有点扭曲 先这样吧 感谢! |
见 #1231
原代码里写的是 如果没有found到 就跳过缓存(if err != errRecordNotFound)
但是如1231中的问题 它确实found到了 但是found的是什么? found到了一个
rcode 3(摊手)修改之后只要遇到错误就绕过缓存 重新解析 代码里还豁免了一种情况
dns_feature.ErrEmptyResponse因为这个错误表示没hit对 比如指定解析ipv4 但是解析出来只有v6 这种情况我们它是正常的 不然的话正常单栈v6会被认为解析失败而反复解析但是注意 现在被修改之后对于一些无效的请求 每一次xray都会进行转发而不会cache住 可能会多大量不必要的无效请求
其实原来的行为其实是合理的 不对的地址就是不对 这会不对的地址怎么等会又对了 感觉只有上游瞎玩dnsmasq之类的玩意才会造成这种问题 是否要其他人为这些DNS灵车爱好者买单?