Skip to content
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查询类型的EDNS分流,解决多运营商双栈网络环境中的准确性问题 #1860

Open
lonecale opened this issue Nov 21, 2024 · 5 comments

Comments

@lonecale
Copy link

需求应用场景
当前网络环境涉及两个不同的运营商,分别单独管理IPv4和IPv6连接(IPv4由一个运营商负责,IPv6由另一个运营商负责),在使用公共DNS服务(如阿里DNS)时,IPv6请求因运营商问题可能因识别不准确而导致不必要的路由绕行。为解决这一问题,我只能通过EDNS客户子网选项来手动指定不同的出口。

建议的方案
目前,我已使用mosdns按DNS查询类型(QTYPE)配置对应的EDNS

对于smartdns 暂时没发现可以根据QTYPE分流的办法,变相的想法是:
IPv4地址(A记录,QTYPE=1):通过smartdns配置一个端口,指定IPv4的EDNS客户子网。
IPv6地址(AAAA记录,QTYPE=28):通过smartdns配置另一个端口,指定IPv6的EDNS客户子网。
使用支持QTYPE分流请求的DNS工具,将不同类型的请求分发到相应端口。这样可以选择合适的出口运营商,从而避免请求的不必要绕路。

请问:
1.如果单独使用smartdns是否有更优的实现方式?并且可以保留双栈优选?
2.smartdns是否支持接收其他DNS传递的EDNS信息,并将其用于后续查询?

@lonecale lonecale changed the title 基于QTYPE的EDNS分流,解决多运营商双栈网络环境中的准确性问题 基于DNS查询类型的EDNS分流,解决多运营商双栈网络环境中的准确性问题 Nov 21, 2024
@PikuZheng
Copy link
Contributor

设blacklist为0.0.0.0/0,whitelist为::0/0
server ipv4上游 -whitelist -edns…
server ipv6上游 -blacklist -edns…

未测试,理论上应该是成立的

@lonecale
Copy link
Author

lonecale commented Nov 22, 2024

设blacklist为0.0.0.0/0,whitelist为::0/0 server ipv4上游 -whitelist -edns… server ipv6上游 -blacklist -edns…

未测试,理论上应该是成立的

感谢您提供的方案。我仔细考虑了一下,发现可能有一些问题。
按照提议,IPv4配置设置了白名单为 ::0/0,根据文档,这会使我们只接受IPv6地址,,而不是期望的IPv4地址。
对于IPv6的配置,使用了黑名单 0.0.0.0/0,根据文档,这样的设置确实会阻止IPv4地址的返回,这部分是正确的。
但这也意味着IPv4配置不会正确返回IPv4地址,而只会返回IPv6地址。

是否支持 黑白名单 名单都设置相同的ip地址?
例如下面这样
server ipv4上游 -whitelist -edns…
server ipv6上游 -blacklist -edns…
whitelist-ip 0.0.0.0/0
blacklist-ip 0.0.0.0/0

假设这样成立的话,这种设置可能导致DNS请求次数加倍。特别是在双栈环境中,一个域名至少需要进行两次DNS查询(一次为A记录,一次为AAAA记录)。通过这样的配置,每种查询都可能再次触发额外的DNS请求,从而导致至少四次查询。在实际应用中,这很容易触及上游服务的请求限制,例如阿里DNS。

@PikuZheng
Copy link
Contributor

smartdns本来就是向所有上游同时发起请求的,额外设置不会导致流量加倍

@lonecale
Copy link
Author

smartdns本来就是向所有上游同时发起请求的,额外设置不会导致流量加倍

再请教一个问题,我开启了 SmartDNS 的持久化缓存并生成了 cache 文件,请问有什么好的方法可以查看这些文件吗?

@PikuZheng
Copy link
Contributor

我开启了 SmartDNS 的持久化缓存并生成了 cache 文件,请问有什么好的方法可以查看这些文件吗?

smartdns --cache-print /etc/smartdns/cache

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

2 participants