长期以来一直使用的GeekDNS和RubyFish最近一直不稳定,通过GeekDNS的官方群,了解到最近两家又遭到了攻击,短期内无法恢复,不得已又切换回114苟且了几日。从实际使用的体验来说,在国内114DNS最为省心,解析速度快,服务稳定,EDNS-Client-Subnet和CDN支持良好。但毕竟是国内的DNS,总会冷不丁的恶心一下,用着实在难受。
从GeekDNS的官方群公告中得知,GeekDNS的启动脚本已经在Github开源。好奇他们之前解析到国内是如何做的,发现在domestic.conf中,针对特定的域名使用了国内的DNS解析:
forward-zone: name: "qq.com." forward-addr: 101.226.4.6 forward-addr: 218.30.118.6 forward-addr: 123.125.81.6 forward-zone: name: "iteye.com." forward-addr: 101.226.4.6 forward-addr: 218.30.118.6 forward-addr: 123.125.81.6
而Simple DNSCrypt只是UI,核心实际上是dnscrypt-proxy。而dnscrypt-proxy支持本地Cloaking和Forwarding,所以,在GeekDNS挂掉的时候,可用本地的规则进行“半裸奔”。Forward的规则十分简单,在配置文件中指定规则路径即可:
forwarding_rules = 'forwarding-rules.txt'
规则的格式如下:
example.com 192.168.2.44 example.net 114.114.114.114
所以,只要将需要使用114DNS解析的域名加入即可。在Github上有许多成熟的仓库,如dnsmasq-china-list,包括了国内大多数域名、CDN域名,同时还有Apple、Google在国内可以解析的域名。dnsmasq的规则转换也相对简单,替换字符串即可:
# Make forwording-rulse based on dnsmasq-china-list $rules = Get-Content "accelerated-domains.china.conf" $rules += Get-Content "apple.china.conf" $rules += Get-Content "google.china.conf" $rules = $rules.Replace("server=/", "") $rules = $rules.Replace("/114.", " 114.") Set-Content -Path "forwarding-rules.txt" -Value $rules
生成的规则大概有72,000条,使用Simple DNSCrypt导入会直接卡死。稳妥的做法是使用Simple DNSCrypt开启Forwarding,然后手动替换规则文件,最后重启dnscrypt-proxy使之生效即可。即便是添加了那么多规则, dnscrypt-proxy的性能和稳定性并没有太大影响,CPU占用了和内存占用率都相对较低。测试几个国内网站,速度正常,日志如下:
geekdns和rubyfish一个挂了一个速度8行而且裸连不了dlsite(日本acg同人贩售网站,最近被dns染了),没办法用着dns.sb,但是最近国内解析某些网站也开始慢了,老实说dnscrypt这个功能确实好
嗯,另外dnscrypt-proxy支持http和socks5代理,配合forwarding总体解析速度和效果可以接受。