通过科学上网的时候,如果dns不做特别设置的话,淘宝之类有可能返回的是国际站的IP,这样就会特别低效。ChinaDNS 是第一个解决这个问题的。但我还是想再造一个轮子开心一下。
这个项目持续了好长时间了,最早的原型是一年前我开的一坑,当时是用nodejs写的,主要解决的问题是用https dns+edns替代直接查询来避免污染,然后加了一些小功能。发现自动选择上游才是更需要的功能,而且之前代码写的太糟心实在搞不下去了,就用go开坑重写。
自动选择的原理大概是:
- 并发查询国内和国外的上游dns
- 如果国内的上游返回的结果包含一个国内的IPv4地址,那么就认为这个没有被污染;
- 否则使用国外的结果
项目地址: Chenyao2333/freedns-go
Get started
- 从releases下载预编译好的二进制,或者自己编译go代码。
- 运行下面的命令即可在本地53端口建立一个dns服务器。(你需要保证你可以访问8.8.8.8,或者借助sstunnel)
sudo ./freedns-go -f 114.114.114.114:53 -c 8.8.8.8:53 -l 0.0.0.0:53
接下来就可以把本机dns改成127.0.0.1啦! |