DNS-Server
Die Kommunikation im Intranet/Internet funktioniert über IP-Adressen. Allerdings wäre es recht ungemütlich, wenn man in der Adresszeile anstatt einer alphanumerischen Adresse die IP-Adresse eingeben müsste. Die Arbeit für die Ermittlung der IP-Adresse aufgrund eines Namens (z. B. codigo.at) übernimmt ein DNS-Server.
Ein PC erhält im Normalfall von einem DHCP-Server eine IP-Adresse zugeteilt. Neben dieser, erhält er auch ein oder mehrere DNS-Server.
Der Ablauf für die Übersetzung für Internet-Adressen funktioniert wie folgt:
- An den auf dem PC hinterlegten DNS-Server wird eine Anfrage gestellt, die IP-Adresse zu einem bestimmten Namen/Domäne zu ermitteln.
- Kennt er die IP-Adresse, dann wird diese zurückgegeben. Wenn nicht, dann wird die Anfrage an einen von ihm hinterlegten Upstream-Server (auch rekursiver DNS-Resolver) weitergeleitet (kann auch mehrfach passieren).
- Konnte die Auflösung von keinem Upstream-Server gemacht werden, dann landet diese irgendwann bei einem DNS-Server, der diese an einen Root-Server weiterleitet, der die DNS-Server für Top-Level-Domänen (TLD; z.b. at, de, com, …) kennt. Solche Root-Server sind quer über den Globus verteilt.
- Ein TLD-DNS-Server kennt die IP-Adresse des für diese Domäne zuständigen DNS-Servers und leitet die Anfrage an diesen weiter, der die IP-Adresse zurück liefert.
- Die involvierten Upstream-Server können die IP-Adresse eine selbst definierte Zeit lang zwischen speichern, um bei zukünftigen Abfragen schneller eine Antwort liefern zu können.
Ein im eigenen Netzwerk vorhandener DNS-Server hat ein paar Vorteile:
- Diese haben im Normalfall einen Cache, wodurch wiederkehrende Anfragen das lokale Netz eine gewisse Zeit nicht verlassen müssen und somit schneller eine Antwort geliefert wird.
- Adressen können fixiert werden. Dadurch kann bspw. verhindert werden, dass die Namensauflösung für eine bestimmte Adresse gemacht werden kann oder dass für bestimmte Abfragen eine von diesem DNS-Server definierte IP-Adresse zurückgeliefert wird.
Bei mir habe ich dies (natürlich) mit Hilfe von Docker gemacht. Die docker-compose.yml sieht wie folgt aus:
version: '3'
services:
dns:
restart: always
container_name: dnsmasq
image: strm/dnsmasq
volumes:
- ./dnsmasq.conf:/etc/dnsmasq.conf
ports:
- "53:53/udp"
cap_add:
- NET_ADMIN
Und hier der Inhalt der dnsmasq.conf:
# bis zu 10.000 Einträge (Adresse zu IP) speichern
cache-size=10000
# Domäne notwendig, um Anfrage an Upstream-Server weiterzuleiten
domain-needed
# Logs werden asynchron gespeichert
log-async=5
# Protokollieren von Abfragen
log-queries
# DNS-Server vom Host ignorieren
no-resolv
# Upstream-DNS-Server
server=8.8.4.4
server=8.8.8.8
# bei Anfrage zu *.codigo.at immer 192.168.1.10 zurückgeben
address=/codigo.at/192.168.1.10
Läuft alles, kann im DHCP-Server der DNS-Server auf die IP-Adresse des Docker-Servers geändert werden, wodurch zusätzlich Abfragen über diesen laufen (nachdem die IP-Einstellungen des PC aktualisiert wurden).