Servers
Hostnavn | Rolle | OS | Lokation |
---|---|---|---|
authns-master.noahks.net | Hidden master | Debian 12 | Albertslund, Danmark |
ns1.noahks.net | Navneserver #1 | Debian 12 | Albertslund, Danmark |
ns2.noahks.net | Navneserver #2 | Debian 12 | Eygelshoven, Holland |
ns3.noahks.net | Navneserver #3 | Debian 12 | Seattle, USA |
Opsætning af software
Jeg havde et ønske om et web interface og/eller API adgang til at administrere min DNS records og tilføje nye domæner. Her stødte jeg hurtigt på PowerDNS som er et udbredt produkt, brugt af mange. For at PowerDNS fungerer optimalt, kræver man har en database som backend, hvilket for mit vedkommende er totalt overkill og tilføjer endnu et point of failure.
Derfor endte jeg på at køre PowerDNS på en hidden master og BIND9 på mine slave servers. Det giver mig fuld API adgang uden at skulle vedligeholde en MySQL installation på alle 3 DNS slaves.
Automatisering
Mens der er fuld API adgang via PowerDNS på min hidden master til at lave nye zones, skal de jo også tilføjes på de tre slaves. Lige noget Ansible kan hjælpe mig med at automatisere.
Ansible playbook:
- hosts: slave
become: yes
vars_files: vars/zones.yml
tasks:
- name: Create new zone on slaves
file:
path: "/var/cache/bind/zones/{{item.file}}"
state: touch
group: bind
owner: bind
modification_time: preserve
loop: "{{ zones }}"
- name: Create named.conf.local
template:
src: templates/named.conf.local.slave.j2
dest: /etc/bind/named.conf.local
owner: bind
group: bind
- name: Reload BIND9
command: rndc reload
vars/zones.yml
masters:
- 2001:67c:2aa0::63
zones:
- name: noahks.dk
file: noahks.dk.zone
- name: noahks.net
file: noahks.net.zone
- name: zoko.dk
file: zoko.dk.zone
- name: 0.a.a.2.c.7.6.0.1.0.0.2.ip6.arpa
file: 0.a.a.2.c.7.6.0.1.0.0.2.ip6.arpa.zone
- name: 8.1.0.0.c.e.b.2.1.a.2.ip6.arpa
file: 8.1.0.0.c.e.b.2.1.a.2.ip6.arpa.zone
Template fil, der bliver skubbet ud til slaves:
## {{ ansible_managed }}
{% for slave_zone in zones %}
zone "{{ slave_zone.name }}" {
type slave;
file "/var/cache/bind/zones/{{ slave_zone.file }}";
masters {
{% for master in masters %}
{{ master }};
{% endfor %}
};
};
{% endfor %}
Hvorfor ikke Cloudflare DNS eller en af mange gratis DNS udbydere?
For mig handler det om kontrol over min egen infrastruktur, endeløse automatiseringsmuligheder uden at blive rate limited af en API, ubegrænset antal zones/records.
Desuden er mit management af DNS ikke exposed til internettet, hvilket bidrager til sikkerheden af mit setup.