| 
									
										
										
										
											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-24 08:11:00 +01:00
										 |  |  | CoreDNS aims to be a fast and flexible DNS server. The keyword here is *flexible*, with CoreDNS you | 
					
						
							|  |  |  | are able to do what you want with your DNS data. And if not: write a middleware! | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-04-03 19:05:49 +01:00
										 |  |  | Currently CoreDNS is able to: | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-04-20 12:46:24 +00:00
										 |  |  | * Serve zone data from a file, both DNSSEC (NSEC only) and DNS is supported (middleware/file). | 
					
						
							| 
									
										
										
										
											2016-05-01 11:12:07 +01:00
										 |  |  | * Retrieve zone data from primaries, i.e. act as a secondary server (AXFR only) (middleware/secondary). | 
					
						
							|  |  |  | * Sign zone data on-the-fly (middleware/dnssec). | 
					
						
							| 
									
										
										
										
											2016-04-20 12:46:24 +00:00
										 |  |  | * Loadbalancing of responses (middleware/loadbalance). | 
					
						
							|  |  |  | * Allow for zone transfers, i.e. act as a primary server (middleware/file). | 
					
						
							|  |  |  | * Caching (middleware/cache). | 
					
						
							| 
									
										
										
										
											2016-05-01 11:12:07 +01:00
										 |  |  | * Health checking (middleware/health). | 
					
						
							| 
									
										
										
										
											2016-04-19 10:26:29 +00:00
										 |  |  | * Use etcd as a backend, i.e. a 98.5% replacement for | 
					
						
							| 
									
										
										
										
											2016-04-20 12:46:24 +00:00
										 |  |  |   [SkyDNS](https://github.com/skynetservices/skydns) (middleware/etcd). | 
					
						
							|  |  |  | * Serve as a proxy to forward queries to some other (recursive) nameserver (middleware/proxy). | 
					
						
							|  |  |  | * Rewrite queries (both qtype, qclass and qname) (middleware/rewrite). | 
					
						
							|  |  |  | * Provide metrics (by using Prometheus) (middleware/metrics). | 
					
						
							|  |  |  | * Provide Logging (middleware/log). | 
					
						
							|  |  |  | * Has support for the CH class: `version.bind` and friends (middleware/chaos). | 
					
						
							| 
									
										
										
										
											2016-05-01 11:12:07 +01:00
										 |  |  | * Profiling support (middleware/pprof). | 
					
						
							| 
									
										
										
										
											2016-04-20 12:46:24 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  | ## Status
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 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(SEC) service. | 
					
						
							| 
									
										
										
										
											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/> |