dnscontrol/documentation/functions/global/REV.md
Paul Dee 731181ffa1
DOCS: Mostly styling and links (#2178)
Co-authored-by: Tom Limoncelli <tal@whatexit.org>
2023-03-15 18:43:57 -04:00

2.1 KiB

name parameters parameter_types ts_return
REV
address
address
string
string

REV returns the reverse lookup domain for an IP network. For example REV('1.2.3.0/24') returns 3.2.1.in-addr.arpa. and REV('2001:db8:302::/48) returns 2.0.3.0.8.b.d.0.1.0.0.2.ip6.arpa.. This is used in D() functions to create reverse DNS lookup zones.

This is a convenience function. You could specify D('3.2.1.in-addr.arpa', ... if you like to do things manually but why would you risk making typos?

REV complies with RFC2317, "Classless in-addr.arpa delegation" for netmasks of size /25 through /31. While the RFC permits any format, we abide by the recommended format: FIRST/MASK.C.B.A.in-addr.arpa where FIRST is the first IP address of the zone, MASK is the netmask of the zone (25-31 inclusive), and A, B, C are the first 3 octets of the IP address. For example 172.20.18.130/27 is located in a zone named 128/27.18.20.172.in-addr.arpa

If the address does not include a "/" then REV assumes /32 for IPv4 addresses and /128 for IPv6 addresses.

Note that the lower bits (the ones outside the netmask) must be zeros. They are not zeroed out automatically. Thus, REV('1.2.3.4/24') is an error. This is done to catch typos.

{% code title="dnsconfig.js" %}

D(REV('1.2.3.0/24'), REGISTRAR, DnsProvider(BIND),
  PTR("1", 'foo.example.com.'),
  PTR("2", 'bar.example.com.'),
  PTR("3", 'baz.example.com.'),
  // These take advantage of DNSControl's ability to generate the right name:
  PTR("1.2.3.10", 'ten.example.com.'),
);

D(REV('2001:db8:302::/48'), REGISTRAR, DnsProvider(BIND),
  PTR("1.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0", 'foo.example.com.'),  // 2001:db8:302::1
  // These take advantage of DNSControl's ability to generate the right name:
  PTR("2001:db8:302::2", 'two.example.com.'),                          // 2.0.0...
  PTR("2001:db8:302::3", 'three.example.com.'),                        // 3.0.0...
);

{% endcode %}

In the future we plan on adding a flag to A()which will insert the correct PTR() record in the appropriate D(REV()) domain (i.e. .arpa domain) has been defined.