Wie schon beim 1. Server schalten wir IPv6 aus…
nano /etc/sysctl.conf
…und am Ende folgende Zeile einfügen:
net.ipv6.conf.all.disable_ipv6 = 1
Das System aktualisieren…
apt update -y && apt upgrade -y && apt clean -y && apt autoremove -y && reboot
Host Datei prüfen und ggf. anpassen:
nano /etc/hosts
127.0.0.1 localhost
192.168.178.12 dc2.intern.domain.tld dc2
Code-Sprache: CSS (css)
Samba installieren
apt-get install acl attr samba samba-dsdb-modules samba-vfs-modules smbclient winbind libpam-winbind libnss-winbind libpam-krb5 krb5-config krb5-user dnsutils
Code-Sprache: JavaScript (javascript)
Möglicherweise wird bei der Installation folgendes abgefragt:
- WINS Server:
nein
- Default Kerberos Realm:
INTERN.DOMAIN.TLD
- Kerberos Server:
dc1.intern.domain.tld
- Admin Server:
dc1.intern.domain.tld
BIND9 installieren und anpassen
apt install bind9
Samba für Erstellung der Domäne vorbereiten
Zu aller erst sicherstellen, dass keine Samba oder DNS Dienste laufen.
ps ax | egrep "samba|smbd|nmbd|winbindd"
Code-Sprache: JavaScript (javascript)
Die Ausgabe könnte wie folgt aussehen…
root@dc1:~# ps ax | egrep "samba|smbd|nmbd|winbindd"
158 ? Ss 0:00 /usr/sbin/smbd -D --option=server role check:inhibit=yes --foreground
162 ? Ss 0:03 /usr/sbin/winbindd -D --option=server role check:inhibit=yes --foreground
219 ? S 0:00 /usr/sbin/smbd -D --option=server role check:inhibit=yes --foreground
220 ? S 0:00 /usr/sbin/smbd -D --option=server role check:inhibit=yes --foreground
232 ? S 0:00 /usr/sbin/smbd -D --option=server role check:inhibit=yes --foreground
30976 pts/2 S+ 0:00 grep -E samba|smbd|nmbd|winbindd
Code-Sprache: PHP (php)
Die letzte Zeile zeigt unseren soeben gestarteten Suchprozess und alle anderen gehören zu Samba und DNS. Die Nummern der ersten Spalte sind die Prozess IDs (kurz PID), welche allesamt beendet werden müssen (PID durch die jeweilige Nummer ersetzen).
kill -9 PID
Desweiteren muss die vorhandene Konfigurationsdatei von Samba entfernt werden. Mit smbd -b | grep "CONFIGFILE"
zeigt das System an, wo sich diese befindet.
rm /etc/samba/smb.conf
Auch müssen eventuell bereits bestehende Datenbanken von Samba entfernt werden. Mit smbd -b | egrep "LOCKDIR|STATEDIR|CACHEDIR|PRIVATE_DIR"
werden die entsprechenden Pfade angezeigt.
root@dc1:~# smbd -b | egrep "LOCKDIR|STATEDIR|CACHEDIR|PRIVATE_DIR"
LOCKDIR: /var/run/samba
STATEDIR: /var/lib/samba
CACHEDIR: /var/cache/samba
PRIVATE_DIR: /var/lib/samba/private
Code-Sprache: PHP (php)
Mit diesen Befehlen habe ich alle Datenbanken bei mir entfernt:
rm /var/run/samba/*.tdb
rm /var/run/samba/*.ldb
rm /var/lib/samba/*.tdb
rm /var/lib/samba/*.ldb
rm /var/cache/samba/*.tdb
rm /var/cache/samba/*.ldb
rm /var/lib/samba/private/*.tdb
rm /var/lib/samba/private/*.ldb
Code-Sprache: JavaScript (javascript)
Und da wir gerade so schön mit Löschen beschäftigt sind, entfernen wir auch die Konfiguration von Kerberos.
rm /etc/krb5.conf
In der Datei nano /etc/default/bind9 den Eintrag wie folgt ändern:
OPTIONS="-4 -u bind"
Code-Sprache: JavaScript (javascript)
nano /etc/bind/named.conf.options
// Netze, aus denen zugegriffen werden darf
acl internals { 127.0.0.0/8; 192.168.178.0/24; };
options {
directory "/var/cache/bind";
version "Go Away 0.0.7";
notify no;
empty-zones-enable no;
auth-nxdomain yes;
// Weiterleitungen (hier Router und die bekannten DNS Server)
forwarders { 10.20.50.1; 1.1.1.1; 8.8.8.8; };
allow-transfer { 192.168.178.11; };
dnssec-validation no;
dnssec-enable no;
dnssec-lookaside no;
// If you only use IPv4.
listen-on-v6 { none; };
// Adressen, auf denen der DNS hört und arbeitet.
listen-on port 53 { 192.16.178.12; 127.0.0.1; ::1; };
// Added Per Debian buster Bind9.
// Due to : resolver: info: resolver priming query complete messages in the logs.
// See: https://gitlab.isc.org/isc-projects/bind9/commit/4a827494618e776a78b413d863bc23badd14ea42
minimal-responses yes;
// Add any subnets or hosts you want to allow to use this DNS server
allow-query { "internals"; };
allow-query-cache { "internals"; };
// Add any subnets or hosts you want to allow to use recursive queries
recursion yes;
allow-recursion { "internals"; };
// https://wiki.samba.org/index.php/Dns-backend_bind
// DNS dynamic updates via Kerberos (optional, but recommended)
// ONE of the following lines should be enabled AFTER you provision or join a DC with bind9_dlz
// or AFTER upgrading your dns from internal to bind9_dlz
// Before Samba 4.9.0
// tkey-gssapi-keytab "/var/lib/samba/private/dns.keytab";
// From Samba 4.9.0 ( You will need to run samba_dnsupgrade if upgrading your Samba version. )
tkey-gssapi-keytab "/var/lib/samba/bind-dns/dns.keytab";
};
Code-Sprache: PHP (php)
Jetzt stellen wir den DNS Server vom, so dass der DC2 nicht mehr den Router fragt, sondern den DC1.
nano /etc/resolv.conf
search intern.domain.tld
nameserver 192.168.178.11
Code-Sprache: CSS (css)
BIND9 testen
host -t A localhost 127.0.0.1
host -t PTR 127.0.0.1 127.0.0.1
nslookup beoceka.de
Code-Sprache: CSS (css)
Server als zusätzlichen Domaincontroller in die Domäne aufnehmen
samba-tool domain join intern.domain.tld DC -U"INTERN\administrator" --dns-backend=BIND9_DLZ --option='idmap_ldb:use rfc2307 = yes'
Code-Sprache: JavaScript (javascript)
Kommt dabei dieser Fehler:
ERROR: Failed to find a writeable DC for domain 'intern.domain.tld': The transport-connection attempt was refused by the remote system.
Code-Sprache: JavaScript (javascript)
…dann läuft Samba nicht auf dem DC1. Diesen manuell starten, erneut versuchen und überprüfen, weshalb Samba nicht mehr lief.
Berechtigung für BIND setzen
chown root:bind /var/lib/samba/bind-dns
Code-Sprache: JavaScript (javascript)
Kerberos von Samba kopieren und prüfen
rm /etc/krb5.conf
cp /var/lib/samba/private/krb5.conf /etc/krb5.conf
Code-Sprache: PHP (php)
kinit administrator
klist
BIND anpassen
nano /etc/bind/named.conf.local
Am Ende einfügen:
include "/var/lib/samba/bind-dns/named.conf";
Code-Sprache: PHP (php)
Dienste starten
systemctl start bind9
systemctl enable bind9
systemctl stop smbd nmbd winbind
systemctl disable smbd nmbd winbind
systemctl unmask samba-ad-dc
systemctl start samba-ad-dc
systemctl enable samba-ad-dc
Server mit reboot
neustarten.
DNS Einträge prüfen
host intern.domain.tld
Code-Sprache: CSS (css)
Hier müssen jetzt beide DCs erscheinen, auf beiden DCs. Das gleiche auch mit folgenden Abfragen:
host -t SRV _kerberos._udp.intern.domain.tld
Code-Sprache: CSS (css)
host -t SRV _ldap._tcp.intern.domain.tld
Code-Sprache: CSS (css)
Wenn ein Eintrag fehlt, können diese mit folgenden Befehlen nachgeholt werden.
samba-tool dns add dc1 intern.domain.tld intern.domain.tld A 192.168.178.12 -Uadministrator
samba-tool dns add dc1 intern.domain.tld _kerberos._udp.intern.domain.tld SRV 'dc2.intern.domain.tld 88 0 100' -Uadministrator
samba-tool dns add dc1 intern.domain.tld _ldap._tcp.intern.domain.tld SRV 'dc2.intern.domain.tld 389 0 100' -Uadministrator
Code-Sprache: JavaScript (javascript)
SYSVOL Replikation (auf DC1 ausführen)
Wir wechseln auf den DC1…
apt install rsync
systemctl enable rsync
systemctl start rsync
Einen SSH Schlüssel generieren und alle Abfragen mit ENTER bestätigen:
ssh-keygen -t RSA
Schlüssel auf 2. Server übertragen.
ssh-copy-id root@dc2
Code-Sprache: CSS (css)
Die Verbindung mit ssh dc2
testen. Es sollte direkt die Konsole von dc2 zu sehen sein, ohne Eingabe eines Kennwortes. Bei der Gelegenheit installieren wir auf dem DC2 ebenfalls rsync mit apt install rsync
. Die Konsole von dc2 mit exit
verlassen.
Testlauf mit rsync --dry-run -XAavz --chmod=775 --delete-after --progress --stats /var/lib/samba/sysvol/ root@dc2:/var/lib/samba/sysvol/
starten. Es müsste angezeigt werden, wie viele Dateien zu kopieren wären.
Der Befehl für die eigentliche Replikation heißt rsync -XAavz --chmod=775 --delete-after --progress --stats /var/lib/samba/sysvol/ root@dc2:/var/lib/samba/sysvol/
und wird in einem Cronjob angelegt:
crontab -e
*/5 * * * * rsync -XAavz --chmod=775 --delete-after --progress --stats /var/lib/samba/sysvol/ root@dc2:/var/lib/samba/sysvol/ > /var/log/sysvol-replication.log 2>&1
Code-Sprache: JavaScript (javascript)
Der Rest wird von DC1 aus gesteuert.
DHCP installieren (zurück auf DC2)
apt install isc-dhcp-server
Auch dieser DHCP hört nur auf IPv4:
nano /etc/default/isc-dhcp-server
Code-Sprache: JavaScript (javascript)
INTERFACESv4="eth0"
#INTERFACESv6=""
Code-Sprache: PHP (php)
Wir exportieren, wie zuvor auch auf dem DC1, den Keytab.
samba-tool domain exportkeytab --principal=dhcpduser@INTERN.DOMAIN.TLD /etc/dhcpduser.keytab
chown root:root /etc/dhcpduser.keytab
chmod 400 /etc/dhcpduser.keytab
Wir wechseln wieder auf den DC1. Dort passen wir die DHCP Konfiguration an.
…und die Konfiguration wie folgt anpassen:
nano /etc/dhcp/dhcpd.conf
Nach der Zeile „ddns-update-style none“ folgenden Part einfügen:
failover peer "dhcp-failover" {
primary;
address dc1.intern.domain.tld;
peer address dc2.intern.domain.tld;
max-response-delay 60;
max-unacked-updates 10;
mclt 3600;
split 128;
load balance max seconds 3;
}
Code-Sprache: JavaScript (javascript)
In jedem definierten Subnetz muss nun das Failover hinzugefügt werden:
pool {
failover peer "dhcp-failover";
max-lease-time 1800; # 30 minutes
range 192.168.178.50 192.168.178.199;
}
Code-Sprache: PHP (php)
Datei speichern und DHCP mit /etc/init.d/isc-dhcp-server restart
prüfen, ob sich eventuell Fehler eingeschlichen haben.
Wenn alles passt, die Konfiguration auf den DC2 kopieren…
scp /etc/dhcp/dhcpd.conf root@dc2:/etc/dhcp/dhcp.conf
Code-Sprache: JavaScript (javascript)
Wieder auf den DC2 wechseln und die /etc/dhcp/dhcpd.conf
anpassen. primary wird zu secondary, Adressen anpassen und zwei Zeilen löschen.
failover peer "dhcp-failover" {
secondary;
address dc2.intern.domain.tld;
peer address dc1.intern.domain.tld;
max-response-delay 60;
max-unacked-updates 10;
load balance max seconds 3;
}
Code-Sprache: JavaScript (javascript)
systemctl restart isc-dhcp-server
DHCP für Neustart einrichten
systemctl enable isc-dhcp-server
DHCP Server mit systemctl restart isc-dhcp-server
neustarten und auf Fehler prüfen. Auch hier hatte ich bei meinen Tests immer wieder Sonderzeichen vergessen.
DNS Update Script
Das DNS Update Script können wir uns vom DC1 kopieren.
scp root@dc1://usr/local/bin/dhcp-dyndns.sh /usr/local/bin/dhcp-dyndns.sh
Code-Sprache: JavaScript (javascript)
chmod 755 /usr/local/bin/dhcp-dyndns.sh
Jetzt mit einem Windows oder Linux Client prüfen, ob man eine IP bekommt. Zum Testen auch ma den DC1 abschalten und nur den DC2 betreiben und umgekehrt.
Mit dhcp-lease-list
lassen sich die vergebenen IP Adressen anschauen.
Alternativ geht das auch mit der Weboberfläche Webmin.
Hallo, vielen Dank für die super Anleitung. Leider bekomme ich beim Absetzen des Befehls
database „dlopen /usr/lib/x86_64-linux-gnu/samba/bind9/dlz_bind9_11.so“;
den Fehler: database: Kommando nicht gefunden.
Finde auch leider keine Infos zu dem fehlenden Prog. database
Wäre toll wenn Du mir dazu einen Tipp geben kannst.
VG
Das ist kein Befehl, sondern eine Zeile aus der darüber genannten Konfiguration
/var/lib/samba/bind-dns/named.conf