Tanze Samba mit Pi - Teil 3: Installation Bind9

Bind9 - DNS-Server

Auch wenn Samba einen eigenen DNS-Server mitbringt, ist es sinnvoll (und von Samba auch empfohlen) einen Bind9 DNS-Server zu nutzen. Da Samba derzeit als höchste Version Bind 9.11 unterstützt (die Versionen 9.12 und 9.13 sind noch seitens Samba in der Test- und Bugfix Phase) installieren wir die derzeit höchste Version von Bind 9.11 – das ist die Version Bind 9.11.4-P2.

1. Notwendige Pakete für Bind9 installieren

Da für Bind9 einige Abhängigkeiten notwendig sind, installieren wir erst mal auch das „offizielle“ Bind9-Paket von Raspbian. Dies wird später wieder deaktiviert, enthebt uns aber der Problematik, die notwendigen Abhängigkeiten und Scripts per Hand anzulegen.

apt-get -y install bind9 libbind-dev libkrb5-dev libssl-dev

2. Bind9-Quellen herunterladen und entpacken

Jetzt laden wir die aktuellen Bind9 Quellen herunter, dies kann entweder über die Webseite oder direkt über den Pi erledigt werden. Hier die notwendigen Links bzw. Befehle:

https://www.isc.org/downloads/…9-11-4-p2/?version=tar-gz


das heruntergeladene File muss dann (z.B. mit WinSCP) ins Verzeichnis /usr/src kopiert werden oder mit

cd /usr/src

wget ftp://ftp.isc.org/isc/bind/9.11.4-P2/bind-9.11.4-P2.tar.gz


direkt von isc auf den Pi geladen werden. Jetzt wird das File entpackt: tar -xvf bind-9.11.4-P2.tar.gz und ins Verzeichnis gewechselt cd /usr/src/bind-9.11.4-P2/

3. Bind9 wird kompiliert und installiert

Jetzt müssen wir festlegen, mit welchen Optionen BIND kompiliert wird. Wichtig sind vor allem die 2 folgenden:


--with-dlopen=yes und

--with-gssapi=yes


Diese Optionen sind für unser AD zwingend erforderlich. Ich konfiguriere Bind9 normalerweise folgendermaßen:

./configure --prefix /usr/local/bind9 --enable-shared --enable-static --with-openssl=/usr --with-gssapi=/usr/include/gssapi --with-libtool --with-dlopen=yes --enable-threads --enable-largefile


Wer Unterstützung für IPv6 möchte, hängt noch die Option --enable-ipv6 an. Der Schalter --prefix /usr/local/bind9 legt das Verzeichnis für die Installation fest – wer hier, aus welchem Grund auch immer, ein anderes Verzeichnis wünscht, kann dies damit festlegen.


Wichtig:

Am besten sichert ihr euch die Konfiguration mit der ihr Bind kompilieren wollt. Wenn ihr später mal auf eine neuere Version aktualisiert, dann muss diese mindestens die Optionen besitzen, mit der eure aktuelle Version kompiliert wurde. Die Konfiguration dauert jetzt rund 2 Minuten. Sollte alles funktioniert haben, solltet ihr eine Ausgabe wie die folgende erhalten:

Hier seht ihr auch, ob die von euch gewünschte Konfiguration übernommen wurde. So, jetzt geht es ans Eingemachte, wir kompilieren unsere eigene Bind9 Version. Dies machen wir einfach über den Befehl: make


Euer Raspberry arbeitet jetzt. Ihr könnt euch nun zurücklehnen, den ein oder anderen Kaffee trinken oder einfach im Forum stöbern – das ganze dauert ~1/2h. Nach dem kompilieren installieren wir unser neues Bind9 mit

make install

4. Bind9 auf dem Pi einrichten

Der folgende Abschnitt ist elementar, da hier alle notwendigen Einstellungen für Bind9 durchgeführt werden. Jeder Fehler kann dazu führen, dass Bind9 nicht sauber ausgeführt wird und entsprechend die weiteren Installationen und vor allem die Einrichtung des Samba DC fehlschlägt. Daher einfach Zeit nehmen und Stück für Stück die Punkte durcharbeiten.


Zunächst muss dem System der Pfad für unsere neue Bind9 Installation bekannt gemacht werden:

Code
cp /etc/profile /etc/profile.bak
sed 's#^\(export PATH\)$#PATH="/usr/local/bind9/sbin:/usr/local/bind9/bin:$PATH"\n\1#'\
  /etc/profile > /tmp/profile.tmp
