一个 python 写的 dns resolver,上游是现有的公共 dns resolver,不依赖 V.P.N。
原理和使用方法可以打开 github 项目页面看,应该比现有的 dns 方案都要好。
最佳使用方式是用 docker stack。
再提供一个 docker stack 配置,greendns-stack
个人在 Linux 下已经用了一段时间了。
最后,欢迎讨论 && Star。
1
hinate 2019-03-09 14:02:06 +08:00 via iPhone
晚上部署试一下
|
2
23f0baf3 2019-03-10 17:17:08 +08:00
https://github.com/pymumu/smartdns
这个也可以考虑,支持平台多包括路由器,协议多包括 TCP,UDP,DOT |
5
taobibi 2019-03-12 13:40:03 +08:00
感谢楼主,二楼的我也打算测试一下,公司已经有一台闲置服务器部署了 dnsmasq,才有 host 列表国内+5353 端口 open dns 的方式一直很不理想,这个打算试试效果
|
6
taobibi 2019-03-12 13:45:29 +08:00
有两个问题,作为 dnsmasq 上游的时候,可以在一个服务器上面同时跑么?
另外如果独立使用的话,是不是需要卸载 dnsmasq 避免端口占用。 目前单独的这台 dns 服务器大概需要维持一千多个终端的 dns 解析 |
7
ylx 2019-03-12 17:40:38 +08:00
docker 下面不知道怎么玩 lede
|
8
faicker OP @taobibi 可以作为 dnsmasq 的上游,改下 greendns 的监听端口,比如 127.0.0.1:54。再在 dnsmasq 里配置上游是 127.0.0.1:54。
greendns 独立对外提供服务的话,要把监听改为 0.0.0.0:53。要把 dnsmasq 停掉。 |
9
faicker OP @ylx 现在这个是 python 版本的,对于 lede 可能占用空间过大(需要 python 环境)。。
等有时间写个 golang 版本,就能解决了。 |
10
gitopen 2019-03-20 09:21:02 +08:00
正在 macOS 上用 CoreDNS。。。
|
11
learningman 2019-03-21 18:52:44 +08:00
golang 的已经有了,https://github.com/AdguardTeam/AdGuardHome
这玩意儿甚至有一个中文的 Web 前端,巨好用 |
12
faicker OP @learningman 不一样。
adguard 是去 ad,支持 DoH/DoT/DNSCrypt,可以做到无污染。 greendns 还能做到解析出来的 IP 对于本地访问是最佳的。举个例子,访问国内网站时,是用的国内的公共 DNS 或者运营商的 DNS,这样解析出来的 IP 是最近且访问速度最快的。 |
13
LazyZhu 2019-03-25 22:35:56 +08:00
|
14
faicker OP @LazyZhu 非也,我这个不是 dns 服务器,overture 跟 pdnsd,dnsmasq 类似,可以作为 greendns 的后端。
用我这个,既解决了 dns 污染的问题,又解决了 IP 最佳的问题。 |
15
learningman 2019-03-30 11:25:18 +08:00
部署了一下
我发现这个如果想在 Windows 上运行需要很多修改 比如说 setup.py 的 data 路径 比如说默认启动时的 route 路径 问题主要出现在不同的文件系统格式和环境变量上,希望添加兼容 |
16
LazyZhu 2019-03-31 16:24:53 +08:00 2
@faicker 解决 IP 最佳的问题 是 DNSChooser/smartdns(通过对解析到的 ip 逐一连接测延迟,选取最佳), 你的最多像 chinadns 那样用 chnroute 区分国内外.
@learningman 推荐两个 chinadns 的替代都比楼主的方便好用 https://github.com/GangZhuo/CleanDNS https://github.com/cherrot/gochinadns |
17
LazyZhu 2019-03-31 16:38:41 +08:00 1
@learningman
另外两个: https://github.com/shawn1m/overture https://github.com/sticnarf/yadd 以上四个都是类似于 chinadns 利用 chnroute 区分国内外解析的且都支持 windows. |
18
learningman 2019-03-31 22:50:27 +08:00
@LazyZhu 我拿来给 ADGuard 做上游了
ADGuard 有前端界面实在是太友好了 |
20
morphyhu 2019-04-08 16:29:34 +08:00
@faicker 刚启动了一个,貌似不是很稳定。faicker/dnscrypt-proxy-2:latest 这个不停的重启。
root@localhost greendns-stack]# docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 063de39cbf81 faicker/dnscrypt-proxy-2:latest "dnscrypt-proxy -con …" 8 seconds ago Up 2 seconds dnscrypt_dnscrypt-proxy-2.1.1nan8qou1vdfr1bsmyic1xben c2f0369c4a9c faicker/greendns:latest "./entrypoint.sh" 9 minutes ago Up 9 minutes dnscrypt_greendns.1.uktbjcz69gxyi2tcdi4axlfoo 6377dfad7305 vimagick/pdnsd:latest "pdnsd" 9 minutes ago Up 9 minutes dnscrypt_pdnsd.1.hwwfz77r41kd29lyz9v759tq2 |
21
morphyhu 2019-04-08 16:38:11 +08:00
[2019-04-08 08:29:54] [INFO] Loading source information from URL [https://raw.githubusercontent.com/DNSCrypt/dnscrypt-resolvers/master/v2/public-resolvers.md]
[2019-04-08 08:29:56] [INFO] Loading source information from URL [https://raw.githubusercontent.com/DNSCrypt/dnscrypt-resolvers/master/v2/public-resolvers.md.minisig] [2019-04-08 08:29:58] [INFO] Loading from [https://raw.githubusercontent.com/DNSCrypt/dnscrypt-resolvers/master/v2/public-resolvers.md] failed [2019-04-08 08:29:58] [INFO] Loading source information from URL [https://download.dnscrypt.info/resolvers-list/v2/public-resolvers.md] [2019-04-08 08:30:00] [INFO] Loading source information from URL [https://download.dnscrypt.info/resolvers-list/v2/public-resolvers.md.minisig] [2019-04-08 08:30:02] [INFO] Loading from [https://download.dnscrypt.info/resolvers-list/v2/public-resolvers.md] failed [2019-04-08 08:30:02] [CRITICAL] Unable to use source [public-resolvers]: [read udp 192.168.216.130:50367->223.5.5.5:53: i/o timeout] [2019-04-08 08:30:02] [FATAL] No servers configured 貌似是公司屏蔽了第三方 DNS 导致。 有个新问题 监听地址如何改为 0.0.0.0 udp 0 0 127.0.0.1:53 0.0.0.0:* 4771/python |
22
faicker OP @morphyhu 在 greendns.env 里添加一行 LISTEN=0.0.0.0:53
然后重新 deploy, docker stack rm dnscrypt docker stack deploy -c ./dnscrypt.yml dnscrypt |
23
Kobayashi 2019-06-10 17:17:15 +08:00
@LazyZhu 这个 yadd 不错,IP 分流外加上游转发(支持 TCP 和 TLS ),看来可以替换 ChinaDNS。因为 overture 好像还不支持导入多个配置,准备暂时 dnsmasq+yadd。
Smartdns 对于解析结果测速不错,但是防不了污染的。它所采取的方案是 IP 黑名单,这个根本不靠谱。另外一个方案,检查结果的 edns option 信息,也只对境外 DNS 返回结果有效。目前有效的防污染方案还是 IP 分流对结果过滤,即要求境内 DNS 返回结果为境内 IP,境外 DNS 返回结果为境外 IP。 |
24
Kobayashi 2019-06-10 17:35:24 +08:00
从功能上看,greendns 好像和 overture, yadd 等并没有太大区别,CDN 友好就是根据 IP 分流选取结果吧。楼上 LazyZhu 举出的几个都带有 IP 分流查询,毕竟大家都是借鉴 ChinaDNS。有些还内置了 TCP 和 TLS 转发支持,也就是内置了防污染查询策略。
另外,楼主这个作品是 forwarding DNS,并不是 recursive DNS。 |
25
NyaMisty 2020-02-14 14:10:06 +08:00
我想问问这个 greendns 到底原理是什么。顺便 github 上面写的是什么玩意,矩阵既然都标出来 abcd 了我倒是想知道下面说的 ac ab bc bd 都是什么东西。
Ref: Github 上 readme 是这么写的 ``` First filter poisoned ip with blocked iplist with -b argument. Second, | A record is local | A record is foreign local and poisoned dns server | a | b unpoisoned dns server | c | d From the matrix, we get the result as follows, ac: use local dns server result ad: use local dns server result bc: impossible. use unpoisoned dns server result bd: use unpoisoned dns server result Conclusion, Using local dns server result if returned A record is local. Using unpoisoned dns server result if returned A record is Foreign. ``` |