Total Pageviews

Saturday, 6 July 2019

dns解析服务器程序:fun-dns

DNS server built based on Nodejs,

How install
 Run $ sudo setup.sh
OR
 $ wget -O /tmp/fun_dns.tar.gz https://github.com/downloads/badlee/fun-dns/fun_dns.v0.1.12.tar.gz
 $ sudo -s 
 $ mkdir /opt/fun_dns
 $ cd /opt/fun_dns
 $ tar xvf /tmp/fun_dns.tar.gz
 $ ln -s /opt/fun_dns/fun_dns.daemon /etc/init.d/fun_dns
 $ update-rc.d fun_dns defaults
 $ #Start service
 $ service fun_dns start

How define hostname
 edit 'config/conf.json',
 the syntaxe of this file respect json format
  {
   "hostname1" : {
    [property...]
   },
   "hostname2" : {
    [property...]
   },
   "hostname3" : {
    [property...]
   },
   [...]
   "hostnameN" : {
    [property...]
   }
  }
 properties of a hostname
  "name" : {
   "ip" : "127.0.0.1",
   "description" : "je suis le serveur web local",
   "autority" : "dns.{name},admin@{name}",
   "mail" : {
    "ip" : "127.0.0.2",
    "name" : "mail.{name}",
    "priority" : 10
   },
   "nameserver" : [{
    "ip" : "127.0.0.1",
    "name" : "ns1.{name}"
   }]
  }
 The hostname can have a short regex like syntaxe.
  *  : this expression respect ".*" in regex;
  %w : this expression respect "[a-zA-Z0-9_]+" in regex;
  %h : this expression respect "[a-fA-F0-9]+" in regex;
  %d : this expression respect "[0-9]+" in regex;

 sample conf.json :
  {
   "server.web" : {
    "ip" : "192.168.1.3",
    "nameserver" : [{
     "name" : "dns3.local.web"
    },{
     "ip" : "192.168.1.2",
     "name" : "dns2.local.web"
    },{
     "ip" : "192.168.1.1",
     "name" : "dns.local.web"
    }]
   },
   "!*.lo" : {
    "ip" : "127.0.0.1",
    "autority" : "dns.{name},admin@{name}",
  
    "nameserver" : [{
     "ip" : "127.0.0.1",
     "name" : "dns.{name}"
    },{
     "ip" : "127.0.0.1",
     "name" : "dns2.{name}"
    }]
  
   }
  }

Server confiurations(config/serv.ini)
 conf = configuration hostname file(if not defined is set to app://config/conf.json)
 host = your ip4 addresse to listen(if not defined listen all)
 port = port to listen(if not defined listen 53)
 Section nameserver = list of dns server used to found response when no response found on server(as a proxy, but it's eprouve the global performances)
 [nameserver] 
  nameOfTheDnsServer1 = Ip_Address
  nameOfTheDnsServer2 = Ip_Address
  ...
  nameOfTheDnsServer3 = Ip_Address
 Section ttl = list of ttl in dns reponse (in secondes)
 [ttl]
  ip  = ttl for any ip (A or AAAA) address (if not defined 77)
  ttl = ttl for any field different of ip (A or AAAA) (if not defined 600)
  refresh = time to refresh the zone (if not defined 1800)
  retry   = time to retry when refresh (above) has expired (if not defined 900)
  expiration = ttl for DNS response (if not defined 604800)

 sample serv.ini:
  conf = app://config/lab.json
  port = 53
  host = 192.168.1.1
  spf  = "v=spf1 +all"
  [ttl]
      ttl = 600
      ip  = 77
  [nameserver]
      google.dns.a = 8.8.8.8
      google.dns.b = 8.8.4.4



Command line option
 Usage:
  fun_dns [options]
 Options:
 --- -p|--port   
   port to listen.
 --- -h|--host   
   host to bind.
 --- -c|--conf   
   configuration file(hostname).
 --- -s|--servConf 
   configuration file(server).
 --- -v|--version       
   Get the version of fun_dns
 --- -z|--zone   
   Lookup a zoneWalk
 --- -l|--log   
   path to log file

from https://github.com/badlee/fun-dns
(https://github.com/badlee/fun-dns/issues/3)

No comments:

Post a Comment