Naively Programmable Module
    Have ideas to improve npm?Join in the discussion! »

    zone-file

    1.0.0 • Public • Published

    Zone File JS

    CircleCI npm npm npm Slack

    An RFC1035-compliant DNS zone file parser and generator for Node.js and the browser. Based on the dns-zonefile library by Elgs Qian Chen.

    Installation

    $ npm install zone-file

    Usage

    Making Zone Files

    import { makeZoneFile } from 'zone-file'
    let zoneFileText = makeZoneFile(zoneFileJson)

    Parsing Zone Files

    import { parseZoneFile } from 'zone-file'
    let zoneFileJson = parseZoneFile(zoneFileText)

    Zone File Objects

    import { ZoneFile } from 'zone-file'
     
    let zoneFileData = {
      "$origin": "MYDOMAIN.COM.",
      "$ttl": 3600,
      "a": [
        { "name": "@", "ip": "127.0.0.1" },
        { "name": "www", "ip": "127.0.0.1" }
      ]
    }
     
    let zoneFile = new ZoneFile(zoneFileData)
    let zoneFileString = zoneFile.toString()
    let zoneFileJson = zoneFile.toJSON()

    Background Info

    This library accepts both zone data expressed as a JSON object or as a plain text zone file. It supports SOA, NS, A, AAAA, CNAME, MX, PTR, SRV, TXT and URI record types as well as the $ORIGIN keyword (for zone-wide use only). Each record type (and the $ORIGIN keyword) is optional, although bind expects to find at least an SOA record in a valid zone file.

    Forward DNS Zone Files

    The following JSON produces a zone file for a forward DNS zone:

    {
        "$origin": "MYDOMAIN.COM.",
        "$ttl": 3600,
        "soa": {
            "mname": "NS1.NAMESERVER.NET.",
            "rname": "HOSTMASTER.MYDOMAIN.COM.",
            "serial": "{time}",
            "refresh": 3600,
            "retry": 600,
            "expire": 604800,
            "minimum": 86400
        },
        "ns": [
            { "host": "NS1.NAMESERVER.NET." },
            { "host": "NS2.NAMESERVER.NET." }
        ],
        "a": [
            { "name": "@", "ip": "127.0.0.1" },
            { "name": "www", "ip": "127.0.0.1" },
            { "name": "mail", "ip": "127.0.0.1" }
        ],
        "aaaa": [
            { "ip": "::1" },
            { "name": "mail", "ip": "2001:db8::1" }
        ],
        "cname":[
            { "name": "mail1", "alias": "mail" },
            { "name": "mail2", "alias": "mail" }
        ],
        "mx":[
            { "preference": 0, "host": "mail1" },
            { "preference": 10, "host": "mail2" }
        ],
        "txt":[
            { "name": "txt1", "txt": "hello" },
            { "name": "txt2", "txt": "world" }
        ],
        "srv":[
            { "name": "_xmpp-client._tcp", "target": "jabber", "priority": 10, "weight": 0, "port": 5222 },
            { "name": "_xmpp-server._tcp", "target": "jabber", "priority": 10, "weight": 0, "port": 5269 }
        ]
    }

    dns-zonefile will produce the following zone file from the above information, while the following zone file can as well be parsed to produce the zone file like above:

    ; Zone: MYDOMAIN.COM.
    ; Exported  (yyyy-mm-ddThh:mm:ss.sssZ): 2014-09-22T21:10:36.697Z
    
    $ORIGIN MYDOMAIN.COM.
    $TTL 3600
    
    ; SOA Record
    @	 		IN	SOA	NS1.NAMESERVER.NET.	HOSTMASTER.MYDOMAIN.COM.	(
                1411420237	 ;serial
                3600	 ;refresh
                600	 ;retry
                604800	 ;expire
                86400	 ;minimum ttl
    )
    
    ; NS Records
    @	IN	NS	NS1.NAMESERVER.NET.
    @	IN	NS	NS2.NAMESERVER.NET.
    
    ; MX Records
    @	IN	MX	0	mail1
    @	IN	MX	10	mail2
    
    ; A Records
    @	IN	A	127.0.0.1
    www	IN	A	127.0.0.1
    mail	IN	A	127.0.0.1
    
    ; AAAA Records
    @	IN	AAAA	::1
    mail	IN	AAAA	2001:db8::1
    
    ; CNAME Records
    mail1	IN	CNAME	mail
    mail2	IN	CNAME	mail
    
    ; TXT Records
    txt1	IN	TXT	"hello"
    txt2	IN	TXT	"world"
    
    ; SRV Records
    _xmpp-client._tcp	IN	SRV	10	0	5222	jabber
    _xmpp-server._tcp	IN	SRV	10	0	5269	jabber
    

    Reverse DNS Zone Files

    This JSON will produce a zone file for a reverse DNS zone (the $ORIGIN keyword is recommended for reverse DNS zones):

    {
        "$origin": "0.168.192.IN-ADDR.ARPA.",
        "$ttl": 3600,
        "soa": {
            "mname": "NS1.NAMESERVER.NET.",
            "rname": "HOSTMASTER.MYDOMAIN.COM.",
            "serial": "{time}",
            "refresh": 3600,
            "retry": 600,
            "expire": 604800,
            "minimum": 86400
        },
      "ns": [
          { "host": "NS1.NAMESERVER.NET." },
          { "host": "NS2.NAMESERVER.NET." }
      ],
      "ptr":[
          { "name": 1, "host": "HOST1.MYDOMAIN.COM." },
          { "name": 2, "host": "HOST2.MYDOMAIN.COM." }
      ]
    }

    dns-zonefile will produce the following zone file from the above information, while the following zone file can as well be parsed to produce the zone file like above:

    ; Zone: 0.168.192.IN-ADDR.ARPA.
    ; Exported  (yyyy-mm-ddThh:mm:ss.sssZ): 2014-09-22T21:10:36.698Z
    
    $ORIGIN 0.168.192.IN-ADDR.ARPA.
    $TTL 3600
    
    ; SOA Record
    @	 		IN	SOA	NS1.NAMESERVER.NET.	HOSTMASTER.MYDOMAIN.COM.	(
                1411420237	 ;serial
                3600	 ;refresh
                600	 ;retry
                604800	 ;expire
                86400	 ;minimum ttl
    )
    
    ; NS Records
    @	IN	NS	NS1.NAMESERVER.NET.
    @	IN	NS	NS2.NAMESERVER.NET.
    
    ; PTR Records
    1	IN	PTR	HOST1.MYDOMAIN.COM.
    2	IN	PTR	HOST2.MYDOMAIN.COM.
    

    Install

    npm i zone-file

    DownloadsWeekly Downloads

    2,132

    Version

    1.0.0

    License

    ISC

    Unpacked Size

    43.4 kB

    Total Files

    32

    Last publish

    Collaborators

    • avatar
    • avatar