https://tools.ietf.org/html/draft-ietf-doh-dns-over-https-13的客户端和代理实现

doh-prox的Python项目详细描述


通过https代理的dns

Build StatusPyPI version

一组python 3脚本,支持指定的通过https代理dns 在IETF Draft draft-ietf-doh-dns-over-https中。

doh提供了一种通过https运行加密dns的方法,该协议可以自由地 当其他加密机制可能被阻止时遍历防火墙。

该项目附带一套4个工具:

  • doh-proxy:通过http2接收doh查询并转发它们的服务。 递归解析器。
  • doh-httpproxy:类似于doh-proxy,但使用http而不是http2。 其主要目的是在反向代理后面运行此操作。
  • doh-stub:侦听dns查询并将其转发到doh服务器的服务。
  • doh-client:对doh服务器执行测试dns查询的工具。

请参阅CONTRIBUTING文件以获取帮助。

doh代理是在IETF Hackathon 100期间创建的,作为概念的证明,不在facebook上使用。

欢迎您使用它,但请注意,支持是有限的,而且是最大的努力。

安装

直接从pypi安装已打包的版本:

$ pip3 install doh-proxy

用法

DOH代理

doh-proxy是响应DOH请求的独立服务器。代理不这样做 dns递归本身并将查询转发到功能齐全的dns 递归服务器或DNS缓存服务器。

通过运行doh-proxy,您可以使用最小的 设置。

$ sudo doh-proxy \
    --upstream-resolver=::1 \
    --certfile=./fullchain.pem \
    --keyfile=./privkey.pem

DOH HttpProxy

doh-httpproxy设计为在反向代理后面运行。在此设置中 反向代理(如NGINX)将处理 DOH客户端的https/http2请求并将其转发给 doh-httpproxy后端。

虽然此设置需要更多的预先设置,但它允许运行doh proxy 在多个核心上没有特权。

$ doh-httpproxy \
    --upstream-resolver=::1 \
    --port 8080\
    --listen-address ::1

doh-httpproxy现在还支持tls,您可以启用传递 参数--certfile--keyfile(就像doh-proxy

DOH存根

doh-stub是在客户端上运行的软件。由 提供本地dns服务器,doh-stub将转发dns请求 使用加密链接接收到DOH服务器。

可以使用以下命令启动存根解析程序:

$ doh-stub \
    --listen-port 5553\
    --listen-address ::1 \
    --domain foo.bar \
    --remote-address ::1

并提出质疑。

$ dig @::1 -p 5553 example.com

DOH客户

doh-client只是一个测试cli,可用于快速向 DOH服务器并转储返回的答案。

$ doh-client  \
    --domain dns.dnsoverhttps.net \
    --qname sigfail.verteiltesysteme.net \
    --dnssec
id 37762
opcode QUERY
rcode SERVFAIL
flags QR RD RA
edns 0
eflags DO
payload 4096;QUESTION
sigfail.verteiltesysteme.net. IN AAAA
;ANSWER
;AUTHORITY
;ADDITIONAL

$ doh-client  \
    --domain dns.dnsoverhttps.net \
    --qname sigok.verteiltesysteme.net \
    --dnssec
id 49772
opcode QUERY
rcode NOERROR
flags QR RD RA AD
edns 0
eflags DO
payload 4096;QUESTION
sigok.verteiltesysteme.net. IN AAAA
;ANSWER
sigok.verteiltesysteme.net. 60 IN AAAA 2001:638:501:8efc::139
sigok.verteiltesysteme.net. 60 IN RRSIG AAAA 5360201801300300022017103103000230665 verteiltesysteme.net. O7QgNZFBu3fULvBXwM39apv5nMehh51f mLOVEsC8qZUyxIbxo4eDLQt0JvPoPpFH 5TbWdlm/jxq5x2/Kjw7yUdpohhiNmdoD Op7Y+RyHbf676FoC5Zko9uOAB7Pp8ERz qiT0QPt1ec12bM0XKQigfp+2Hy9wUuSN QmAzXS2s75k=;AUTHORITY
;ADDITIONAL

开发

要求

  • python>;=3.5
  • aiohttp
  • 空气2
  • dnspython

建筑

doh代理使用python的setuptools来管理依赖项和构建。

要安装其依赖项:

$ python3 setup.py develop

构建:

$ python3 setup.py build

运行单元测试:

$ python3 setup.py test

运行棉绒:

$ python3 setup.py flake8
# Also run flake8 on the testing files
$ flake8 test

在存储库的根目录中,可以分别测试代理、存根和客户端 使用以下命令:

$ sudo PYTHONPATH=. ./dohproxy/proxy.py ...
$ PYTHONPATH=. ./dohproxy/httpproxy.py ...
$ PYTHONPATH=. ./dohproxy/stub.py ...
$ PYTHONPATH=. ./dohproxy/client.py ...

许可证

DOH代理是BSD授权的。

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

推荐PyPI第三方库


热门话题
如何使用Netbeans在Java中创建可执行文件   swing Set不透明(真/假);JAVA   java JPA无法删除具有onotomany关系和cascatype all的实体   java Hibernate自参考映射难题   Java/从字符串到Java代码   java为什么我已经在取整了,却得到了一个无终止小数扩展?   java Wicket onsubmit信息对话框   java如何使用类、类加载器和URL获取资源   java在多模块项目中使用License Maven插件时出错   java HashSet“contains”方法是如何工作的?   图像JavaPNG显示为黑色   java如何在保持内容完整的同时在两个活动之间切换?   JAVA在Tomcat 7.0.27中,WAR无法为Prod正确解包   listview的java onclicklistener   JavaXPages托管Bean可以跨多个数据库工作吗?   java无法停止服务空对象引用错误Android   java将UTF8编码的字符串转换为人类可读的字符串   JavaSpring与JBossSAML的集成   java如何替换AuthorizationCodeInstalledApp类?