Virtuelle Netzwerke (Teil II): DNS
DNS zum virtuellen Netzwerk hinzufügen
In Teil I haben wir ein kleines geswitchtes Netzwerk zwischen drei virtuellen Geräten erstellt, von denen jedes in seiner eigenen Namensraum (red
, green
und blue
) platziert wurde. Wir haben sie mit einem (Open) Virtual Switch mit drei Ports (veth-r
, veth-g
und veth-b
) verbunden. Die gesamte Topologie sieht wie folgt aus:
Figure 1: Netzwerkdiagramm
Nun möchten wir DNS1 hinzufügen.
Installation von Bind
Dafür müssen wir zuerst einen DNS-Server installieren. Es gibt einige Optionen wie dnsmasq oder djbdns, aber wir bleiben bei bind9 als dem quasi Standard für DNS-Server.
if [ -f /etc/os-release ]; then . /etc/os-release else echo "Die Linux-Distribution konnte nicht bestimmt werden." exit 1 fi case ${ID_LIKE%% *} in debian|ubuntu) sudo apt install -y bind ;; fedora|rhel|centos) sudo yum install -y bind ;; suse|opensuse) sudo zypper install -y bind ;; arch) sudo pacman -Syu bind ;; *) echo "Nicht unterstützte Distribution." exit 1 ;; esac if [[ $ID == arch ]]; then sudo pacman -Syu bind else echo "Nicht unterstützte Distribution." exit 1 fi
Erstellen von Konfigurationsverzeichnissen für Namensräume
Als Nächstes benötigen wir ein Konfigurationsverzeichnis für jeden Netzwerk-Namensraum. Darin suchen alle Anwendungen, die Netzwerk-Namensräume kennen, nach Konfigurationsdateien, relativ zu ihrem 'normalen' Platz im /etc/
Verzeichnis.
sudo mkdir -p /etc/netns/{red,green,blue}
Erstellen der Konfigurationsdateien für Bind
Wir möchten den DNS im blue
Namensraum ausführen. Daher erstellen wir zuerst das bind
Verzeichnis in /etc/netns/blue/
.
sudo mkdir -p /etc/netns/blue/bind/zones
Jetzt müssen wir die Datei /etc/netns/blue/bind/named.conf.local
erstellen und bearbeiten, zuerst eine forward zone
hinzufügen.
zone "col.or" { type master; file "/etc/bind/zones/db.col.or"; };
Jetzt fügen wir die reverse zone
für unser virtuelles Netzwerk (10.0.0.0/24
) hinzu:
zone "0.0.10.in-addr.arpa" { type master; file "/etc/bind/zones/db.0.0.10"; };
Schließlich müssen wir DNSSEC deaktivieren, da wir keine Berechtigung für das zugehörige Schlüsselverzeichnis haben.
dnssec-enable no
Forward-Zone
Wir müssen die tatsächlichen Zonendateien erstellen und bearbeiten. Zuerst /etc/netns/blue/bind/zone/db.col.or
.
; BIND-Datendatei für die lokale Loopback-Schnittstelle $TTL 604800 @ IN SOA col.or. admin.col.or. ( 205 ; Seriennummer 604800 ; Aktualisierung 86400 ; Wiederholung 2419200 ; Ablauf 604800 ) ; Negative Cache-TTL @ IN NS ns.col.or. ns IN A 10.0.0.4 red IN A 10.0.0.2 green IN A 10.0.0.3 blue IN CNAME ns.col.or.
Reverse Zone
Wir benötigen auch die Datei /etc/netns/blue/bind/zone/db.0.0.10
.
; BIND-Reverse-Daten-Datei für die lokale Loopback-Schnittstelle $TTL 604800 @ IN SOA col.or. admin.col.or. ( 200 ; Seriennummer 604800 ; Aktualisierung 86400 ; Wiederholung 2419200 ; Ablauf 604800 ) ; Negative Cache-TTL @ IN NS ns.col.or. ns IN A 10.0.0.4 4 IN PTR ns.col.or. 2 IN PTR red.col.or. 3 IN PTR green.col.or.
(Wieder)Generieren des virtuellen Netzwerks
Nun ist es an der Zeit, das virtuelle Netzwerk aus dem ersten Teil (neu) zu generieren. Dazu müssen wir ovs.sh einbinden.
CWD=$(dirname $(find /home/ -type f -name db.col.or)) . ${CWD}/files/ovs.sh
Wir können jetzt die Zonen-Dateien auf Syntaxfehler überprüfen und hoffen, keine Fehlermeldungen zu erhalten:
blue named-checkzone col.or db.col.or blue named-checkzone col.or db.0.0.10
Erstellen von resolv.conf-Dateien
Schließlich müssen wir den virtuellen Hosts mitteilen, wo der Nameserver zu finden ist, indem wir resolv.conf
in /etc/netns/red/
, /etc/netns/green/
und /etc/netns/blue/
erstellen.
nameserver 10.0.0.4
Starten des named-Dienstes
Es ist nun an der Zeit, den DNS-Server im blauen Namensraum zu starten und zu testen. Dafür müssen wir ihn aus einem global beschreibbaren Verzeichnis starten.
RUNDIR=$(mktemp -d blue_named_run_XXXXX) chmod 777 ${RUNDIR} cd ${RUNDIR} blue named -c /etc/bind/named.conf.local
red nslookup green.col.or
Anerkennung
Das meiste von dem, was ich in diesem Teil getan habe, basiert auf Balajinaidus Blog zu diesem Thema.
Fußnoten
Footnotes:
Domain Name Service: ordnet einem Full-Qualified-Domainnamen wie www.kernel.org
eine IP-Adresse zu.