GSP
Quick Navigator

Search Site

Unix VPS
A - Starter
B - Basic
C - Preferred
D - Commercial
MPS - Dedicated
Previous VPSs
* Sign Up! *

Support
Contact Us
Online Help
Handbooks
Domain Status
Man Pages

FAQ
Virtual Servers
Pricing
Billing
Technical

Network
Facilities
Connectivity
Topology Map

Miscellaneous
Server Agreement
Year 2038
Credits
 

USA Flag

 

 

Man Pages
gen6dns(1) Linux Programmer's Manual gen6dns(1)

gen6dns — generate IPv6 DNS address and reverse records

gen6dns {-h|-V}

gen6dns -R [-b <bits>] prefix|hostname ...

gen6dns [options] [-f] [-s|-S] {-p prefix |-6 ipv4addr ...} inputfile ...

gen6dns [options] [-r] [-b <bits>] [-o origin] {-p prefix |-6 ipv4addr ...} inputfile ...

gen6dns [options] -d [-o origin] {-p prefix ...} {-P prefix ...} inputfile ...

With gen6dns it is easy to generate forward and reverse DNS records for IPv6 hosts. If you have a list of hostnames and mac addresses where each host is assigned to a subnet, the command will generate AAAA and PTR records for all the hosts.
It is possible and intended to use several provider prefixes to generate more than one AAAA record per host. Additionally gen6dns is able to use scope identifier to support split DNS configurations with different views.

A simple example will be a network with one subnet and a couple of hosts in it:

#name   int_id / mac_address   subnet_id
ipad    00:17:53:85:80:3b      :1:  # ipad uses a mac address based id
nas     0018.37ac.7801         :1:  # same for nas, but different syntax
laptop  ::d9b2:56f3:7694:1c5c  :1:  # random static interface id (MS)
rtr-int 00:13:35:a2:91:f3      :1:
rtr-ext ::1                    :0:  # manually set interface id

The interface identifier field can be specified as a MAC address or a (up to 64 bit long) Interface Identifier starting with two colons. The subnet Id is written as a hex digit string with up to 4 digits (16 Bit) enclosed in colon characters.
Now run gen6dns to generate a list of AAAA records with a given Provider Prefix:

gen6dns -f -S -p 2001:db8:b5b1:ab00::/56 hosts

ipad           IN  AAAA   2001:db8:b5b1:ab01:217:53ff:fe85:803b 
nas            IN  AAAA   2001:db8:b5b1:ab01:218:37ff:feac:7801 
laptop         IN  AAAA   2001:db8:b5b1:ab01:d9b2:56f3:7694:1c5c 
rtr-int        IN  AAAA   2001:db8:b5b1:ab01:213:35ff:fea2:91f3 
rtr-ext        IN  AAAA   2001:db8:b5b1:ab00::1 

You can also generate a list of PTR records:

gen6dns -r -o example.com -p 2001:db8:b5b1:ab00::/56 hosts

b.3.0.8.5.8.e.f.f.f.3.5.7.1.2.0.1.0    IN  PTR   ipad.example.com. 
1.0.8.7.c.a.e.f.f.f.7.3.8.1.2.0.1.0    IN  PTR   nas.example.com. 
c.5.c.1.4.9.6.7.3.f.6.5.2.b.9.d.1.0    IN  PTR   laptop.example.com. 
3.f.1.9.2.a.e.f.f.f.5.3.3.1.2.0.1.0    IN  PTR   rtr-int.example.com. 
1.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0    IN  PTR   rtr-ext.example.com. 

