https://tools.ietf.org/html/draft-ietf-doh-dns-over-https-13的客户端和代理实现
doh-prox的Python项目详细描述
通过https代理的dns
一组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授权的。