{ "info": { "author": "PEERING Testbed developers", "author_email": "team@peering.usc.edu", "bugtrack_url": null, "classifiers": [ "Development Status :: 3 - Alpha", "License :: OSI Approved :: GNU General Public License v3 (GPLv3)", "Operating System :: POSIX", "Programming Language :: Python :: 3.3", "Topic :: System :: Networking" ], "description": "Dynamic PowerDNS backend\n========================\n\n[![PyPI](https://img.shields.io/pypi/v/pdyndns.svg)](https://pypi.org/project/pdyndns/)\n[![Python](https://img.shields.io/pypi/pyversions/pdyndns.svg)](https://pypi.org/project/pdyndns/)\n\nThis repository implements a PowerDNS pipe backend to provide\ndynamic replies to DNS queries. Replies are taken round-robin from\na predefined list read from a text file. We use this backend to\nsteer RIPE Atlas traceroute measurements toward PEERING prefixes\naccording to experiment requirements.\n\nUsage\n=====\n\nThis module communicates with PowerDNS using PowerDNS's [pipe\nbackend][1] protocol version 3. The tool receives a single\nconfiguration file as parameter, and exchanges information with\nPowerDNS through standard input and output. The configuration file\nis in JSON format and is validated by the `config-schema.json` [JSON\nschema][2].\n\n [1]: https://doc.powerdns.com/md/authoritative/backend-pipe/\n [2]: http://json-schema.org/\n\nBackend configuration\n---------------------\n\nThe configuration file specifies the DNS domain the backend is\nresponsible for, and information required to answer `SOA` and `NS`\nDNS queries:\n\n``` {.json}\n{\n \"domain\": \"atlas.peering.usc.edu\",\n \"soa\": \"atlas.peering.usc.edu noc.peering.usc.edu 20170723 7200 3600 7200 120\",\n \"nameservers\": [\n \"peering-atlas-ns.vms.uscnsl.net\",\n \"peering-atlas-ns.peering-vms.usc.edu\"\n ],\n \"ttl\": 3600,\n \"...\": \"...\"\n}\n```\n\nThe `domain` parameter specifies what domain the backend is\nresponsible for. The `soa` parameter specifies zone-specific timers\nand configuration, and is used verbatim in replies for DNS `SOA`\nqueries. The `nameserver` parameter specifies a list of name\nservers for the zone, used in replies for `NS` queries. The\ntime-to-live parameter (`ttl`) specifies the period for which\nreplies to `SOA` and `NS` queries should be cached. Normally, the\nthird field in the `soa` parameter (`20170723`, the [serial\nnumber][3]) needs to be updated whenever a zone is updated.\nAlthough updating the serial number when the dynamic addresses are\nreconfigured is not essential (because replies have a time-to-live\nof zero to prevent caching), the serial number needs to be updated\nif the `soa` or `nameservers` parameters are updated.\n\n [3]: https://doc.powerdns.com/md/types/\n\nEach dynamic host name within `domain` is handled by a handler that\nreads the list of IP addresses from a text file. The handler\nreplies to queries with IP addresses in the text file in round-robin\norder. Each handler has three parameters:\n\n``` {.json}\n{\n \"...\": \"...\",\n \"handlers\": [\n {\n \"qname\": \"target1.atlas.peering.usc.edu\",\n \"qtype\": \"A\",\n \"file\": \"data/peering-v4.txt\",\n },\n {\n \"qname\": \"target2.atlas.peering.usc.edu\",\n \"qtype\": \"AAAA\",\n \"file\": \"data/peering-v6.txt\"\n },\n \"...\"\n ]\n}\n```\n\nParameter `qname` specifies the fully-qualified domain name that\nshould be answered with IP addresses within `file`. The `qtype`\nfield specified whether IP addresses in `file` are IPv4 addresses\n(`qtype = A`) or IPv6 addresses (`qtype = AAAA`).\n\nSetting up the parent DNS server\n--------------------------------\n\nWe also need to configure the authoritative name server for the\nparent domain (`peering.usc.edu` in our case) to forward all\nrequests for `atlas.peering.usc.edu` to the machine running the\ndynamic backend.\n\nIf using BIND and if the dynamic backend server is\n`peering-atlas-ns.vms.uscnsl.net`, this can be achieved by adding\nthe following to the zone database (equivalent entries can be added\nto PowerDNS to achieve the same effect):\n\n```\npdyndns-1 A 35.196.250.129\natlas.peering.usc.edu. NS pdyndns-1.peering.usc.edu.\n```\n\nThis should go within the zone starting with (something similar to):\n\n```\n@ IN SOA peering.usc.edu. peering-ns.usc.edu. (\n```\n\nTesting pdyndns.py\n==================\n\nWe have a test suite for `pdyndns.py`. You can run it by installing\n[nose][10] and running `nosetests`. Note that we require nose for\nPython 3. We also have a [tox][11] script that checks for formatting\nand performs some linting.\n\n [10]: http://nose.readthedocs.io/en/latest/\n [11]: https://pypi.python.org/pypi/tox\n\nAcknowledgements\n================\n\nPrecursors and early implementations for this code include [RIPE\nAtlas][8]'s [atlas-dyndns][5], Emile Aben's [Scapy DNS Ninja][6] and\n[Zeerover DNS][7].\n\n [8]: https://atlas.ripe.net\n [5]: https://github.com/RIPE-NCC/atlas-dyndns\n [6]: https://github.com/emileaben/scapy-dns-ninja\n [7]: https://github.com/USC-NSL/RIPE2015HackAThon\n", "description_content_type": null, "docs_url": null, "download_url": "", "downloads": { "last_day": -1, "last_month": -1, "last_week": -1 }, "home_page": "https://github.com/PEERINGTestbed/powerdns-pdyndns-backend", "keywords": "", "license": "GPLv3", "maintainer": "", "maintainer_email": "", "name": "pdyndns", "package_url": "https://pypi.org/project/pdyndns/", "platform": "", "project_url": "https://pypi.org/project/pdyndns/", "project_urls": { "Homepage": "https://github.com/PEERINGTestbed/powerdns-pdyndns-backend" }, "release_url": "https://pypi.org/project/pdyndns/0.5.2/", "requires_dist": null, "requires_python": "", "summary": "PEERING testbed dynamic PowerDNS backend", "version": "0.5.2" }, "last_serial": 3349985, "releases": { "0.1": [ { "comment_text": "", "digests": { "md5": "5393a4d028b67f778006888f6a72536f", "sha256": "8341f2f08eeeb7a205c9bb2fde521ac69454ee64c847b75d912cbaf1af1cfe53" }, "downloads": -1, "filename": "pdyndns-0.1.tar.gz", "has_sig": false, "md5_digest": "5393a4d028b67f778006888f6a72536f", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 4182, "upload_time": "2017-07-28T21:16:17", "url": "https://files.pythonhosted.org/packages/d0/db/c15a6591520cfe211aec18bef613d8bfaca8d631960e81c408e9ca82e9ce/pdyndns-0.1.tar.gz" } ], "0.1.1": [ { "comment_text": "", "digests": { "md5": "1ec184a0b538b35d53fd640271ef1ff9", "sha256": "985bd31a241143644db5d4ca5839b9c7a25b8c26e7a171b1744727aa0f517be0" }, "downloads": -1, "filename": "pdyndns-0.1.1.tar.gz", "has_sig": false, "md5_digest": "1ec184a0b538b35d53fd640271ef1ff9", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 4599, "upload_time": "2017-07-28T21:19:52", "url": "https://files.pythonhosted.org/packages/ea/04/0b345d081296c0f0c5aa144344ca193ae6232c85511eae0765f8c93f817c/pdyndns-0.1.1.tar.gz" } ], "0.1.10": [ { "comment_text": "", "digests": { "md5": "43c875ba37f577ce1617feec658f8ff5", "sha256": "1527440fd2af835d83103996084de055880c347b85122502670e6dbe1749ea63" }, "downloads": -1, "filename": "pdyndns-0.1.10.tar.gz", "has_sig": false, "md5_digest": "43c875ba37f577ce1617feec658f8ff5", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 4660, "upload_time": "2017-07-28T23:55:58", "url": "https://files.pythonhosted.org/packages/52/36/a600f5653a75d9a03e96cb6a5977a8ef6d6fce2961ec626ea59c58129667/pdyndns-0.1.10.tar.gz" } ], "0.1.2": [ { "comment_text": "", "digests": { "md5": "6ba8b7561fff75a24b022f6f7c17dbdf", "sha256": "b3c51504d3ef1e0650f865f69d7959d66c2bf3919b40a4f91acbc28fa25317d5" }, "downloads": -1, "filename": "pdyndns-0.1.2.tar.gz", "has_sig": false, "md5_digest": "6ba8b7561fff75a24b022f6f7c17dbdf", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 4185, "upload_time": "2017-07-28T21:26:13", "url": "https://files.pythonhosted.org/packages/36/3b/c5ee7fd0f075ecea8c2e0e35b6891c09c09a2f2355dcee94ea5f2b7e8a66/pdyndns-0.1.2.tar.gz" } ], "0.1.3": [ { "comment_text": "", "digests": { "md5": "c6eaaea98905a8dbd381a2393891cfed", "sha256": "4919e7d94fe97011b3ccbbb80cfddb9f11d20402321885b134b0e19d416e9246" }, "downloads": -1, "filename": "pdyndns-0.1.3.tar.gz", "has_sig": false, "md5_digest": "c6eaaea98905a8dbd381a2393891cfed", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 4184, "upload_time": "2017-07-28T21:27:33", "url": "https://files.pythonhosted.org/packages/12/86/0c9e66fe99d2377f713160a3954ecb54c5fa0c2b25d33e7b4f82b593c203/pdyndns-0.1.3.tar.gz" } ], "0.1.4": [ { "comment_text": "", "digests": { "md5": "7695f8187e552137577a2e05a9365a3b", "sha256": "6807f94327496d9df0b7eb13f5d785ef7d57dffe8d5a827e5e0c9016ac2e1991" }, "downloads": -1, "filename": "pdyndns-0.1.4.tar.gz", "has_sig": false, "md5_digest": "7695f8187e552137577a2e05a9365a3b", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 4598, "upload_time": "2017-07-28T21:28:08", "url": "https://files.pythonhosted.org/packages/ac/10/37ff1ab7861170c276a748c635cd829421c3e57cc98d8d24f22d94f19247/pdyndns-0.1.4.tar.gz" } ], "0.1.5": [ { "comment_text": "", "digests": { "md5": "cfb15cd04fbad339e2d5bd457f426436", "sha256": "ba05212dc5a1faa51b468009d0658347de28ad305729055da1ca22adb20abc92" }, "downloads": -1, "filename": "pdyndns-0.1.5.tar.gz", "has_sig": false, "md5_digest": "cfb15cd04fbad339e2d5bd457f426436", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 4601, "upload_time": "2017-07-28T21:29:31", "url": "https://files.pythonhosted.org/packages/ca/f4/72c7ddc61a24f6ed6233aa0ba6e9f421bc0758cac258678faf56b0a9d98a/pdyndns-0.1.5.tar.gz" } ], "0.1.6": [ { "comment_text": "", "digests": { "md5": "5166c25c8a2d28492e54e3e55bf2a284", "sha256": "44abbddfbb1717c1ef6d7d4ce581e41744e19c9484d7955eb33c93eebe263f2c" }, "downloads": -1, "filename": "pdyndns-0.1.6.tar.gz", "has_sig": false, "md5_digest": "5166c25c8a2d28492e54e3e55bf2a284", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 4593, "upload_time": "2017-07-28T21:48:47", "url": "https://files.pythonhosted.org/packages/9b/bd/1eadad5b4863e7844ddfb2a311925283db30e6400a775a3d2492974cb4a5/pdyndns-0.1.6.tar.gz" } ], "0.1.7": [ { "comment_text": "", "digests": { "md5": "b279148682d326ee54fc4f344e3727cd", "sha256": "e07471fd22d8aa4f85eb9dbe5d89bb51462e98fdedff77cdd87b8c50e799eda3" }, "downloads": -1, "filename": "pdyndns-0.1.7.tar.gz", "has_sig": false, "md5_digest": "b279148682d326ee54fc4f344e3727cd", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 4587, "upload_time": "2017-07-28T22:10:14", "url": "https://files.pythonhosted.org/packages/e8/e1/1ac67f169833bc25fdcc367402f32f2b7691294abc8393f2dfd76236704b/pdyndns-0.1.7.tar.gz" } ], "0.1.8": [ { "comment_text": "", "digests": { "md5": "dbd9d1b4f53e09105b9ab83ec9ec36d8", "sha256": "bc6d3250a4acd0b01d7e9f97dfcba9cd27add81b1808b13a781830db9fc9dd24" }, "downloads": -1, "filename": "pdyndns-0.1.8.tar.gz", "has_sig": false, "md5_digest": "dbd9d1b4f53e09105b9ab83ec9ec36d8", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 4574, "upload_time": "2017-07-28T23:20:52", "url": "https://files.pythonhosted.org/packages/ad/d1/0c8ceeca0e8a8a3b4ed97c13ddde4eaaee4e0f25d15f09b6e853000e2491/pdyndns-0.1.8.tar.gz" } ], "0.1.9": [ { "comment_text": "", "digests": { "md5": "d376883468ded01a0bef3b0535b7d365", "sha256": "06de1dd1a86bf288cff202cbb918c9b11bb604028e828cf82f64ec485443ac25" }, "downloads": -1, "filename": "pdyndns-0.1.9.tar.gz", "has_sig": false, "md5_digest": "d376883468ded01a0bef3b0535b7d365", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 4564, "upload_time": "2017-07-28T23:34:50", "url": "https://files.pythonhosted.org/packages/ca/be/f29efc260ffd6553a757b35e4d6b573603c75975926c13144e6ccbd9522b/pdyndns-0.1.9.tar.gz" } ], "0.2": [ { "comment_text": "", "digests": { "md5": "2e195622cc064bf56f87e514f905404a", "sha256": "73698d2cca68b5a6df63ed708e22cdddba9133b89f594c21b9cb7b81872479cc" }, "downloads": -1, "filename": "pdyndns-0.2.tar.gz", "has_sig": false, "md5_digest": "2e195622cc064bf56f87e514f905404a", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 4655, "upload_time": "2017-07-29T00:13:32", "url": "https://files.pythonhosted.org/packages/d5/3f/ce6ec0377c8aa37f6563e9df06629f8791ac4b753c649f306f494addc906/pdyndns-0.2.tar.gz" } ], "0.2.1": [ { "comment_text": "", "digests": { "md5": "9b2872cf8b6b417e24efa68d691f73a9", "sha256": "312e9ddf9a1691b6d253bf6d0ecee04ffad92c2c98674facddde8a8612aae4b2" }, "downloads": -1, "filename": "pdyndns-0.2.1.tar.gz", "has_sig": false, "md5_digest": "9b2872cf8b6b417e24efa68d691f73a9", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 5121, "upload_time": "2017-07-29T03:57:18", "url": "https://files.pythonhosted.org/packages/f0/62/bf0925efd8da0e21efcbfb3fe837390473341d05740e126f98c470040559/pdyndns-0.2.1.tar.gz" } ], "0.2.2": [ { "comment_text": "", "digests": { "md5": "46182b6e0c6c4ab5d6a08a8bef75ed2b", "sha256": "c9284c92efede83c80dc25f196d96515e520e9a9b191fdeed6c3b8a3b36c5cd7" }, "downloads": -1, "filename": "pdyndns-0.2.2.tar.gz", "has_sig": false, "md5_digest": "46182b6e0c6c4ab5d6a08a8bef75ed2b", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 5012, "upload_time": "2017-08-30T03:32:32", "url": "https://files.pythonhosted.org/packages/0a/23/3a031acd5dbe0254fba6c2e86b8371590a13cb44df4a7bfa6f63956c3bc5/pdyndns-0.2.2.tar.gz" } ], "0.2.3": [ { "comment_text": "", "digests": { "md5": "f9515cd2ce673967d208e9667032de85", "sha256": "e2f3a663ddc7be82f33b7d6854db9b3dfd991e7416b9f12335c6cf4bbfdeb11c" }, "downloads": -1, "filename": "pdyndns-0.2.3.tar.gz", "has_sig": false, "md5_digest": "f9515cd2ce673967d208e9667032de85", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 4881, "upload_time": "2017-09-09T21:24:11", "url": "https://files.pythonhosted.org/packages/d1/60/f4d65c7977cc41a1f02b227dd8c18d692f7c55565b16010a61763a957645/pdyndns-0.2.3.tar.gz" } ], "0.2.4": [ { "comment_text": "", "digests": { "md5": "a7231fcdc2089160767da663503e813e", "sha256": "83469893f9fa2f33b2dffd1235541e86e31674b1a7a0fda5725758032ace7438" }, "downloads": -1, "filename": "pdyndns-0.2.4.tar.gz", "has_sig": false, "md5_digest": "a7231fcdc2089160767da663503e813e", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 4933, "upload_time": "2017-09-09T21:35:55", "url": "https://files.pythonhosted.org/packages/f4/0e/f91d45ac554accbda4df54f9768ab55c1ba0ca7c12497ef44f164270ed3f/pdyndns-0.2.4.tar.gz" } ], "0.2.6": [ { "comment_text": "", "digests": { "md5": "fa0b73c98a47dd01b71dad39ce1ff274", "sha256": "7e4fb0690bb889da766e4fe30fab4924a167cbf8a693519585eb67d23c932bb3" }, "downloads": -1, "filename": "pdyndns-0.2.6.tar.gz", "has_sig": false, "md5_digest": "fa0b73c98a47dd01b71dad39ce1ff274", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 5251, "upload_time": "2017-09-09T21:38:31", "url": "https://files.pythonhosted.org/packages/cd/85/fb77534ec8fc2773231e2fe4e0ca258976cd41de58188db6db790cec33bd/pdyndns-0.2.6.tar.gz" } ], "0.3": [ { "comment_text": "", "digests": { "md5": "995506004355ce7a21d2671dab65950f", "sha256": "0b606713052b4d24f4a201b9494cd8ff9b68fbc52d3057f9b5b841d1bca66624" }, "downloads": -1, "filename": "pdyndns-0.3.tar.gz", "has_sig": false, "md5_digest": "995506004355ce7a21d2671dab65950f", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 5203, "upload_time": "2017-09-09T21:41:05", "url": "https://files.pythonhosted.org/packages/45/d7/ca0384382245aac98e76abaedd8657b62653fc58b9f90b7b13c5e576f52b/pdyndns-0.3.tar.gz" } ], "0.4": [ { "comment_text": "", "digests": { "md5": "147b50153cf44540c2c8f50daec4447d", "sha256": "d5232578aef0bbc68d2105bd70623c6e7f94d5218b75313e2a265b40bb95550c" }, "downloads": -1, "filename": "pdyndns-0.4.tar.gz", "has_sig": false, "md5_digest": "147b50153cf44540c2c8f50daec4447d", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 5207, "upload_time": "2017-09-12T22:45:18", "url": "https://files.pythonhosted.org/packages/af/39/c1be8c2d2665f7ca902e244bb8ccce458d36eeecf2b58ee1777e18f6f65b/pdyndns-0.4.tar.gz" } ], "0.5": [ { "comment_text": "", "digests": { "md5": "07ef875deea722a5418d017dfcc285e7", "sha256": "ed6cefd5c6c5b2c23a244d5c11f25d6ea50c5a5f350408050dafd0921f00dcbc" }, "downloads": -1, "filename": "pdyndns-0.5.tar.gz", "has_sig": false, "md5_digest": "07ef875deea722a5418d017dfcc285e7", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 5215, "upload_time": "2017-09-16T00:10:25", "url": "https://files.pythonhosted.org/packages/84/80/3e8e1c3642d7ff6c7c37685018cafd70b67823c1990f260b030b63a1cc06/pdyndns-0.5.tar.gz" } ], "0.5.1": [ { "comment_text": "", "digests": { "md5": "4857f1239c38b86a0d6b202b6ef8590c", "sha256": "d50021c5d6ab379134f45333db0b3d0f275e920546b7658a5598499dd14691c1" }, "downloads": -1, "filename": "pdyndns-0.5.1.tar.gz", "has_sig": false, "md5_digest": "4857f1239c38b86a0d6b202b6ef8590c", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 5232, "upload_time": "2017-09-16T00:33:48", "url": "https://files.pythonhosted.org/packages/63/06/5be2d0c289d1e2ae364c38aacea7d020812db1e0239489e5c33a2103034c/pdyndns-0.5.1.tar.gz" } ], "0.5.2": [ { "comment_text": "", "digests": { "md5": "644cc344d14a7b9983a96e76489af2bf", "sha256": "90081c0f88f36f7fbc1208be3ac93d27cba6083c40c05c587d7932063391a0eb" }, "downloads": -1, "filename": "pdyndns-0.5.2.tar.gz", "has_sig": false, "md5_digest": "644cc344d14a7b9983a96e76489af2bf", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 4921, "upload_time": "2017-11-20T19:02:13", "url": "https://files.pythonhosted.org/packages/91/38/5514e7051857007070da1b83977064dcf5739e887d37e3b4972f6eefa0b9/pdyndns-0.5.2.tar.gz" } ] }, "urls": [ { "comment_text": "", "digests": { "md5": "644cc344d14a7b9983a96e76489af2bf", "sha256": "90081c0f88f36f7fbc1208be3ac93d27cba6083c40c05c587d7932063391a0eb" }, "downloads": -1, "filename": "pdyndns-0.5.2.tar.gz", "has_sig": false, "md5_digest": "644cc344d14a7b9983a96e76489af2bf", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 4921, "upload_time": "2017-11-20T19:02:13", "url": "https://files.pythonhosted.org/packages/91/38/5514e7051857007070da1b83977064dcf5739e887d37e3b4972f6eefa0b9/pdyndns-0.5.2.tar.gz" } ] }