-V, --version
Output version information and exit
-h, --help
Print a short description of the command options.
-C char, --comment=char
Use char as comment character instead of a '#' which is the default.
-D char, --delim=char
Add char to the list of delimiter chars. The default delimiter list is space and tab.
-v, --verbose
Print some debugging messages on stderr. Use twice to get the output of a DEBUG directive in file parsing.
-w, --write
Force to write output into files instead of printing it on stdout. If this flag is given, forward records will be written to files named g6d.domain or g6d_view.domain.
Reverse records will be written to files named g6r.revbit or g6r_view.revbit.
Depending on the prefix size and the given bitmask (option -b ) reverse zones are split of at that boundary which presumably results in a lot of generated files. For example, if you have 1000 subnets and set -b 64 then in theory 1000 reverse files will be generated. Actually the maximum number of files is limited by a compile time constant which is by default set to 128. If you really want to get 1000 files like in the example above, you have to change MAXFILEP and re-compile gen6dns.
-a, --append
Like -w but does not overwrite the output files. Instead all output will be appended to the existing file.
-t ttlspec, --ttl=ttlspec
With this option, all records will have a TTL time in seconds added. The ttlspec is an integer number, optionally followed by an unit given as a single character, where s are seconds, m denotes minutes, h hours, d days and w weeks.

Some of the options are only available or useful in case of generating forward DNS records, while others are only useful for reverse record generation and some are used for dynamic dns updates.
-R, --revzone
With this option the ip6.arpa reverse zone for the specified prefix is printed on stdout. If the argument is a hostname, a dns lookup for an AAAA record is made and a PTR record with the ipv6 address as label is printed on stdout. The option -b can be used to change the label to be relative to size of the reverse zone, witch is usually on subnet (64 bit) or on prefix (/60,/56 or/48) boundary.

$ gen6dns -R 2001:db8:abc::/48
c.b.a.0.8.b.d.0.1.0.0.2.ip6.arpa.

$ gen6dns -R -b 64 horst.example.net
8.1.0.0.c.3.c.8.2.a.f.e.f.c.e.3  IN  PTR   horst.example.net.  ; 2001:db8:abc:0:5e26:aff:fe73:cc44
    

-f, --forward
Generate forward (AAAA) records only. If neither -f nor -r is given, than both type of DNS records are generated.
-s, --squeeze
Print IPv6 addresses in a compact form where leading zeros within a block of hex digits is suppressed. This option is only useful in forward mode.
-S, --full-squeeze
Print IPv6 addresses in a more compact form where not only leading zeros within a block of hex digits are suppressed, but also a contiguous list of zero blocks are written as two colons (e.g. 2001:db8:1::15). This option is only useful in forward mode.
-r, --reverse
Generate reverse (PTR) records only. If neither -f nor -r is given, than both type of DNS records are generated.
-d, --ddns
With this option dynamic update add/delete commands will be written on stdout. This option works only in forward mode so this is turned on automatically. For all prefixes specified by a -p (--add-prefix) option, an update add line is genrated, while for all -P (--del-prefix) options an update delete line is written. The output is suitable to pipe it to nsupdate(1).
Of course, the forward zone must be a dynamic one.
-l name, --lookup=name
Print out update add/del lines to stdout only for hosts matching <name>. This is useful if a new host has to be added to a dynamic zone (use -p option), or to delete a host from the zone (use option -P in this case). This option can be used in dynamic mode only.
-b mask, --bits=mask
Split reverse zones on mask boundary. Be aware, that this could result in a lot of reverse files generated (see Option -w). This option is only useful in reverse mode.
-o domain, --origin=domain
Define the domain added to the rdata of a PTR record (default is example.net). This option is only useful in reverse mode.
-p prefix, --add-prefix=prefix
This option adds an IPv6 prefix to the list of prefixes used to generate AAAA records and can be given more than once.
In case a scope definition is defined in the config file, the prefix here will be matched against the scope list, and records will be generated only for those hosts matching the scope list.
While this option is only necessary in forward mode, it helps also in reverse mode to find the zone cut for reverse zone file generation.
-P prefix, --del-prefix=prefix
This option deletes an IPv6 prefix from a dynamic zone, so it is only useful in combination with option -d (--ddns).
-6 ipv4-addr, --6to4=ipv4-addr
This works like option -p but the IPv6 prefix used is build out of the 6to4 prefix with the given IPv4 address added (e.g. -6 1.2.3.4 will be the same as -p 2002:0102:0304::/48). Be aware that RFC7526 deprecates the use of anycast prefix for 6to4 relay routers, which means that 6to4 is no longer useful as a general transition mechanism.

Take a look at the example directory of the source tree for examples to use gen6dns in different secenarios (residential user, SOHO network).

subnet
definition file.

