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.