3 min zu lesen.
Willkommen zu meinem neuesten Blogbeitrag, in dem ich dir einen tiefen Einblick in die Welt der DNS-Server gebe und zeige, wie du mithilfe von Nomad und Bind9 deinen eigenen DNS-Server auf einem Ubuntu-System einrichten kannst. Diese Anleitung ermöglicht es dir, eine individuelle Domain zu hosten und die Kontrolle über deine Netzwerkkommunikation zu übernehmen.
Das Domain Name System (DNS) ist ein essentieller Bestandteil jedes Netzwerks, da es die Zuordnung von Domainnamen zu IP-Adressen ermöglicht. Die Einrichtung eines eigenen DNS-Servers bietet nicht nur mehr Kontrolle, sondern ermöglicht auch die Anpassung nach individuellen Bedürfnissen.
Um loszulegen, erstellen wir einen Nomad Job mit einer Gruppe und einem Task. Du kannst die Namen nach deinen Bedürfnissen anpassen. Hier ist der grundlegende Code, den du als Ausgangspunkt verwenden kannst:
# Benutzerdefinierte Parameter
variable "domain_name" {
description = "Deine eigene Domain, die gehostet werden soll"
}
variable "network_ip_range" {
description = "IP-Bereich deines Heimnetzwerks"
}
variable "dns_ip" {
description = "IP-Adresse des DNS-Servers"
}
variable "email_address" {
description = "Deine Kontakt-E-Mail-Adresse ohne @-Zeichen, stattdessen ein '.'"
}
job "dns" {
group "dns-server" {
network {
port "dns" {
static = 53
to = 53
}
}
service {
name = "bind9"
}
task "bind9" {
driver = "docker"
config {
image = "ubuntu/bind9"
ports = ["dns"]
mounts {
type = "bind"
target = "/etc/bind"
source = "etc/bind"
readonly = false
bind_options {
propagation = "rshared"
}
}
}
env {
TZ = "UTC"
BIND9_USER = "root"
}
template {
data = <<EFF
acl internal {
${var.network_ip_range}/24;
127.0.0.1;
localhost;
};
options {
forwarders {
8.8.8.8;
1.1.1.1;
};
allow-query { internal; };
recursion yes;
dnssec-validation auto;
};
include "/etc/bind/${var.domain_name}.conf";
EFF
destination = "/etc/bind/named.conf"
change_mode = "signal"
change_signal = "SIGINT"
}
template {
data = <<EFF
zone "${var.domain_name}" IN {
type master;
file "/etc/bind/${var.domain_name}.zone";
};
EFF
destination = "/etc/bind/${var.domain_name}.conf"
change_mode = "signal"
change_signal = "SIGINT"
}
template {
data = <<EFF
$TTL 2d
$ORIGIN ${var.domain_name}.
@ IN SOA ns.${var.domain_name}. ${var.email_address}. (
1691399727
12h
15m
3w
2h
)
IN NS ns.${var.domain_name}.
ns IN A ${var.dns_ip}
EFF
destination = "/etc/bind/${var.domain_name}.zone"
change_mode = "script"
change_script {
command = "service"
args = [
"named",
"reload",
"${var.domain_name}"
]
timeout = "5s"
fail_on_error = false
}
}
}
}
}
Speichere diese Datei ab als dein-dns-job.nomad
.
Du kannst nun die Parameter wie domain_name
, network_ip_range
, dns_ip
und email_address
bei email_address ist es wichtig, dass das @ durch einen Punkt ersetzt wird, nach Belieben anpassen, um deine eigene Domain erfolgreich zu hosten. Folge einfach den Kommentaren und passe die Werte entsprechend deiner Konfiguration an.
Dieses Skript nutzt Nomad und Bind9, um die Einrichtung eines DNS-Servers auf einem Ubuntu-System zu automatisieren. Hier sind die Schritte, die das Skript durchführt:
Erstelle als nächstes eine Parameterdatei (zum Beispiel dns_params.hcl), in der du die spezifischen Werte für deine Konfiguration festlegst. Hier ist ein Beispiel:
domain_name = "deine-domain.de"
network_ip_range = "192.168.1.0"
dns_ip = "192.168.1.2"
email_address = "admin@deine-domain.de"
Führe den Nomad-Job mit der Parameterdatei aus:
nomad job run -var-file=dns_params.hcl dein-dns-job.nomad
Erlaube eingehenden DNS-Verkehr auf Port 53:
sudo ufw allow 53
Bearbeite die Datei /etc/resolv.conf und füge die IP-Adresse deines DNS-Servers hinzu:
nameserver 192.168.1.2
Überprüfe die DNS-Konfiguration, indem du einen Test durchführst:
nslookup deine-domain.de 192.168.1.2
Du solltest eine erfolgreiche DNS-Auflösung erhalten.
Mit diesen Schritten sollte dein DNS-Server auf Ubuntu korrekt konfiguriert und einsatzbereit sein. Beachte, dass du die genannten IP-Adressen und Domain-Namen entsprechend deiner tatsächlichen Konfiguration anpassen musst. Viel Erfolg beim Hosten deiner eigenen Domain!