diff --git a/README.md b/README.md index 1afff2f17..6fdea9d34 100644 --- a/README.md +++ b/README.md @@ -4,35 +4,38 @@ [![Gitter chat](https://badges.gitter.im/dnscontrol/Lobby.png)](https://gitter.im/dnscontrol/Lobby) [![Google Group chat](https://img.shields.io/badge/google%20group-chat-green.svg)](https://groups.google.com/forum/#!forum/dnscontrol-discuss) -DNSControl is a system for maintaining DNS zones. It has two parts: +[DNSControl](https://stackexchange.github.io/dnscontrol/) is a system +for maintaining DNS zones. It has two parts: a domain specific language (DSL) for describing DNS zones plus software that processes the DSL and pushes the resulting zones to -DNS providers such as Route53, Cloudflare, and Gandi. It can talk -to Microsoft Active Directory and it generates the most beautiful -BIND zone files ever. It runs anywhere Go runs (Linux, macOS, +DNS providers such as Route53, Cloudflare, and Gandi. It can send +the same DNS records to multiple providers. It even generates +the most beautiful BIND zone files ever. It runs anywhere Go runs (Linux, macOS, Windows). The provider model is extensible, so more providers can be added. Currently supported DNS providers: + - AWS Route 53 - Active Directory - Azure DNS - BIND - - Cloudflare - ClouDNS - - DigitalOcean + - Cloudflare - DNSimple + - DigitalOcean - Exoscale - Gandi - - Google + - Google DNS - HEXONET - Internet.bs - Linode - - Namecheap - - Name.com - NS1 - - Route 53 + - Name.com + - Namecheap + - OVH + - OctoDNS + - OpenSRS - SoftLayer - Vultr - - OVH At Stack Overflow, we use this system to manage hundreds of domains and subdomains across multiple registrars and DNS providers. @@ -68,43 +71,46 @@ See [Getting Started](https://stackexchange.github.io/dnscontrol/getting-started # Benefits -* Editing zone files is error-prone. Clicking buttons on a web -page is irreproducible. -* Switching DNS providers becomes a no-brainer. The DNSControl -language is vendor-agnostic. If you use it to maintain your DNS -zone records, you can switch between DNS providers easily. In fact, -DNSControl will upload your DNS records to multiple providers, which -means you can test one while switching to another. We've switched -providers 3 times in three years and we've never lost a DNS record. -* Adopt CI/CD principles to DNS! At StackOverflow we maintain our -DNSControl configurations in Git and use our CI system to roll out -changes. Keeping DNS information in a VCS means we have full -history. Using CI enables us to include unit-tests and system-tests. -Remember when you forgot to include a "." at the end of an MX record? -We haven't had that problem since we included a test to make sure -Tom doesn't make that mistake... again. -* Variables save time! Assign an IP address to a constant and use -the variable name throughout the file. Need to change the IP address -globally? Just change the variable and "recompile." -* Macros! Define your SPF records, MX records, or other repeated -data once and re-use them for all domains. -* Control Cloudflare from a single location. Enable/disable -Cloudflare proxying (the "orange cloud" button) directly from your -DNSControl files. -* Keep similar domains in sync with transforms and other features. -If one domain is supposed to be the same -* It is extendable! All the DNS providers are written as plugins. -Writing new plugins is very easy. +* **Less error-prone** than editing a BIND zone file. +* **More reproducible** than clicking buttons on a web portal. +* **Easily switch between DNS providers:** The DNSControl language is + vendor-agnostic. If you use it to maintain your DNS zone records, + you can switch between DNS providers easily. In fact, DNSControl + will upload your DNS records to multiple providers, which means you + can test one while switching to another. We've switched providers 3 + times in three years and we've never lost a DNS record. +* **Adopt CI/CD principles to DNS!** At StackOverflow we maintain our + DNSControl configurations in Git and use our CI system to roll out + changes. Keeping DNS information in a VCS means we have full + history. Using CI enables us to include unit-tests and + system-tests. Remember when you forgot to include a "." at the end + of an MX record? We haven't had that problem since we included a + test to make sure Tom doesn't make that mistake... again. +* **Adopt PR-based updates.** Allow developers to send updates as PRs, + which you can review before you approve. +* **Variables save time!** Assign an IP address to a constant and use the + variable name throughout the file. Need to change the IP address + globally? Just change the variable and "recompile." +* **Macros!** Define your SPF records, MX records, or other repeated data + once and re-use them for all domains. +* **Control Cloudflare from a single source of truth.** Enable/disable + Cloudflare proxying (the "orange cloud" button) directly from your + DNSControl files. +* **Keep similar domains in sync** with transforms and other features. If + one domain is supposed to be a filtered version of another, this is + easy to set up. +* **It is extendable!** All the DNS providers are written as plugins. + Writing new plugins is very easy. # Installation ## From source -DNSControl can be built with Go version 1.10 or higher. To install, simply run +DNSControl can be built with Go version 1.14 or higher. To install, simply run `go get github.com/StackExchange/dnscontrol` -dnscontrol should be installed in $GOPATH/bin +dnscontrol will be installed in $GOPATH/bin ## Via packages @@ -119,3 +125,7 @@ Alternatively, on Mac you can install it using homebrew: ``` docker run --rm -it -v $(pwd)/dnsconfig.js:/dns/dnsconfig.js -v $(pwd)/creds.json:/dns/creds.json stackexchange/dnscontrol dnscontrol preview ``` + +## More info at our web site + +[https://stackexchange.github.io/dnscontrol/](https://stackexchange.github.io/dnscontrol/)