GithubHelp home page GithubHelp logo

restdns's Introduction

RestDNS README

RestDNS is a REST API used to store and manage your DNS zones. Also look at restdns-cli and restdns-bind

Setup

RestDNS is packaged for the Debian Wheezy distro, but since its a standard Django application, it should be easy to install it on any other distro.

Install the RestDNS package

Add these lines in your /etc/apt/source.list file:

deb http://debian.tecknet.org/debian wheezy tecknet
deb-src http://debian.tecknet.org/debian wheezy tecknet

Add the Tecknet repositories key in your keyring:

# wget http://debian.tecknet.org/debian/public.key -O - | apt-key add -

Update and install the restdns package:

# aptitude update
# aptitude install restdns

The installation procedure will configure the database (SQLite by default) in the /var/lib/restdns/ directory.

Configure Gunicorn

The next step is to configure gunicorn to serve the restdns application, in the /etc/gunicorn.d/ directory, copy the restdns.example file to restdns:

# cd /etc/gunicorn.d
# cp restdns.example restdns

You can customize the file to add or change Gunicorn options such as the http listening port (by default 9001) or the number of workers to start.

Restart the Gunicorn daemon to start RestDNS:

# service gunicorn restart

Configure the web server

The last thing to do is to configure a web server to reverse proxify the RestDNS application. Here is an example for nginx:

# cat /etc/nginx/site-enabled/restdns
server {
    location / {
        proxy_pass_header Server;
        proxy_set_header Host $http_host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_pass http://127.0.0.1:9001/;
        proxy_redirect default;
    }
}

REST API

Zones

Properties:

  • name (string, read): name of the zone (without the final dot)
  • refresh (integer, read/write): refresh delay value
  • retry (integer, read/write): retry delay value
  • expire (integer, read/write): expire delay value
  • minimum (integer, read/write): minimum delay value
  • rname (string, read/write): administrator email adress
  • primary_ns (string, read/write): primary name-server address
  • serial (integer, read): serial number
  • url (string, read): url to the zone
  • records_url (string, read): url to zone records

List all zones

Request:

GET /zones

Reponse:

< 200
< Content-Type: application/json

{
    "zones": [
        {"name": "example.com",
         "refresh": 300,
         "retry": 300,
         "expire": 604800,
         "minimum": 86400,
         "rname": "admin.example.com.",
         "primary_ns": "ns.example.net."
         "serial": 42,
         "url": "/zones/example.com",
         "records_url": "zones/example.com/records"},
        {"name": "my.lan",
         "refresh": 300,
         "retry": 300,
         "expire": 604800,
         "minimum": 86400,
         "rname": "admin.my.lan.",
         "primary_ns": "ns.my.lan."
         "serial": 21,
         "url": "/zones/my.lan",
         "records_url": "zones/my.lan/records"},
    ]
}

Create a new zone

Request:

POST /zones
> Content-Type: application/json

{"name": "exemple.fr",
 "refresh": 300,
 "retry": 300,
 "expire": 604800,
 "minimum": 86400,
 "rname": "admin.example.fr.",
 "primary_ns": "ns.example.org."}

Response:

< 201
< Location: /zones/example.fr
< Content-Type: application/json

{"name": "exemple.fr",
 "refresh": 300,
 "retry": 300,
 "expire": 604800,
 "minimum": 86400,
 "rname": "admin.example.fr.",
 "primary_ns": "ns.example.org.",
 "serial": 1,
 "url": "/zones/example.fr",
 "records_url": "/zones/example.fr/records"}

Get zone details

Request:

GET /zones/example.com

Response:

< 200
< Content-Type: application/json

{"name": "example.com",
 "refresh": 300,
 "retry": 300,
 "expire": 604800,
 "minimum": 86400,
 "rname": "admin.example.com.",
 "primary_ns": "ns.example.net."
 "serial": 42,
 "url": "/zones/example.com",
 "records_url": "zones/example.com/records"},

Modify a zone

Request:

PUT /zones/example.com
> Content-Type: application/json

{"refresh": 300,
 "retry": 300,
 "expire": 604800,
 "minimum": 86400}

Response:

< 200
< Content-Type: application/json

{"name": "exemple.fr",
 "refresh": 300,
 "retry": 300,
 "expire": 604800,
 "minimum": 86400,
 "rname": "admin.example.fr.",
 "primary_ns": "ns.example.org.",
 "serial": 2,
 "url": "/zones/example.fr",
 "records_url": "/zones/example.fr/records"}

Delete a zone

Request:

DELETE /zones/example.com

Response:

< 204

Records

Properties:

  • uuid (string, read): uuid of the record
  • name (string, read/write): name of the record
  • type (string, read/write): type of the record
  • parameters (object, read/write): object of parameters of the record according to the type
  • url (string, read/write): url of the record

List all records for a zone

Request:

GET /zones/example.com/records

Response:

< 200
< Content-Type: application/json

{"records": [{"uuid": "fee3670a-fe68-4bb4-a926-009f0e01c41c",
              "name": "www",
              "type": "a",
              "parameters": {"ip": "127.0.0.1"},
              "url": "/zones/example.com/records/fee3670a-fe68-4bb4-a926-009f0e01c41c"},
             {"uuid": "671969b0-c88e-4a65-ac98-7d736e135bf3",
              "name": "www",
              "type": "aaaa",
              "parameters": {"ipv6": "::1"},
              "url": "/zones/example.com/records/671969b0-c88e-4a65-ac98-7d736e135bf3"}]}

Create a new record

Request:

POST /zones/example.com/records
> Content-Type: application/json

{"name": "",
 "type": "mx",
 "parameters": {"pref": 5, "name": "mx.example.net"}}

Response:

< 201
< Location: /zones/example.com/records/4901adf8-f26d-400a-8ac1-b978c116cff
< Content-Type: application/json

{"uuid": "4901adf8-f26d-400a-8ac1-b978c116cff5",
 "name": "",
 "type": "mx",
 "parameters": {"pref": 5, "name": "mx.example.net"},
 "url": "/zones/example.com/records/4901adf8-f26d-400a-8ac1-b978c116cff5"}

Modify a record

Request:

PUT /zones/example.com/records/fee3670a-fe68-4bb4-a926-009f0e01c41c
> Content-Type: application/json

{"name": "www",
 "type": "a",
 "parameters": {"127.0.0.2"}}

Response:

< 200
< Content-Type: application/json

{"uuid": "fee3670a-fe68-4bb4-a926-009f0e01c41c",
 "name": "www",
 "type": "a",
 "parameters": {"ip": "127.0.0.2"},
 "url": "/zones/example.com/records/fee3670a-fe68-4bb4-a926-009f0e01c41c"}}

Delete a record

Request:

DELETE /zones/example.com/records/fee3670a-fe68-4bb4-a926-009f0e01c41c

Response:

< 204

List record types

Request:

GET /record/types

Response:

< 200
< Content-Type: application/json

{"a": {"parameters": ["ip"]},
 "aaaa": {"parameters": ["ipv6"]},
 "mx": {"parameters": ["pref", "name"]}}

Contribute

You can send your pull-request for RestDNS through Github:

https://github.com/NaPs/RestDNS

I also accept well formatted git patches sent by email.

Feel free to contact me for any question/suggestion/patch: <[email protected]>.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.