为Simple DNSCrypt配置转发规则加速国内域名解析

长期以来一直使用的GeekDNSRubyFish最近一直不稳定,通过GeekDNS的官方群,了解到最近两家又遭到了攻击,短期内无法恢复,不得已又切换回114苟且了几日。从实际使用的体验来说,在国内114DNS最为省心,解析速度快,服务稳定,EDNS-Client-SubnetCDN支持良好。但毕竟是国内的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支持本地CloakingForwarding,所以,在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占用了和内存占用率都相对较低。测试几个国内网站,速度正常,日志如下:

发表评论