A simple non-recursive DNS server written in go.
go get -u github.com/brettlangdon/realm/cmd/...
git clone https://github.com/brettlangdon/realm
cd ./realm
make
$ realm --help
usage: realm [--bind BIND] [ZONE [ZONE ...]]
positional arguments:
zone DNS zone files to serve from this server
options:
--bind BIND [<host>]:<port> to bind too [default: :53]
--help, -h display this help and exit
To run a server you must have a DNS zone file.
A simple example looks like the following:
$ORIGIN example.com. ; designates the start of this zone file in the namespace
$TTL 1h ; default expiration time of all resource records without their own TTL value
example.com. IN SOA ns.example.com. username.example.com. ( 2007120710 1d 2h 4w 1h )
example.com. IN NS ns ; ns.example.com is a nameserver for example.com
example.com. IN NS ns.somewhere.example. ; ns.somewhere.example is a backup nameserver for example.com
example.com. IN MX 10 mail.example.com. ; mail.example.com is the mailserver for example.com
@ IN MX 20 mail2.example.com. ; equivalent to above line, "@" represents zone origin
@ IN MX 50 mail3 ; equivalent to above line, but using a relative host name
example.com. IN A 192.0.2.1 ; IPv4 address for example.com
IN AAAA 2001:db8:10::1 ; IPv6 address for example.com
ns IN A 192.0.2.2 ; IPv4 address for ns.example.com
IN AAAA 2001:db8:10::2 ; IPv6 address for ns.example.com
www IN CNAME example.com. ; www.example.com is an alias for example.com
wwwtest IN CNAME www ; wwwtest.example.com is another alias for www.example.com
mail IN A 192.0.2.3 ; IPv4 address for mail.example.com
mail2 IN A 192.0.2.4 ; IPv4 address for mail2.example.com
mail3 IN A 192.0.2.5 ; IPv4 address for mail3.example.com
Example taken from here.
realm ./domain.zone
By default realm
binds to port 53
, which usually requires root, so you may need to run sudo realm ./domain.zone
.
You can also specify any number of zone files by providing multiple zone files.
realm ./first.domain.zone ./second.domain.zone