-
Notifications
You must be signed in to change notification settings - Fork 45
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
edns参数只支持全局配置,不支持单独配置 #262
Comments
#231 这个应该是一样的问题 |
好,我周末看一下 |
似乎没有什么变化@mokeyish
这是开启全局edns的日志
并且还有个bug,如果同时开启全局edns和上游服务器edns-subnet,那么全局的edns会失效,并且上游服务器自己的ends-subnet也会失效,等于没有配置任何edns,单独开启全局edns关闭上游edns-subnet则正常工作。单独配置上游edns-subnet不生效。 |
这不可能吧,代码里是优先上游服务器的没有才使用全局的,明明白白的写在这,不会反过来。 https://github.com/mokeyish/smartdns-rs/blob/main/src/dns_client.rs#L608-L610 你可以把我截图那代码改动,改上去编译看看。 你可以 dig 命令测试的。 |
图片的改动我手动修改了,但是测试下了,似乎没有变化
返回的是国内CDN的IP,说明并没有遵循edns设置。
部分配置文件
接下来是全局edns设置的测试情况
配置文件,必须把所有上游dns的单独的subnet参数去掉
返回结果,符合预期,返回的IP为海外
从新增的打印日志来看,请求时用的subnet IP确实是参数配置的,但是返回结果却不符合预期。 |
你用这个 https://clouddocs.f5.com/training/community/dns/html/class4/module1/lab3.html 直接用dig 查询,带上client subnet 选项,比较是否与smartdns的一致。 更进一步,可以用 wireshark 抓包看看,是否带上了client subnet 但是这样,上游就必须用 udp 明文协议了。 |
我测试的时候用的就是dig
测试流程,smartdns-rs监听1053/1054,分别对应国内海外域名 |
没理解这个意思,在dig请求上带上subnet,不符合实际场景,实际场景是路由器内进程发送udp请求给smartdns,然后返回结果,这些进程发送请求时也不会带上subnet的。
如果是正常发给阿里dns返回的结果则符合预期
|
@giveup 你是指单个域名支持配置 edns? 这个确实未支持,不过可以加一下。 |
似乎并没有什么变化。 @mokeyish
从日志来看,两个组使用的subnet IP都是
简单使用日志分析了下,初始化每个组使用的subnet确实和配置文件一样,但是到了查询部分,使用的subnet却是同一个。由于实在不懂rust,也没办法进一步分析了。
|
澄清一下优先级 # 全局配置
edns-client-subnet 103.225.87.0/24
# 单独上游配置
server-https https://dns.alidns.com/dns-query -subnet 103.225.87.0/24
# 指定域名配置
- domain-rules /github.com/ --client-subnet 9.9.9.0/24 # 这个我后来改成跟 server 一致了,直接用 subnet,即下面的配置方式
+ domain-rules /github.com/ -subnet 9.9.9.0/24
优先使用 dig 的直接指定 最终发给上游的 subnet 会在这里打印日志的。 Lines 697 to 702 in 9e03c48
你可以验证下,日志是不是打印了,你期望的 subnet ? 如果不是附上你的最小重现配置。以及重现步骤,我找时间再看看。 |
经过日志穷举法...基本定位bug原因。 Lines 458 to 465 in 9e03c48
这里拼接了配置的dns作为缓存的key,如果配置的dns都是同样的URL会导致key重复。 例如这两个组的dns只有subnet不一样
但是创建dns服务器组时,会先从缓存读取,由于key重复,导致返回的dns服务器组是错误的。 Lines 467 to 469 in 9e03c48
解决方法:拼接key时,带上subnet或其他能保证唯一的参数
经过测试,每个dns服务器组返回的IP符合subnet结果。 |
嗯,原来是缓存导致的。确定原因就好解决了,我找时间解决一下。 |
另外,原C版支持 |
这个版本有接口可以看得 Line 15 in 9e03c48
|
交叉编译不通过 @mokeyish
|
直接到 actions 下载 nightly 版本。你这原因可能 rustc 版本低。 |
没修复
|
这日志,没看懂。ns 缓存的 key 是把所以配置都算进哈希了。 |
经过验证。对于
edns-client-subnet
参数只支持全局配置,无法在某个上游服务器单独配置。对于下面这种配置,edns参数不生效
但是启动的时候,也没报错
查看代码发现有相关的单元测试
https://github.com/mokeyish/smartdns-rs/blob/main/src/dns_conf.rs#L1015
The text was updated successfully, but these errors were encountered: