一种无毒的cdn友好递归dns解析器

greendns的Python项目详细描述


PackageBuild StatusCoverage Status

绿色dns

一个DNS递归解析服务器,以避免结果中毒和友好的CDN。它将同时访问DNS服务器,而不是等待所有响应。它比ChinaDNS更高效、更快。

CDN友好意味着解决的IP是最好的(相同的ISP和最近的)。使用edns客户端子网返回ip的外部dns不太准确,特别是对于本地小型isp。

必须至少配置两个DNS服务器。一部分是本地的和有毒的,另一部分是非隔离的(隧道通过vpn或使用opendns 443/5353端口,建议使用dnscrypt-proxy)。

工作原理

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.

它有两个假设,

  • 污染的领域是外国的。
  • A中毒反应的记录是外国的。

安装

pip install greendns

运行

终端命令

greendns -r greendns

守护程序服务

转到services

文件

转到greendns-container

Docker堆栈(推荐)

转到greendns-stack

测试

dig www.google.com @127.0.0.1 -p1053

配置

greendns -r greendns -h
usage: greendns [-h][-r HANDLER][-p PORT][-t TIMEOUT][-l LOGLEVEL][-m MODE][--lds LDS][--rds RDS][-f LOCALROUTE][-b BLACKLIST][--rfc1918][--cache]

optional arguments:
  -h, --help
  -r HANDLER, --handler HANDLER
                        Specify handler class, greendns|quickest (default:
                        None)
  -p PORT, --port PORT  Specify listen port or ip (default: 127.0.0.1:1053)
  -t TIMEOUT, --timeout TIMEOUT
                        Specify upstream timeout (default: 1.5)
  -l LOGLEVEL, --log-level LOGLEVEL
                        Specify log level, debug|info|warning|error (default:
                        info)
  -m MODE, --mode MODE  Specify io loop mode, select|epoll (default: select)
  --lds LDS             Specify local poisoned dns servers (default:
                        223.5.5.5:53,114.114.114.114:53)
  --rds RDS             Specify unpoisoned dns servers (default:
                        tcp:208.67.222.220:5353,9.9.9.9:9953)
  -f LOCALROUTE, --localroute LOCALROUTE
                        Specify local routes file (default:
                        /home/etc/greendns/localroute.txt)
  -b BLACKLIST, --blacklist BLACKLIST
                        Specify ip blacklist file (default:
                        /home/etc/greendns/iplist.txt)
  --rfc1918             Specify if rfc1918 ip is local(default: False)
  --cache               Specify if cache is enabled (default: False)

性能

基准结果

perf.md

剖面图

prof.md

致谢

许可证

这个项目是在麻省理工学院的许可下进行的。请参阅LICENSE文件以获取完整的许可证文本。

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
java使用ObjectOutput/InputStream从自定义位置读/写   Java队列数组只打印出打印方法中for循环中的最后一个元素   java如何使用searchManager搜索和筛选listview   java ValueAnimator更改背景颜色   java什么是AOSP工具链?   序列化Java/Serializable仅覆盖已更改的对象   java Android单例类仅在第二次刷新时更新   将文本追加到JTextPane时,JTextPane的java滚动条不可见   java行为和繁忙指示器   javaspring,Thymeleaf和CSS如何给错误着色   java如何在两个测试类之间共享外部资源?   java Druid longSum度量未填充   按下按钮时,java列表不会显示(+字符串参数“流派”不存在)   java在Hibernate中如何延迟加载子记录?   java为对象提供随机统计信息   java如何使用GWT编辑器框架编辑多值字段?