{ "info": { "author": "Manu Bretelle", "author_email": "chantra@fb.com", "bugtrack_url": null, "classifiers": [ "Development Status :: 3 - Alpha", "Intended Audience :: Developers", "License :: OSI Approved :: BSD License", "Programming Language :: Python :: 3.5", "Programming Language :: Python :: 3.6", "Topic :: Internet :: Name Service (DNS)", "Topic :: Internet :: WWW/HTTP :: HTTP Servers", "Topic :: Security :: Cryptography", "Topic :: Utilities" ], "description": "# DNS Over HTTPS Proxy\n\n[![Build Status](https://travis-ci.org/facebookexperimental/doh-proxy.svg?branch=master)](https://travis-ci.org/facebookexperimental/doh-proxy)\n[![PyPI version](https://badge.fury.io/py/doh-proxy.svg)](https://badge.fury.io/py/doh-proxy)\n\nA set of python 3 scripts that supports proxying DNS over HTTPS as specified\nin the [IETF Draft draft-ietf-doh-dns-over-https](https://tools.ietf.org/html/draft-ietf-doh-dns-over-https-13).\n\nDOH provides a way to run encrypted DNS over HTTPS, a protocol which can freely\ntraverse firewalls when other encrypted mechanism may be blocked.\n\nThe project comes with a set of 4 tools:\n\n* [doh-proxy](#doh-proxy): A service that receives DOH queries over HTTP2 and forwards them\nto a recursive resolver.\n* [doh-httpproxy](#doh-httpproxy): Like `doh-proxy` but uses HTTP instead of HTTP2.\nThe main intent is to run this behind a reverse proxy.\n* [doh-stub](#doh-stub): A service that listens for DNS queries and forwards them to a DOH server.\n* [doh-client](#doh-client): A tool to perform a test DNS query against DOH server.\n\nSee the `CONTRIBUTING` file for how to help out.\n\nDOH Proxy was created during [IETF Hackathon 100](https://www.ietf.org/how/runningcode/hackathons/100-hackathon/) as a proof-of-concept and is not used at Facebook.\n\nYou are welcome to use it, but be aware that support is limited and best-effort.\n\n## Installing\n\nTo install an already packaged version directly from PyPi:\n\n```shell\n$ pip3 install doh-proxy\n```\n\n## Usage\n\n### doh-proxy\n\n`doh-proxy` is a stand alone server answering DOH request. The proxy does not do\nDNS recursion itself and rather forward the query to a full-featured DNS\nrecursive server or DNS caching server.\n\nBy running `doh-proxy`, you can get and end-to-end DOH solution with minimal\nsetup.\n\n```shell\n$ sudo doh-proxy \\\n --upstream-resolver=::1 \\\n --certfile=./fullchain.pem \\\n --keyfile=./privkey.pem\n```\n\n### doh-httpproxy\n\n`doh-httpproxy` is designed to be running behind a reverse proxy. In this setup\na reverse proxy such as [NGINX](https://nginx.org/) would be handling the\nHTTPS/HTTP2 requests from the DOH clients and will forward them to\n`doh-httpproxy` backends.\n\nWhile this setup requires more upfront setup, it allows running DOH proxy\nunprivileged and on multiple cores.\n\n\n```shell\n$ doh-httpproxy \\\n --upstream-resolver=::1 \\\n --port 8080 \\\n --listen-address ::1\n```\n\n`doh-httpproxy` now also supports TLS, that you can enable passing the \nargs `--certfile` and `--keyfile` (just like `doh-proxy`)\n\n### doh-stub\n\n`doh-stub` is the piece of software that you would run on the clients. By\nproviding a local DNS server, `doh-stub` will forward the DNS requests it\nreceives to a DOH server using an encrypted link.\n\nYou can start a stub resolver with:\n\n```shell\n$ doh-stub \\\n --listen-port 5553 \\\n --listen-address ::1 \\\n --domain foo.bar \\\n --remote-address ::1\n```\n\nand query it.\n\n```shell\n$ dig @::1 -p 5553 example.com\n```\n\n### doh-client\n\n`doh-client` is just a test cli that can be used to quickly send a request to\na DOH server and dump the returned answer.\n\n```shell\n$ doh-client \\\n --domain dns.dnsoverhttps.net \\\n --qname sigfail.verteiltesysteme.net \\\n --dnssec\nid 37762\nopcode QUERY\nrcode SERVFAIL\nflags QR RD RA\nedns 0\neflags DO\npayload 4096\n;QUESTION\nsigfail.verteiltesysteme.net. IN AAAA\n;ANSWER\n;AUTHORITY\n;ADDITIONAL\n\n$ doh-client \\\n --domain dns.dnsoverhttps.net \\\n --qname sigok.verteiltesysteme.net \\\n --dnssec\nid 49772\nopcode QUERY\nrcode NOERROR\nflags QR RD RA AD\nedns 0\neflags DO\npayload 4096\n;QUESTION\nsigok.verteiltesysteme.net. IN AAAA\n;ANSWER\nsigok.verteiltesysteme.net. 60 IN AAAA 2001:638:501:8efc::139\nsigok.verteiltesysteme.net. 60 IN RRSIG AAAA 5 3 60 20180130030002 20171031030002 30665 verteiltesysteme.net. O7QgNZFBu3fULvBXwM39apv5nMehh51f mLOVEsC8qZUyxIbxo4eDLQt0JvPoPpFH 5TbWdlm/jxq5x2/Kjw7yUdpohhiNmdoD Op7Y+RyHbf676FoC5Zko9uOAB7Pp8ERz qiT0QPt1ec12bM0XKQigfp+2Hy9wUuSN QmAzXS2s75k=\n;AUTHORITY\n;ADDITIONAL\n```\n\n## Development\n\n\n### Requirements\n\n* python >= 3.5\n* aiohttp\n* aioh2\n* dnspython\n\n### Building\n\nDOH Proxy uses Python'setuptools to manage dependencies and build.\n\nTo install its dependencies:\n\n```shell\n$ python3 setup.py develop\n```\n\nTo build:\n```shell\n$ python3 setup.py build\n```\n\nTo run unittests:\n```shell\n$ python3 setup.py test\n```\n\nTo run the linter:\n```shell\n$ python3 setup.py flake8\n# Also run flake8 on the testing files\n$ flake8 test\n```\n\nFrom within the root of the repository, you can test the proxy, stub and client respectively\nby using the following commands:\n\n```shell\n$ sudo PYTHONPATH=. ./dohproxy/proxy.py ...\n```\n\n```shell\n$ PYTHONPATH=. ./dohproxy/httpproxy.py ...\n```\n\n\n```shell\n$ PYTHONPATH=. ./dohproxy/stub.py ...\n```\n\n```shell\n$ PYTHONPATH=. ./dohproxy/client.py ...\n```\n\n## License\nDOH Proxy is BSD-licensed.\n\n\n", "description_content_type": "text/markdown", "docs_url": null, "download_url": "", "downloads": { "last_day": -1, "last_month": -1, "last_week": -1 }, "home_page": "https://github.com/facebookexperimental/doh-proxy", "keywords": "doh proxy dns https", "license": "BSD", "maintainer": "", "maintainer_email": "", "name": "doh-proxy", "package_url": "https://pypi.org/project/doh-proxy/", "platform": "", "project_url": "https://pypi.org/project/doh-proxy/", "project_urls": { "Homepage": "https://github.com/facebookexperimental/doh-proxy" }, "release_url": "https://pypi.org/project/doh-proxy/0.0.9/", "requires_dist": [ "aioh2 (>=0.2.1)", "aiohttp (>=2.3.0)", "dnspython", "aiohttp-remotes (>=0.1.2)", "colour-runner ; extra == 'integration_tests'" ], "requires_python": "", "summary": "A client and proxy implementation of https://tools.ietf.org/html/draft-ietf-doh-dns-over-https-13", "version": "0.0.9" }, "last_serial": 5485746, "releases": { "0.0.1": [ { "comment_text": "", "digests": { "md5": "5020d684b6449b70bd39da769977de44", "sha256": "cbe2bf1ad4eed9ba74b9dfc1ae27ab971c1e2701b4cc0b5a74a6e58097c6128f" }, "downloads": -1, "filename": "doh_proxy-0.0.1-py3-none-any.whl", "has_sig": false, "md5_digest": "5020d684b6449b70bd39da769977de44", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 16707, "upload_time": "2018-01-11T19:50:14", "url": "https://files.pythonhosted.org/packages/11/c1/25790cb25edbdeb71b425a89f493869d914a33e9e89374fa2a129d52f532/doh_proxy-0.0.1-py3-none-any.whl" } ], "0.0.2": [ { "comment_text": "", "digests": { "md5": "a0f14560c5c3e2cbc1f9af27e97d83d6", "sha256": "3d1ce00a1193aac7ddc088351739d1603d52eba298936361f1e3f481e3ce656c" }, "downloads": -1, "filename": "doh_proxy-0.0.2-py3-none-any.whl", "has_sig": false, "md5_digest": "a0f14560c5c3e2cbc1f9af27e97d83d6", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 22455, "upload_time": "2018-01-17T07:33:51", "url": "https://files.pythonhosted.org/packages/67/e2/a267457f54157c13dda9b43019ba82a70cb8a184dafa41392fabceaf7acc/doh_proxy-0.0.2-py3-none-any.whl" } ], "0.0.3": [ { "comment_text": "", "digests": { "md5": "85105926d99e8f0adc8149f1ff45b741", "sha256": "124192b704a5c497c95aa75734ecdce4169c5602ffa0c918cc9737bdd2f32947" }, "downloads": -1, "filename": "doh_proxy-0.0.3-py3-none-any.whl", "has_sig": false, "md5_digest": "85105926d99e8f0adc8149f1ff45b741", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 23093, "upload_time": "2018-01-18T06:58:48", "url": "https://files.pythonhosted.org/packages/d1/f8/a084102ddefcf53722a5d8da9a9cf8aa2fb29b3943e3ee90d2d8e6ae1bb0/doh_proxy-0.0.3-py3-none-any.whl" } ], "0.0.4": [ { "comment_text": "", "digests": { "md5": "1ccbc13d7f08ae456e1175a603e06868", "sha256": "9c2973900f6e1a2e2065938e4895b59e1a0bf84775ac1f78d21c07cec14419b8" }, "downloads": -1, "filename": "doh_proxy-0.0.4-py3-none-any.whl", "has_sig": false, "md5_digest": "1ccbc13d7f08ae456e1175a603e06868", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 23250, "upload_time": "2018-01-28T07:01:29", "url": "https://files.pythonhosted.org/packages/52/bf/9bc9fdde3b2bfc6f1fb29add7c337a685e970fbfcfec9837fb4e7abd6d07/doh_proxy-0.0.4-py3-none-any.whl" } ], "0.0.5": [ { "comment_text": "", "digests": { "md5": "342a01c92be0efeccdc7edea954ff933", "sha256": "0ba37229dbea00b4889ada5f2b8cfdce68ef527d4c137fe2a5fd188af7dfc3e7" }, "downloads": -1, "filename": "doh_proxy-0.0.5-py3-none-any.whl", "has_sig": false, "md5_digest": "342a01c92be0efeccdc7edea954ff933", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 24088, "upload_time": "2018-02-06T06:42:22", "url": "https://files.pythonhosted.org/packages/3a/e5/4af2ecbc4c9f021f4e9e37ce583e0069d8b1721bb0c84115170e0c27a3d1/doh_proxy-0.0.5-py3-none-any.whl" } ], "0.0.6": [ { "comment_text": "", "digests": { "md5": "ced9ccd9d4a30b1c8bfbb02730ca3808", "sha256": "65f81cbd847d3516527e0035dcfd54e7c89dbec38d5b4282618084b2a97ee8a9" }, "downloads": -1, "filename": "doh_proxy-0.0.6-py3-none-any.whl", "has_sig": false, "md5_digest": "ced9ccd9d4a30b1c8bfbb02730ca3808", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 21164, "upload_time": "2018-02-21T09:11:58", "url": "https://files.pythonhosted.org/packages/f7/db/829e58134977f567637102ffa41d5abf0cbdcd45b46bc5b81ba1a03ee96d/doh_proxy-0.0.6-py3-none-any.whl" } ], "0.0.7": [ { "comment_text": "", "digests": { "md5": "2a2995658ac086f9ef73f2b3822a5b0f", "sha256": "4ecdb6a79f0b836d5513f4effb45c96cfe972612af4441e468b514840134a370" }, "downloads": -1, "filename": "doh_proxy-0.0.7-py3-none-any.whl", "has_sig": false, "md5_digest": "2a2995658ac086f9ef73f2b3822a5b0f", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 25900, "upload_time": "2018-08-14T05:53:48", "url": "https://files.pythonhosted.org/packages/5e/fb/9e179e3fd53cc6613ac98bc72ee04af82f6700e925026b5ba4d3b77797a0/doh_proxy-0.0.7-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "57d2117fe3eff3fe5d1cd61341795549", "sha256": "2654e243e0be25db88d6623f3b53b76991830ba02a220161317b46cf65e2eec9" }, "downloads": -1, "filename": "doh-proxy-0.0.7.tar.gz", "has_sig": false, "md5_digest": "57d2117fe3eff3fe5d1cd61341795549", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 25763, "upload_time": "2018-08-14T05:53:49", "url": "https://files.pythonhosted.org/packages/fc/a7/8107fb558d4fa3adc5c74e0fc6c9782c698e15ceecb9571e4c95796938b5/doh-proxy-0.0.7.tar.gz" } ], "0.0.8": [ { "comment_text": "", "digests": { "md5": "ec2c5d204b531b9ce21b73a93abe7236", "sha256": "bbcd42588d8ec20bd8b31586ebe06fd81cc4fd2a2c58a6f2718f4d597f331d08" }, "downloads": -1, "filename": "doh_proxy-0.0.8-py3-none-any.whl", "has_sig": false, "md5_digest": "ec2c5d204b531b9ce21b73a93abe7236", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 22611, "upload_time": "2018-08-14T18:59:40", "url": "https://files.pythonhosted.org/packages/29/91/c9c948997cbf15e5797c1a304d344674c8606724ee5b5141150cb49db31f/doh_proxy-0.0.8-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "74c733e1214ee07b9c9994d9fe8f5a9b", "sha256": "ccf413add737e41635d1b21aee4b6701d6233bbb3309ae2d337ed1c92a41d455" }, "downloads": -1, "filename": "doh-proxy-0.0.8.tar.gz", "has_sig": false, "md5_digest": "74c733e1214ee07b9c9994d9fe8f5a9b", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 25880, "upload_time": "2018-08-14T18:59:43", "url": "https://files.pythonhosted.org/packages/6f/6d/7a6f6a0fefc5db73ded91a058e41e14c776dedc1d74682c113359c914170/doh-proxy-0.0.8.tar.gz" } ], "0.0.9": [ { "comment_text": "", "digests": { "md5": "680a6ba78c9adcdd74f4a682ccfd17be", "sha256": "bdd6013043c10ec2dd860fa735726199de4ef60eafe11d53238385f70bf96c3e" }, "downloads": -1, "filename": "doh_proxy-0.0.9-py3-none-any.whl", "has_sig": false, "md5_digest": "680a6ba78c9adcdd74f4a682ccfd17be", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 23668, "upload_time": "2019-07-04T09:21:25", "url": "https://files.pythonhosted.org/packages/46/eb/e6aab2f014069f5e136fe1e3ce82928a5ab2ab17b7ab54a129e7a8f8ee04/doh_proxy-0.0.9-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "5f52de515b9e019b1189d71c81d0f200", "sha256": "d7f17652327bdad6399364d263d4d2f1728a7ebb159dccb22f67eef66fecbfbb" }, "downloads": -1, "filename": "doh-proxy-0.0.9.tar.gz", "has_sig": false, "md5_digest": "5f52de515b9e019b1189d71c81d0f200", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 27633, "upload_time": "2019-07-04T09:21:27", "url": "https://files.pythonhosted.org/packages/e9/3c/ab7adef67f5aac0efeba187caf71762b97122152e07a2e4c584ea82478ec/doh-proxy-0.0.9.tar.gz" } ] }, "urls": [ { "comment_text": "", "digests": { "md5": "680a6ba78c9adcdd74f4a682ccfd17be", "sha256": "bdd6013043c10ec2dd860fa735726199de4ef60eafe11d53238385f70bf96c3e" }, "downloads": -1, "filename": "doh_proxy-0.0.9-py3-none-any.whl", "has_sig": false, "md5_digest": "680a6ba78c9adcdd74f4a682ccfd17be", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 23668, "upload_time": "2019-07-04T09:21:25", "url": "https://files.pythonhosted.org/packages/46/eb/e6aab2f014069f5e136fe1e3ce82928a5ab2ab17b7ab54a129e7a8f8ee04/doh_proxy-0.0.9-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "5f52de515b9e019b1189d71c81d0f200", "sha256": "d7f17652327bdad6399364d263d4d2f1728a7ebb159dccb22f67eef66fecbfbb" }, "downloads": -1, "filename": "doh-proxy-0.0.9.tar.gz", "has_sig": false, "md5_digest": "5f52de515b9e019b1189d71c81d0f200", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 27633, "upload_time": "2019-07-04T09:21:27", "url": "https://files.pythonhosted.org/packages/e9/3c/ab7adef67f5aac0efeba187caf71762b97122152e07a2e4c584ea82478ec/doh-proxy-0.0.9.tar.gz" } ] }