{ "info": { "author": "faicker.mo", "author_email": "faicker.mo@gmail.com", "bugtrack_url": null, "classifiers": [ "Development Status :: 5 - Production/Stable", "Intended Audience :: System Administrators", "License :: OSI Approved :: MIT License", "Operating System :: MacOS :: MacOS X", "Operating System :: Microsoft :: Windows", "Operating System :: POSIX", "Programming Language :: Python :: 2", "Programming Language :: Python :: 2.6", "Programming Language :: Python :: 2.7", "Programming Language :: Python :: 3", "Programming Language :: Python :: 3.3", "Programming Language :: Python :: 3.4", "Programming Language :: Python :: 3.5", "Programming Language :: Python :: 3.6", "Programming Language :: Python :: 3.7", "Topic :: Internet :: Name Service (DNS)", "Topic :: System :: Networking" ], "description": "[![Package](https://img.shields.io/pypi/v/greendns.svg)](https://pypi.python.org/pypi/greendns)\n[![Build Status](https://travis-ci.org/faicker/greendns.svg?branch=master)](https://travis-ci.org/faicker/greendns)\n[![Coverage Status](https://coveralls.io/repos/github/faicker/greendns/badge.svg?branch=master)](https://coveralls.io/github/faicker/greendns?branch=master)\n\n# greendns\n\nA DNS recursive resolve server to avoid result being poisoned and friendly to CDN. It will qeury dns servers at the same time and don't wait for all responses. It's more efficient and quicker than [ChinaDNS](https://github.com/shadowsocks/ChinaDNS).\n\nCDN-friendly means the resolved IP is the best(Same ISP and the nearest). The Foreign DNS with edns-client-subnet returned IP is not that accurate, especially for the local small ISP.\n\nYou must config at least two dns servers. One part is local and poisoned, the other part is unpoisoned(tunnel through VPN or use OpenDNS 443/5353 port, [dnscrypt-proxy](https://github.com/jedisct1/dnscrypt-proxy) is recommended).\n\n## How it works\n\n```\nFirst filter poisoned ip with blocked iplist with -b argument.\nSecond,\n | A record is local | A record is foreign\n local and poisoned dns server | a | b\n unpoisoned dns server | c | d\n\nFrom the matrix, we get the result as follows,\nac: use local dns server result\nad: use local dns server result\nbc: impossible. use unpoisoned dns server result\nbd: use unpoisoned dns server result\n\nConclusion,\nUsing local dns server result if returned A record is local.\nUsing unpoisoned dns server result if returned A record is Foreign.\n```\n\nIt has two assumptions,\n* the polluted domain is foreign.\n* the A record in poisoned response is foreign.\n\n## Install\n\n```bash\npip install greendns\n```\n\n## Run\n\n### terminal command\n\n```bash\ngreendns -r greendns\n```\n\n### daemon service\n\ngo to [services](tools/services)\n\n### Dockerfile\n\ngo to [greendns-container](https//github.com/faicker/greendns-container)\n\n### docker stack (recommended)\n\ngo to [greendns-stack](https://github.com/faicker/greendns-stack)\n\n## Test\n\n```bash\ndig www.google.com @127.0.0.1 -p1053\n```\n\n## Configure\n\n```bash\ngreendns -r greendns -h\nusage: greendns [-h] [-r HANDLER] [-p PORT] [-t TIMEOUT] [-l LOGLEVEL]\n [-m MODE] [--lds LDS] [--rds RDS] [-f LOCALROUTE]\n [-b BLACKLIST] [--rfc1918] [--cache]\n\noptional arguments:\n -h, --help\n -r HANDLER, --handler HANDLER\n Specify handler class, greendns|quickest (default:\n None)\n -p PORT, --port PORT Specify listen port or ip (default: 127.0.0.1:1053)\n -t TIMEOUT, --timeout TIMEOUT\n Specify upstream timeout (default: 1.5)\n -l LOGLEVEL, --log-level LOGLEVEL\n Specify log level, debug|info|warning|error (default:\n info)\n -m MODE, --mode MODE Specify io loop mode, select|epoll (default: select)\n --lds LDS Specify local poisoned dns servers (default:\n 223.5.5.5:53,114.114.114.114:53)\n --rds RDS Specify unpoisoned dns servers (default:\n tcp:208.67.222.220:5353,9.9.9.9:9953)\n -f LOCALROUTE, --localroute LOCALROUTE\n Specify local routes file (default:\n /home/etc/greendns/localroute.txt)\n -b BLACKLIST, --blacklist BLACKLIST\n Specify ip blacklist file (default:\n /home/etc/greendns/iplist.txt)\n --rfc1918 Specify if rfc1918 ip is local (default: False)\n --cache Specify if cache is enabled (default: False)\n```\n\n## Perf\n\n### benchmark result\n\n[perf.md](tests/perf.md)\n\n### profile\n\n[prof.md](tests/prof.md)\n\n## Acknowledgements\n\n+ @clowwindy: the author of the [ChinaDNS](https://github.com/shadowsocks/ChinaDNS)\n\n## License\n\nThis project is under the MIT license. See the [LICENSE](LICENSE) file for the full license text.", "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/faicker/greendns", "keywords": "", "license": "MIT", "maintainer": "", "maintainer_email": "", "name": "greendns", "package_url": "https://pypi.org/project/greendns/", "platform": "unix", "project_url": "https://pypi.org/project/greendns/", "project_urls": { "Homepage": "https://github.com/faicker/greendns" }, "release_url": "https://pypi.org/project/greendns/0.9.14/", "requires_dist": null, "requires_python": "", "summary": "A non-poisonous and CDN-friendly Recursive DNS Resolver", "version": "0.9.14" }, "last_serial": 5363067, "releases": { "0.9.10": [ { "comment_text": "", "digests": { "md5": "7ddfe374004139d6b2ed973e9ec2f3a8", "sha256": "bbb2bcfad71403a2904ae488bc47d9e72dcd097b1de725daf7b9c2579b88798d" }, "downloads": -1, "filename": "greendns-0.9.10.tar.gz", "has_sig": false, "md5_digest": "7ddfe374004139d6b2ed973e9ec2f3a8", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 891751, "upload_time": "2019-04-15T03:07:39", "url": "https://files.pythonhosted.org/packages/c6/b8/a93b07bb6f3d7cf583a5ab8ce0f084572f2f2bfd5f84f6151507be1c5aac/greendns-0.9.10.tar.gz" } ], "0.9.12": [ { "comment_text": "", "digests": { "md5": "5a6446eabea4236ad43630930b9691bb", "sha256": "9be3d2f72b0ca12ff1ab58ab2941be58b8d10e955e92dc6a509a2befdfd202ae" }, "downloads": -1, "filename": "greendns-0.9.12.tar.gz", "has_sig": false, "md5_digest": "5a6446eabea4236ad43630930b9691bb", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 87952, "upload_time": "2019-04-25T09:16:46", "url": "https://files.pythonhosted.org/packages/d5/46/47eb4a57b73fea032a132b547d101927ff21cb7e74f8c5d658dc2d1216a8/greendns-0.9.12.tar.gz" } ], "0.9.13": [ { "comment_text": "", "digests": { "md5": "cce7fc199628c60c26b52b258a9d95cc", "sha256": "55c28d208759c567c1971bfeab4e8e1f196d528febd4818a820b6e558ab07315" }, "downloads": -1, "filename": "greendns-0.9.13.tar.gz", "has_sig": false, "md5_digest": "cce7fc199628c60c26b52b258a9d95cc", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 87802, "upload_time": "2019-05-17T10:29:54", "url": "https://files.pythonhosted.org/packages/55/98/1bce17fcccb75c5e2af5e8371d983ac3b40329c224bbdc3650cc7988a332/greendns-0.9.13.tar.gz" } ], "0.9.14": [ { "comment_text": "", "digests": { "md5": "f9564273c33ce4fb7ae62a2691b05b76", "sha256": "963efc301d1caae0205ae2d3927ed88a2aed5cce1c1d40cd4e963c92783ad2d8" }, "downloads": -1, "filename": "greendns-0.9.14.tar.gz", "has_sig": false, "md5_digest": "f9564273c33ce4fb7ae62a2691b05b76", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 87985, "upload_time": "2019-06-05T15:40:28", "url": "https://files.pythonhosted.org/packages/f4/da/d2c3b43f6c4af515ebab55f31d8452f7aa045a8b14bb7a9b924c6175f037/greendns-0.9.14.tar.gz" } ], "0.9.2": [ { "comment_text": "", "digests": { "md5": "3a2f3da09681e1e52155fa98fee002f1", "sha256": "233569f2b687af581162244cb95cf269c2b61a4bb6a698fae3cb81f2e60f4093" }, "downloads": -1, "filename": "greendns-0.9.2.tar.gz", "has_sig": false, "md5_digest": "3a2f3da09681e1e52155fa98fee002f1", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 79954, "upload_time": "2018-12-06T03:31:52", "url": "https://files.pythonhosted.org/packages/4b/96/ae708b514236c2db99cb64d5c561050a801618a281448460a9a63c97cbd1/greendns-0.9.2.tar.gz" } ], "0.9.5": [ { "comment_text": "", "digests": { "md5": "9314e0af2a5a5b0dced01eb9de30e3b7", "sha256": "76c3a034ed9a100077490d4fe5cf903c3df0298f68e0a590e026a84c9eeb4a88" }, "downloads": -1, "filename": "greendns-0.9.5.tar.gz", "has_sig": false, "md5_digest": "9314e0af2a5a5b0dced01eb9de30e3b7", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 83218, "upload_time": "2019-01-01T14:26:25", "url": "https://files.pythonhosted.org/packages/46/20/98e7ff182986b3f6486de78dd00c8e2db069163b625c9f35ad072498d2c8/greendns-0.9.5.tar.gz" } ], "0.9.6": [ { "comment_text": "", "digests": { "md5": "3ded54a050fd45259e34256aa34647b3", "sha256": "9e0cc110925b9a754738c046b07a30abc84a0e7c0df321e80887c19476e5e78f" }, "downloads": -1, "filename": "greendns-0.9.6.tar.gz", "has_sig": false, "md5_digest": "3ded54a050fd45259e34256aa34647b3", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 83217, "upload_time": "2019-01-01T14:47:14", "url": "https://files.pythonhosted.org/packages/93/a6/2ee7381532aab4c5b79f661965d9eb552f8259cc4194b0d14a3d17aa2a5d/greendns-0.9.6.tar.gz" } ], "0.9.7": [ { "comment_text": "", "digests": { "md5": "3bf6ae09925f86cf677e97be430632e5", "sha256": "2ecd4a228d3474a5d64fd5e0d974cc77cdfcf339d4bf61fd45a93f64b8931624" }, "downloads": -1, "filename": "greendns-0.9.7.tar.gz", "has_sig": false, "md5_digest": "3bf6ae09925f86cf677e97be430632e5", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 890859, "upload_time": "2019-01-14T14:45:52", "url": "https://files.pythonhosted.org/packages/dd/e7/4d964b9a644d412af541728a51645c32975dc01e07bf80457be2ff2f5455/greendns-0.9.7.tar.gz" } ], "0.9.8": [ { "comment_text": "", "digests": { "md5": "db5b9143cbb94844a45254df2a6504ea", "sha256": "ddfbe3b85cf74a32f78271cffc9e283bb93b91e56384860119fe000aaf698158" }, "downloads": -1, "filename": "greendns-0.9.8.tar.gz", "has_sig": false, "md5_digest": "db5b9143cbb94844a45254df2a6504ea", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 890886, "upload_time": "2019-01-18T11:37:32", "url": "https://files.pythonhosted.org/packages/26/e8/acd252c6a98b4e362480cc1505681b0767e0ef2275b1a328cdd6ae9c2033/greendns-0.9.8.tar.gz" } ], "0.9.9": [ { "comment_text": "", "digests": { "md5": "92a68d91e2ccb5176610a17acc782dc3", "sha256": "39219408a1752a4bc061856c2aebc122c5988b27a1d937c79a575575f7d190fe" }, "downloads": -1, "filename": "greendns-0.9.9.tar.gz", "has_sig": false, "md5_digest": "92a68d91e2ccb5176610a17acc782dc3", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 891387, "upload_time": "2019-03-08T09:00:24", "url": "https://files.pythonhosted.org/packages/83/8f/abf3061d6dab81edf69c8e556e92a5c43ae3540d9c0eeb1e7374d2f61306/greendns-0.9.9.tar.gz" } ] }, "urls": [ { "comment_text": "", "digests": { "md5": "f9564273c33ce4fb7ae62a2691b05b76", "sha256": "963efc301d1caae0205ae2d3927ed88a2aed5cce1c1d40cd4e963c92783ad2d8" }, "downloads": -1, "filename": "greendns-0.9.14.tar.gz", "has_sig": false, "md5_digest": "f9564273c33ce4fb7ae62a2691b05b76", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 87985, "upload_time": "2019-06-05T15:40:28", "url": "https://files.pythonhosted.org/packages/f4/da/d2c3b43f6c4af515ebab55f31d8452f7aa045a8b14bb7a9b924c6175f037/greendns-0.9.14.tar.gz" } ] }