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:
Nun möchten wir DNS[fn:1] hinzufügen.
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
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}
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
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.
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.
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
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
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
Das meiste von dem, was ich in diesem Teil getan habe, basiert auf Balajinaidus Blog zu diesem Thema.
[fn:1] Domain Name Service: ordnet einem Full-Qualified-Domainnamen wie www.kernel.org
eine IP-Adresse zu.