mv -f /tmp/profile.tmp /etc/profile

damit habt ihr den Pfad für eure neue Bind9-Installation hinzugefügt. Nun können wir das originale Bind9 Startscript für unsere Umgebung modifizieren:

Code
cd /etc/init.d
sed 's#/usr/sbin#/usr/local/bind9/sbin#g' bind9\
  | sed 's#^PATH=#PATH=/usr/local/bind9/sbin:/usr/local/bind9/bin:#'\
  | sed -r 's~^(test -f /etc/default/bind9)~#\1~'\
  | sed 's#/etc/init.d/bind9#/etc/init.d/bind9custom#g'\
  | sed 's#/var/run/named/#/usr/local/bind9/var/run/named/#g' \
  - > bind9custom
chmod a+x bind9custom


Was haben wir hier jetzt getan? Die Originaldatei wurde in die Datei „bind9custom“ umbenannt. Dabei wurden auch die Pfade ersetzt. Selbstverständlich könnt ihr eurem Startscript auch einen beliebigen, anderen Namen geben, ich bleibe hier jedoch bei bind9custom. Wir kopieren die Scripte aus dem Debian Bind und legen in unserem neuen Bind-Verzeichnis die entsprechenden Rechte an:

cp -u /etc/bind/* /usr/local/bind9/etc

chown -R root:bind /usr/local/bind9/etc


Ein Symlink hilft uns, um mittels sed eine neue Datei für apparmor anlegen zu können und recht einfach unseren neuen Pfad für die neue Bind-Installation zu integrieren:

ln -s /usr/local/bind9 /usr/local/bind9/usr


Nun gehen wir ins apparmor Verzeichnis

cd /etc/apparmor.d


und kopieren das durch die Debian-Bind Installation erzeugte File mittels sed in eine neue Version für unsere eigene Bind9-Installation:

Code
sed 's#/etc/bind/\*\*#/usr/local/bind9/etc/**#g' usr.sbin.named \
  | sed 's#/usr/sbin/named#/usr/local/bind9/usr/sbin/named#g' \
  | sed 's#/{,var/}run/named/#/usr/local/bind9/{,var/}run/named/#g' \
  - > usr.local.bind9.sbin.named

Wenn wir schon dabei sind, bearbeiten wir direkt die Datei, damit Bind später auch auf die notwendigen Samba-Files zugreifen kann:

nano /etc/apparmor.d/usr.local.bind9.sbin.named


Hier müssen jetzt ein paar Zeilen vor die letzte geschweifte Klammer } eingefügt werden:

Code
/usr/local/samba/bind-dns/** rkw,
/usr/local/samba/lib/bind9/** rm,
/usr/local/samba/lib/gensec/** rm,
/usr/local/samba/lib/ldb/** rm,
/usr/local/samba/private/** rkw,


Wenn wir fertig sind, sieht das Ende der Datei /etc/apparmor.d/usr.local.bind9.sbin.named so aus:

Code
# Site-specific additions and overrides. See local/README for details.
#include <local/usr.sbin.named>
/usr/local/samba/bind-dns/** rkw,
/usr/local/samba/lib/bind9/** rm,
/usr/local/samba/lib/gensec/** rm,
/usr/local/samba/lib/ldb/** rm,
/usr/local/samba/private/** rkw,
}

jetzt stoppen und deaktivieren wir den aus der Distribution installierten bind9 und aktivieren unseren neu hinzugefügten bind9custom Service:

Code
service bind9 stop
update-rc.d -f bind9 remove
mv /etc/init.d/bind9 ~/bind9.bak
systemctl disable bind9
update-rc.d bind9custom defaults
systemctl enable bind9custom

Wir starten den Pi neu

reboot


und checken, ob unsere neue Version gefunden wird:

named -V


Hier sollten jetzt die Version von named sowie die von uns konfigurierten Optionen angezeigt werden. Bei mir sieht das nun so aus:

Code
BIND 9.11.4-P2 (Extended Support Version) <id:7107deb>
running on Linux armv7l 4.14.71-v7+ #1145 SMP Fri Sep 21 15:38:35 BST 2018
built by make with '--prefix' '/usr/local/bind9' '--enable-shared' '--enable-static' '--with-openssl=/usr' '--with-gssapi=/usr/include/gssapi' '--with-libtool' '--with-dlopen=yes' '--enable-threads' '--enable-largefile'
compiled by GCC 6.3.0 20170516
compiled with OpenSSL version: OpenSSL 1.1.0f 25 May 2017
linked to OpenSSL version: OpenSSL 1.1.0f 25 May 2017
compiled with zlib version: 1.2.8
linked to zlib version: 1.2.8
threads support is enabled

5. Bind9 testen

Nach der ganzen Aktion haben wir uns ein Erfolgserlebnis verdient und testen, ob unser Bind9 grundsätzlich schon mal funktioniert. Wenn alles richtig ausgeführt wurde, ist unser neuer Bind9 DNS-Server schon einsatzbereit:

systemctl start bind9custom

systemctl status bind9custom


Es sollte eine Ausgabe, ähnlich der folgenden erscheinen:

Code
● bind9custom.service - LSB: Start and stop bind9
   Loaded: loaded (/etc/init.d/bind9custom; generated; vendor preset: enabled)
   Active: active (running) since Wed 2018-10-03 17:01:36 CEST; 1 weeks 5 days ago
     Docs: man:systemd-sysv-generator(8)
  Process: 453 ExecStart=/etc/init.d/bind9custom start (code=exited, status=0/SUCCESS)
    Tasks: 5 (limit: 19660)
   CGroup: /system.slice/bind9custom.service
           └─467 /usr/local/bind9/sbin/named

Herzlichen Glückwunsch, ihr habt erfolgreich Bind9 kompiliert und auf dem Pi eingerichtet. Jetzt könnt ihr noch testen, ob euer Bind9-Server auf Anfragen reagiert:

dig @127.0.0.1 . NS


Dies sollte in etwa folgende Ausgabe erzeugen:

Wenn ihr Probleme habt, solltet ihr an dieser Stelle prüfen, ob euer Pfad korrekt ist und die richtigen Files genutzt werden. Dies macht ihr über diesen Befehl:

which named


Euch wird nun angezeigt, von wo named „geladen“ wird:

/usr/local/bind9/sbin/named

Kommentare 3

  • Hallo,


    kann mir mal bitte jemand bei Punkt 4 helfen?
    Gebe ich den Code als komplette Eingabe in die Konsole ein?

    Oder kopiere ich jede Zeile einzeln und führe sie jeweils mit ENTER aus?


    Bei mir sagt er immer:


    Code
    pi@raspberrypi:~ $ sudo sed 's#^\(export PATH\)$#PATH="/usr/local/bind9/sbin:/usr/local/bind9/bin:$PATH"\n\1#'\
    > /etc/profile > /tmp/profile.tmp
    sed: -e Ausdruck #1, Zeichen 81: Unbekannte Option für »s«


    Ich muss aber auch sagen, ich habe Bind9.11.15, weil die .4 nicht mehr existiert.


    Gruß Maik

    • Hi


      ich habe das selbe problem


      Code
      sed: -e Ausdruck #1, Zeichen 81: Unbekannte Option für »s«

      woran kann das liegen ?


      habe schon versucht die /etc/profile selbst zu bearbeiten, nur weiß ich nicht wo genau bzw. was genau wo hin muss


      EDIT:


      habe meinen Fehler gefunden und zwar lag es scheinbar daran das ich die Leerzeihen nicht mit kopiert haben bei

      Code
        /etc/profile > /tmp/profile.tmp

      hier scheint es wirklich wichtig zu sein das es die mit eingefügt werden


      ist das wirklich so ?

  • Hallo,

    zuerst mal Danke für die Serie. Ich bin gerade erst bis zum Teil 3 gekommen, möchte aber schon jetzt sagen - super.

    Eine Frage habe ich jedoch. Warum nimmst Du nicht die Pakete der Distribution? Ich habe einen Pi 3+ mit Raspbian GNU/Linux 10 (buster). Dort habe ich zum nachmachen die Pakete nach Anleitung aus dem Buch Samba 4 von Stefan Kania genutzt. Und was soll ich sagen? Es funktioniert super. Folgende Pakete wurden empfohlen für Debian:

    * samba

    * libpam-heimdal

    * heimdal-clients

    * ldb-tools

    * winbind

    * libpam-winbind

    * smbclient

    * libnss-winbind

    * bind9

    * bind9utils

    * dnsutils

    Du brauchst bestimmt nicht alles auf dem AD. Ich habe mich aber an diese Liste gehalten. Für mich erscheint das besser als selber zu kompilieren. So brauche ich mich nicht um die Updates kümmern.

    Grüße

    Hans-Christian