-
Notifications
You must be signed in to change notification settings - Fork 3.9k
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
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灵车爱好者买单?