DNS as code: versjonsstyr DNS-konfigurasjonen
DNS as code betyr at du styrer DNS-oppføringene dine som deklarativ kode i stedet for å klikke deg gjennom et kontrollpanel. Oppføringene ligger i et Git-repositorium, blir gjennomgått som all annen kode, og rulles ut med samme verktøy som resten av infrastrukturen. For utviklere som forvalter domener alene eller for kunder, sparer det tid og fjerner en hel klasse med manuelle feil.
Kort oppsummert: Med DNS as code definerer du DNS-oppføringene som tekst i versjonskontroll, og lar et verktøy som Terraform eller dnscontrol synkronisere dem mot DNS-tilbyderen. Endringer kan reviewes i en pull request, rulles tilbake med én kommando, og du unngår oppsett som bare finnes i hodet til én person.
Hva er DNS as code?
DNS as code er måten å behandle DNS-konfigurasjon som applikasjonskode. DNS (Domain Name System) er systemet som oversetter domenenavn som eksempel.no til IP-adresser, og oppføringene i sonen avgjør alt fra hvor nettsiden peker til hvor e-posten går.
Et verktøy sammenligner den ønskede tilstanden i filene med den faktiske tilstanden hos DNS-tilbyderen, og utfører bare de endringene som trengs. Prinsippet er det samme som infrastruktur som kode (IaC), avgrenset til DNS-sonen.
Hvorfor styre DNS fra kode
Å flytte DNS inn i kode endrer hvordan teamet jobber med et av de mest kritiske lagene i infrastrukturen. Det gir mest gevinst når flere enn én person forvalter domener, eller når du vil at endringer skal følge samme rutiner som applikasjonskoden.
Versjonskontroll gir historikk
Alle endringer blir en commit med tidspunkt, forfatter og diff. Oppdager du at en endring ødela e-postleveransen, kan du se nøyaktig hva som ble endret, og rulle tilbake til en kjent god tilstand.
Uten versjonskontroll må du stole på at noen husker hva som sto der før. Det gjør de sjeldent.
Reproducerbare miljøer
Du kan bruke de samme definisjonene i test, staging og produksjon ved å parameterisere sonenavn og verdier. En pull request kan bygge et testmiljø som speiler produksjons-DNS-en, slik at endringer er verifisert før de treffer virkeligheten.
Code review fanger feil tidlig
Når DNS lever i pull requests, får endringer samme behandling som all annen kode. En kollega kan se at SPF-oppføringen for e-post ikke er oppdatert, eller at TTL-verdien er feil, før endringen rulles ut.
Populære verktøy for DNS as code
Det finnes flere modne verktøy, og valget handler mest om hva teamet allerede bruker. De tre vanligste er Terraform, dnscontrol og Pulumi.
Terraform
Terraform er det vanligste valget når du allerede bruker det til infrastruktur som kode. Providerne for AWS Route 53, Google Cloud DNS og Cloudflare dekker de fleste behov, og du bruker samme workflow med plan og apply som for resten av infrastrukturen.
Terraform skriver tilstand til en state-fil, som du må lagre trygt og dele med teamet. Uten delt state kan to utviklere overskrive hverandres endringer.
dnscontrol
dnscontrol er et gratis, åpen kildekode-verktøy som er spesialbygget for DNS. Du beskriver ønsket tilstand i JavaScript, og verktøyet oversetter det til API-kall for over 30 DNS-tilbydere.
Det er et godt valg hvis du vil ha et lett verktøy dedikert til DNS, uten å trekke inn hele Terraform-økosystemet.
Pulumi
Pulumi lar deg beskrive DNS med vanlige programmeringsspråk som TypeScript, Python og Go. Foretrekker teamet reell kode framfor HCL, er Pulumi et naturlig valg.
Slik kommer du i gang i 6 steg
Her er en konkret plan for å flytte et .no-domene til DNS as code med Terraform.
- Sett opp et Git-repositorium med en prosjektmappe som inneholder main.tf, variables.tf og outputs.tf.
- Legg til provideren for DNS-tilbyderen din, for eksempel hashicorp/aws, og konfigurer autentisering med hemmeligheter som ligger trygt i et vault eller lignende.
- Importer eksisterende oppføringer med en import-kommando, slik at den nye koden blir ekvivalent med dagens oppsett.
- Kjør terraform plan og kontroller at verktøyet ikke foreslår uventede endringer.
- Opprett en pull request og la en kollega gå gjennom diffen.
- Kjør terraform apply etter godkjenning, og verifiser at oppføringene slår gjennom med dig eller lignende verktøy.
Skal du starte fra null, definerer du sonen og oppføringene direkte i koden og peker navneserverne mot tilbyderen. For et .no-domene må registraren godkjenne navneserverbyttet. Hos en norsk registrar som Feno skjer dette oversiktlig, og du får varsel ved endringer.
DNS as code og DNSSEC
DNSSEC gjør at svar fra DNS kan verifiseres kryptografisk, slik at en angriper ikke kan forfalske hvor domenet peker. Noen av verktøyene nevnt over kan styre DNSSEC-oppføringer, og det bør være en fast del av oppsettet.
Er domenet registrert hos en registrar som Feno, signeres sonen og DS-posten sendes til Norid automatisk, uten manuelt arbeid. Hostet du sonen selv hos en ekstern tilbyder, må nøkkelmateriale og DS-oppføringer forvaltes i koden din.
Vanlige fallgruver og gode vaner
- Beskytt state-filen. Del den med teamet, og begrens tilgangen. En mistet state-fil betyr tap av oversikt over hvilke oppføringer som faktisk finnes.
- Unngå manuelle endringer ved siden av koden. Da skaper du konfigurasjonsdrift, en tilstand verktøyet ikke kjenner, og neste apply kan slette dem.
- Vær nøye med TTL-verdier. TTL (time to live) styrer hvor lenge et DNS-svar ligger i cache. En høy TTL gjør at feil endringer henger igjen i timer, mens en lav TTL gir raskere forandringer, men flere spørringer.
- Test e-post og nettside etter endringer. En fjernet MX-oppføring (som peker e-posten til riktig server) kan knekke leveransen uten at det gir noen feilmelding.
Ofte stilte spørsmål om DNS as code
Er DNS as code verdt det for ett enkelt domene?
Har du ett domene som sjelden endres, er gevinsten liten. Verdien kommer når flere domener, flere personer eller forpliktende endringsrutiner er i bildet. Du kan likevel versjonsstyre et enkelt domene og få historikk og rask gjenoppretting nesten gratis.
Må jeg bruke Terraform?
Nei. dnscontrol og Pulumi er gode alternativer, og til og med et skript som kaller DNS-API-en kan være bedre enn å klikke manuelt. Det som teller som DNS as code, er at tilstanden er deklarativ, versjonsstyrt og reproduserbar.
Hvorfor er ikke et imperativt skript nok?
Et skript som oppretter oppføringer vet ikke hvilken tilstand som faktisk gjelder, og rekkefølgen betyr noe. Deklarative verktøy beregner diffen mot virkeligheten, og er trygge å kjøre gjentatte ganger.
Norsk eierskap og DNSSEC på domenene dine
Uansett verktøy står og faller et DNS-as-code-oppsett på at registrering, varsling og DNSSEC er på plass rundt domenene. Registrerer du hos en norsk registrar, får du transparente priser og et domene som er enkelt å automatisere videre.
Registrer domenet ditt hos Feno i dag fra 99 kroner i året, og få DNSSEC, varsling og skjult e-post på alle domener.