使用dnscrypt-proxy导致Google Drive、Amazon AWS等CDN及大流量服务速度骤降的解决办法咨询
我完全理解你的困扰——用dnscrypt-proxy加密DNS后,那些依赖Anycast技术的大流量服务(比如AWS、Google Drive、Wetransfer)因为你用的DNS服务器在远程地区,误判了你的实际位置,把你导向了DNS服务器所在地的节点,而不是离你更近的本地节点,直接导致速度暴跌到原来的十分之一左右,太影响使用体验了。
针对这个问题,你可以试试下面几个可行的解决方案:
切换到本地/邻近区域的DNSCrypt服务器
优先选择和你的ISP同区域或者地理位置极近的DNSCrypt认证服务器,这样CDN服务解析时就能识别到正确的本地节点。你可以编辑dnscrypt-proxy的配置文件dnscrypt-proxy.toml:- 要么手动设置
server_names字段,替换成你所在地区的服务器名(可以查看DNSCrypt服务器列表里标注你所在国家/地区的条目); - 要么开启
geoip = true,同时设置max_distance = 500(单位为公里,可根据实际情况调整),让程序自动筛选距离你最近的服务器。
- 要么手动设置
配置特定域名的本地DNS分流
对于那些严重依赖本地节点的服务,单独让它们走你的ISP默认DNS,其他域名继续用dnscrypt-proxy加密解析。在dnscrypt-proxy.toml里添加forwarding_rules规则,示例如下:forwarding_rules = [ '*.drive.google.com -> 你的ISP DNS地址', '*.amazonaws.com -> 你的ISP DNS地址', '*.wetransfer.com -> 你的ISP DNS地址' ]替换其中的“你的ISP DNS地址”为你本地运营商提供的DNS(比如国内常见的114.114.114.114,或者你ISP专属的DNS),这样这些特定域名会直接用本地DNS解析,获取就近的节点,不影响其他域名的加密安全。
启用EDNS Client Subnet (ECS)功能
很多现代DNSCrypt服务器支持ECS,这个功能会把你的IP子网信息发送给DNS服务器,让服务器返回更贴近你实际位置的节点IP,即使DNS服务器在远程,也能避免位置误判。你可以在配置文件里开启edns_client_subnet = true,同时选择标注支持ECS的DNSCrypt服务器即可。优化DNS缓存设置
确保dnscrypt-proxy的缓存功能处于开启状态(默认cache = true),这样重复的DNS请求不会频繁去远程服务器解析,能减少延迟。不过这只是辅助优化,核心还是解决位置误判的问题。
备注:内容来源于stack exchange,提问作者user3450548

