Skip to content

Latest commit

 

History

History
240 lines (181 loc) · 7.54 KB

NetworkNamespaceDNS.DE.org

File metadata and controls

240 lines (181 loc) · 7.54 KB

Virtuelle Netzwerke (Teil II): DNS

img/Ostseepinguin.png

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:

img/ovs-net.png

Nun möchten wir DNS[fn:1] 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

[fn:1] Domain Name Service: ordnet einem Full-Qualified-Domainnamen wie www.kernel.org eine IP-Adresse zu.