2016-03-18 21:25:47 +00:00
|
|
|
# CoreDNS
|
2016-03-18 21:31:55 +00:00
|
|
|
|
|
|
|
CoreDNS is DNS server that started as a fork of [Caddy](https://github.com/mholt/caddy/). It has the
|
|
|
|
same model: it chains middleware.
|
|
|
|
|
2016-04-03 19:05:49 +01:00
|
|
|
## Status
|
|
|
|
|
2016-04-13 23:23:35 +01:00
|
|
|
I'm using CoreDNS is my primary, authoritative, nameserver for my domains (`miek.nl`, `atoom.net`
|
|
|
|
and a few others). CoreDNS should be stable enough to provide you with a good DNS service.
|
|
|
|
|
2016-04-03 19:05:49 +01:00
|
|
|
Currently CoreDNS is able to:
|
|
|
|
|
2016-04-16 16:16:52 +01:00
|
|
|
* Serve zone data from a file, both DNSSEC (NSEC only) and DNS is supported.
|
2016-04-03 19:05:49 +01:00
|
|
|
* Retrieve zone data from primaries, i.e. act as a secondary server.
|
2016-04-16 16:16:52 +01:00
|
|
|
* Loadbalancing of responses.
|
2016-04-03 19:05:49 +01:00
|
|
|
* Allow for zone transfers, i.e. act as a primary server.
|
2016-04-19 10:26:29 +00:00
|
|
|
* Caching
|
|
|
|
* Use etcd as a backend, i.e. a 98.5% replacement for
|
2016-04-03 19:05:49 +01:00
|
|
|
[SkyDNS](https://github.com/skynetservices/skydns).
|
|
|
|
* Serve as a proxy to forward queries to some other (recursive) nameserver.
|
2016-04-08 07:04:23 +01:00
|
|
|
* Rewrite queries (both qtype, qclass and qname).
|
2016-04-13 23:23:35 +01:00
|
|
|
* Provide metrics (by using Prometheus).
|
2016-04-03 19:05:49 +01:00
|
|
|
* Provide Logging.
|
2016-04-16 16:16:52 +01:00
|
|
|
* Provide load-balancing (A/AAAA shuffling) of returned responses.
|
2016-04-13 23:23:35 +01:00
|
|
|
* Has support for the CH class: `version.bind` and friends.
|
2016-04-03 19:05:49 +01:00
|
|
|
|
2016-04-16 16:16:52 +01:00
|
|
|
There are still few [issues](https://github.com/miekg/coredns/issues), and work is ongoing on making
|
|
|
|
things fast and reduce the memory usage.
|
2016-04-03 20:13:33 +01:00
|
|
|
|
2016-04-16 16:16:52 +01:00
|
|
|
All in all, CoreDNS should be able to provide you with enough functionality to replace parts of
|
|
|
|
BIND9, Knot, NSD or PowerDNS.
|
|
|
|
Most documentation is in the source and some blog articles can be [found
|
|
|
|
here](https://miek.nl/tags/coredns/). If you do want to use CoreDNS in production, please let us
|
|
|
|
know and how we can help.
|
2016-03-18 21:31:55 +00:00
|
|
|
|
|
|
|
<https://caddyserver.com/> is also full of examples on how to structure a Corefile (renamed from
|
|
|
|
Caddyfile when I forked it).
|
2016-03-18 21:36:42 +00:00
|
|
|
|
2016-04-03 20:30:37 +01:00
|
|
|
## Examples
|
2016-03-18 21:36:42 +00:00
|
|
|
|
2016-04-03 19:05:49 +01:00
|
|
|
Start a simple proxy:
|
2016-03-18 21:36:42 +00:00
|
|
|
|
|
|
|
`Corefile` contains:
|
|
|
|
|
2016-04-03 20:30:37 +01:00
|
|
|
~~~ txt
|
2016-03-18 21:36:42 +00:00
|
|
|
.:1053 {
|
|
|
|
proxy . 8.8.8.8:53
|
|
|
|
}
|
|
|
|
~~~
|
|
|
|
|
|
|
|
Just start CoreDNS: `./coredns`.
|
|
|
|
And then just query on that port (1053), the query should be forwarded to 8.8.8.8 and the response
|
|
|
|
will be returned.
|
2016-03-20 08:45:21 +00:00
|
|
|
|
2016-04-03 20:30:37 +01:00
|
|
|
Serve the (NSEC) DNSSEC signed `miek.nl` on port 1053, errors and logging to stdout. Allow zone
|
|
|
|
transfers to everybody.
|
|
|
|
|
|
|
|
~~~ txt
|
|
|
|
miek.nl:1053 {
|
|
|
|
file /var/lib/bind/miek.nl.signed {
|
|
|
|
transfer to *
|
|
|
|
}
|
|
|
|
errors stdout
|
|
|
|
log stdout
|
|
|
|
}
|
|
|
|
~~~
|
|
|
|
|
|
|
|
Serve `miek.nl` on port 1053, but forward everything that does *not* match `miek.nl` to a recursive
|
|
|
|
nameserver *and* rewrite ANY queries to HINFO.
|
|
|
|
|
|
|
|
~~~ txt
|
|
|
|
.:1053 {
|
|
|
|
rewrite ANY HINFO
|
|
|
|
proxy . 8.8.8.8:53
|
|
|
|
|
|
|
|
file /var/lib/bind/miek.nl.signed miek.nl {
|
|
|
|
transfer to *
|
|
|
|
}
|
|
|
|
errors stdout
|
|
|
|
log stdout
|
|
|
|
}
|
|
|
|
~~~
|
|
|
|
|
|
|
|
All the above examples are possible with the *current* CoreDNS.
|
|
|
|
|
|
|
|
## What remains to be done
|
|
|
|
|
|
|
|
* Website?
|
|
|
|
* Logo?
|
|
|
|
* Optimizations.
|
|
|
|
* Load testing.
|
2016-04-16 16:16:52 +01:00
|
|
|
* The [issues](https://github.com/miekg/coredns/issues).
|
2016-04-03 20:30:37 +01:00
|
|
|
|
|
|
|
## Blog
|
2016-03-20 08:45:21 +00:00
|
|
|
|
|
|
|
<https://miek.nl/tags/coredns/>
|