riadns
v1.1.2
Published
A Service discovery based on NODEJS for docker and routeros. it can automatically pull routeros's dhcp lease and assign domain names according to the host name and your base domain configuration, and also support restful api to add dns entry. it can also
Downloads
11
Readme
3DN
NodeJS based DNS+DHCP+Docker Management
This is developped for a dev envirment service discovery purposes.
This currently support http restful api to update DNS record (a docker api client can send new vm info to it to register new vms) or Pull RouterOS dhcp Lease record.
#Installation Server is wirtten in NODEJS.
git clone [email protected]:riadev/3DN.git
- run
npm install
#Configuration Configuration is done through setting up envirment variables . simply run program with below bash statement as an example
EXPORT IP=192.168.1.2
EXPORT PORT=80
check RUN section to see how you can run with
IP
: This is the IP address the restful api http server and DNS server should be binded to. normally it should be 0.0.0.0 . but if you do want it to only listen to one interface, you would specify the IP addressPORT
: HTTP Restful API TCP Port to listen on, defaut is 8080DNS_PORT
: DNS UDP port to listen on, default is 53ROS_TASK
: true or false to enable the routeros pulling job to poll from routeros's dhcp lease list(Note, with debian sqeeze machines, they don't register their hostname , you will have to apply some trick [http://jeffwelling.github.io/2010/01/02/Debian-dynamic-dns.html])ROS_HOST
: RouterOS's IP Addresss or hostname. default localhostROS_USER
: RouterOS's API Username, default adminROS_PASSWD
:RouterOS's API Password, default passwordSERVER_NAME
:Display purpose Server name, default value isNODE_EVN
: Which mode you are running in, values can be production or test . if you do not specify this, it will be running in dev mode. Notice, if you do specify this to production, you need to have redis server avaiable and configure itREDIS_HOST
: Only needed when NODE_EVN is production, host of redis server, default localhostREDIS_PORT
: Only needed when NODE_EVN is production, default 6379REDIS_OPS
: Only needed when NODE_EVN is production,default nullREDIS_PASSWD
:Only needed when NODE_EVN is production, default nullSCHEDULE_TASK
: true or false to indicate whether to enable internal scheduler to pull docker and dhcp server #RUN- To simiply play with it
npm start
ornode_modules/.bin/actionhero
- If you want to run it in background, install forever tool (
sudo npm install -g forever
)- run
forever start node_modules/.bin/actionhero
- to check logs
forever logs 0
(assuming you are running this app only) forever list
andforever stop {index}
to stop other from running
- run
- In order to run DNS server on UDP port 53, you will need to run with root permission. and your enviriment variables will need to be passed in following example
sudo IP=0.0.0.0 PORT=80 DNS_PORT=53 ROS_HOST=0.0.0.0 ROS_USER=admin ROS_PASSWD=mypassword forever start node_modules/.bin/actionhero
Note that I am not listing all variables, you will have to list all your variables
#Resful API Documented at the index.html page. run the server and detailed documentation on API are shown there.
#Run with docker
docker run -d -p 80:8080 -p 53:8353/udp --name=riadns --privileged=true --hostname=ns.yourdomain.net
-e "BASE_DOMAIN=yourdomain.net"
-e "DOCKER_HOSTS=docker1:4243,docker2:4243,docker3:4243"
-e "DNS_PORT=8353"
-e SCHEDULE_TASK=true
-e IP="0.0.0.0"
riadev/riadns
Now try
curl http://your_server.com/api/set_dns?apiVersion=1&name=test.domain.com&address=192.168.1.1&type=A&ttl=60
You should see json return
{
new: true
}
Indicating a new records has been added.
You can then use dig to query your dns server now
dig @your_server.com test.domain.com
You should be able to see IP address
We also support automatcially add PTR (Reverse DNS record for this) by appending ptr=true to parameter
curl http://your_server.com/api/set_dns?apiVersion=1&name=test.domain.com&address=192.168.1.1&type=A&ttl=60&auto_ptr=true
and
dig @your_server.com 1.1.168.192.in-addr.arpa.
You can see the hostname comes back
;; ANSWER SECTION:
1.1.168.192.in-addr.arpa. 60 IN PTR test.domain.com.