A file with a %%SUBNET SECTION to map subnet names to subnet identifier.
The subnet id is a 16 bit hexvalue enclosed in colons, representing the bits 48 to 64 of an IPv6 address. Depending on the prefix size, not all of the subnet id bits will be used to create the subnet prefix.

In the following example, if the IPv6 prefix on the command line will be just a /56 (2001:db8:1:ef00::/56), only the righmost 8 bits of the subnet id will be used. So "subnet1" will result in 2001:db8:1:efb1::/64 and "subnet2" in 2001:db8:1:efb2::/64.

%%SUBNET SECTION
#name	subnetid
subnet1	:0ab1:
subnet2	:0ab2:
subnet3	:0001:
scope
defintion files

A file with a %%SCOPE SECTION to map IPv6 prefixes to scope parameter. It's primary use is to put ULA names into a different view than into the one used for global IPv6 addresses.
The name of the scope is referenced in a host definition. The `view' string is used to put the resource records in separate files suitable named (see option -w ). The string "*2" or "none" is used to not specify a dedicated view (default).
The domain is used for the generation of reverse PTR records instead of the domain given as option -o . The matching prefix entry is to distinguish between one or the other scope.

#
#	A file for scope definitions (domain names, views, and matching prefix)
#
%%SCOPE SECTION
#name		view	domain			matchprefix
prov1		*	example.de.		2003::/19	# telekom
prov2		*	example.de.		2a00::/22	# vodafone (arcor)
glob		none	example.de.		2000::/3	# match on any public prefix
ula		intern	mgmt.example.de.	fd00::/8
host
defintion files

A file with an optional %%HOST SECTION to map host (interface) names to interface identifiers and subnet id's.

#
#	A file with host names, IID (mac address or interface identifier) and related subnet id
#
%% HOST SECTION
#name		int_id / mac_address	subnet_id	scope
horst		00:17:53:85:80:3b	clt		[prov1, prov2]
ns1		::53			srv		[prov1]
ns2		::d9b2:56f3:7694:1c5c	srv		[prov2]
hugo <24h>	00:13:35:a2:91:f4	:1:		[prov1, prov2, mgmt]
^		IN  A		1.2.3.4
^		IN  SSHFP	1 1	1234563733937933773072370274272427e8=
^		IN  SSHFP	1 2	533a563733937933773072370274272427e8=
gustav.test	0013.35a2.91f5		:1:		[mgmt]
rtr1		::100b:0:0:1		lo		[mgmt]

The name of the host is the first string in a line. If it is a multi homed host, than it is the name of one of the interfaces of this host. The name can be a subdomain (e.g. host.ext) and optionally followed by a TTL specification enclosed in angle brackets.
If the name is a caret, than the line is a continuation of the previous host entry, and the line itself will be copied to the forward file unmodified.

The next field is the interface identifier, specified as the rightmost 64 bit of the IPv6 address, or as a 48 bit ethernet mac address. In the last case the usual way to write down a mac address is supported (colon or dashed seperated six bytes or dot seperated two byte hex values). In the former case the string must start with two colons, and must be specified as a 64 bit IPv6 address which could be abbreviated in the usual way.

The next field is the subnet ID written as subnet id name or as the subnet id number (enclosed in colons).

The last field is the list of scopes for this host entry. The list is enclosed in squared brackets with each entry delimited by comma.

Some of the options are only meaningful in certain gen6dns modes.

A subnet specific scope would be useful too.

There are some debug commands implemented in the file parser which helps in debugging the internal data structures.

%%DEBUG print-scopelist
%%DEBUG print-subnetlist
%%DEBUG print-prefixlist
Those commands should not used during normal operation.

The caret syntax of an host entry is not supported in dynamic update mode. However, this is an ugly hack anyway and will not supported in upcoming versions of gen6dns.

Written by Holger Zuleger

Copyright (c) 2015 by Holger Zuleger. Licensed under the BSD Licences. There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.

named(8), rndc(8), soaserial(1), dig(1)
May 6, 2016

Search for    or go to Top of page |  Section 1 |  Main Index

Powered by GSP Visit the GSP FreeBSD Man Page Interface.
Output converted with ManDoc.