Externer LDAP/AD Mirror lmn 7.x

,

Hi Dorian,

du kannst der Gruppe auch eine Gruppe hinzufügen…
samba-tool group addmembers „Allowed RODC Password Replication Group“ all-teachers,all-students

Viele Grüße
Thomas

1 „Gefällt mir“

Hi Thomas,

Ahaa, jetzt gehts :smiley:
Ich kann zwar nicht mit global-admin binden, aber mit dem binduser und mit normalen Nutzern. Danke für deine Hilfe!

VG, Dorian

3 „Gefällt mir“

Hi Dorian,

die RODC ist mit der steinalten SAMBA Version 4.7.6, wie sie von Ubuntu 18.04 LTS verwendet wird, auch noch nicht so 100% ausgereift wie ich gelesen habe ([Samba] RODC and LDAP via Simple Authentication fails). In aktuelleren Releases soll das (wie vieles andere auch) besser funktionieren…

Aber immerhin…es klappt!

Viele Grüße
Thomas

2 „Gefällt mir“

Hallo zusammen,

mit RODC sollte wirklich vorsichtig umgegangen werden da der Support dafür in der eingesetzten Samba-Version nicht wirklich gegeben ist. Hier sollte man zumindest sehr genau wissen was man tut.

Ich würde ein RODC daher erst mit der Aktualisierung des Schulserver „empfehlen“.

LG; Maurice

1 „Gefällt mir“

Hi Maurice,

Danke für den Hinweis.

VG, Dorian

Hallo Maurice,

wie im anderen Thread erwähnt, dann aber wahrscheinlich erst mit 22.04 und noch nicht mit 7.1, wenn ich das richtig verstanden hab?
Ganz vorsichtig angefragt: gibt’s ne gaaanz grobe timeline?

Danke und viele Grüße,
Jochen

Nein, noch nicht. Jetzt kommt erstmal 7.1.
Aber das samba replikat sollte trotzdem funktionieren, nur vielleicht nicht als readonly.

VG, Dorian

1 „Gefällt mir“

Hi Jochen,

da das zugrundeliegende System noch garnicht da ist, kann ich da keine gute Angabe abgeben.

Da wir aber mit dem Linbo 4 (Thomas sei dank) nun auch auf modernerer Basis sind, sollten die Abhängigkeiten nahezu aufgelöst sein. Daher wird Releasewechsel einfacher.

Es werden aber sicher in den SoFe 22 Pilotschulen bereits auf 22.04 umgestellt werden.

LG, Maurice

Hi Maurice, hi Dorian,

danke Euch. Dann schiebe ich das Projekt Backup-AD noch etwas nach hinten.

Liebe Grüße,
Jochen

Hallihallohallöchen :slight_smile:

gibt es eigentlich in dieser Sache neue Erkenntnisse?
LG Jesko

Ich meine, dass das frühestens mit 7.2 und nem neuen Ubuntu gehen wird!? Steht auch sehr hoch auf meiner Haben-will-Liste!

Viele Grüße,
Jochen

1 „Gefällt mir“

Der limitierende Faktor ist die SAMBA Version der Lösung. Erst wenn man von 4.7.6 auf höhere Releases geht. Ursprünglich geplant war der Wechsel für 7.2.
Ob jemand was in der Entwicklerversion bereits getestet hat?

Viele Grüße
Thomas

Ich habe es in einem Ubuntu 18.04 Docker zum Laufen bekommen. Das ist aber sehr gebastelt und nicht wirklich dokumentierbar.

Aber hier meine Konfiguration:
/opt/samba-dc/docker-compose.yml

services:
  app:
    dns: 10.0.0.1
    image: instantlinux/samba-dc:latest
    restart: always
    hostname: server-extern.linuxmuster.lan
    environment:
      DOMAIN_ACTION: "join"
      BIND_INTERFACES_ONLY: "no"
      INTERFACES: "lo mlm 10.1.1.11"
      REALM: "LINUXMUSTER.LAN"
      TZ: "Europe/Berlin"
      WORKGROUP: "LINUXMUSTER.LAN"
      BIND_INTERFACES_ONLY: "yes"
    volumes:
      - ./config/etc:/etc/samba
      - ./config/lib:/var/lib/samba
      - ./entrypoint.sh:/usr/local/bin/entrypoint.sh
    secrets:
      - samba-admin-password

    ports:
      - 389:389

    networks:
      traefik:
        ipv4_address: 172.25.0.101

secrets:
  samba-admin-password:
    file: ./samba-admin-password

networks:
  traefik:
     external: true

/opt/samba-dc/entrypoint.sh

#!/bin/sh -e

if [ -z "$NETBIOS_NAME" ]; then
  NETBIOS_NAME=$(hostname -s | tr [a-z] [A-Z])
else
  NETBIOS_NAME=$(echo $NETBIOS_NAME | tr [a-z] [A-Z])
fi
REALM=$(echo "$REALM" | tr [a-z] [A-Z])

if [ ! -f /etc/timezone ] && [ ! -z "$TZ" ]; then
  echo 'Set timezone'
  cp /usr/share/zoneinfo/$TZ /etc/localtime
  echo $TZ >/etc/timezone
fi

if [ ! -f /var/lib/samba/registry.tdb ]; then
  ADMIN_PASSWORD=$(cat /run/secrets/$ADMIN_PASSWORD_SECRET)
  if [ "$BIND_INTERFACES_ONLY" == yes ]; then
    INTERFACE_OPTS="--option=\"bind interfaces only=yes\" \
      --option=\"interfaces=$INTERFACES\""
  fi
  if [ $DOMAIN_ACTION == join ]; then
    PROVISION_OPTS="$REALM DC -UAdministrator --password='$ADMIN_PASSWORD'"
  else
    echo 'Only join actions are supported.'
    exit 1
  fi

  rm -f /etc/samba/smb.conf /etc/krb5.conf

  # This step is required for INTERFACE_OPTS to work as expected
  echo "samba-tool domain $DOMAIN_ACTION $PROVISION_OPTS $INTERFACE_OPTS \
     --dns-backend=SAMBA_INTERNAL" | sh

  #mv /etc/samba/smb.conf /etc/samba/smb.conf.bak
  echo 'root = administrator' > /etc/samba/smbusers
fi
mkdir -p -m 700 /etc/samba/conf.d

#for file in /etc/samba/smb.conf /etc/samba/conf.d/netlogon.conf \
#      /etc/samba/conf.d/sysvol.conf; do
#  sed -e "s:{{ ALLOW_DNS_UPDATES }}:$ALLOW_DNS_UPDATES:" \
#      -e "s:{{ BIND_INTERFACES_ONLY }}:$BIND_INTERFACES_ONLY:" \
#      -e "s:{{ DOMAIN_LOGONS }}:$DOMAIN_LOGONS:" \
#      -e "s:{{ DOMAIN_MASTER }}:$DOMAIN_MASTER:" \
#      -e "s+{{ INTERFACES }}+$INTERFACES+" \
#      -e "s:{{ LOG_LEVEL }}:$LOG_LEVEL:" \
#      -e "s:{{ NETBIOS_NAME }}:$NETBIOS_NAME:" \
#      -e "s:{{ REALM }}:$REALM:" \
#      -e "s:{{ SERVER_STRING }}:$SERVER_STRING:" \
#      -e "s:{{ WINBIND_USE_DEFAULT_DOMAIN }}:$WINBIND_USE_DEFAULT_DOMAIN:" \
#      -e "s:{{ WORKGROUP }}:$WORKGROUP:" \
#      /root/$(basename $file).j2 > $file
#done
#for file in $(ls -A /etc/samba/conf.d/*.conf); do
#  echo "include = $file" >> /etc/samba/smb.conf
#done
#ln -fns /var/lib/samba/private/krb5.conf /etc/
cp /var/lib/samba/private/krb5.conf /etc/

exec samba --model=$MODEL -i </dev/null

Ob da noch was fehlt und wie man es initial einrichtet, weiß ich nich mehr. Ich hab im Moment auch keine Zeit, mich genauer damit zu beschäftigen, aber vielleicht hilft es ja als Ansatz.
Wir haben das so seit ein paar Monaten im Einsatz.

VG,
Dorian

1 „Gefällt mir“

Hallo zusammen :slight_smile:

jetzt hab ich mal nach einem Ausfall den Mut gefasst, einfach auf 7.2 upzudaten und anschließend die Anregungen von @dorian verwendet, um einen externen dc zu erstellen.
Super! Klappt auf den ersten Blick…
ich kann den LDAP abfragen, in moodle und der nextcloud nutzen.

Problem:
der externe LDAP funktioniert nur, solange der interne erreichbar ist :slight_smile: So hatte ich mir das aber nicht vorgestellt.
Sobald ich den Schulinternen DC runterfahre, kommt in den Logs des externen die Meldung, dass die Verbindung gekappt ist und dann antwortet er auch nicht mehr auf anfragen…

Mein Setting:
Exxterner Server mit Wireguard-Tunnel zur Schule.
Dorians Skripte oben mit einer Anpassung: Letsencrypt-Zertifikate mit reinkopiert…

Was beachte ich hier nicht? @tjordan hast du mir nen Tipp?
LG Jesko

1 „Gefällt mir“

Ich antworte mir selbst…
… meine Beobachtung war falsch. Der externe LDAP möchte sich beim Start synchronisieren. Wenn man in dieser Zeit die Verbindung kappt, DANN bleibt er stehen… Wenn das erledigt ist, kann jeder der Server ausfallen, ohne dass die Dienste das merken.

Ich hab jetzt bei moodle und nextcloud beide LDAPs eingetragen und es funktioniert wie gewünscht. SUPER!
Danke für den Input!

noch zu tun: die Zertifikate an die richtige Stelle kopieren, wenn sie sich ändern.

Leider gelingt es mir nicht, das Letsencrypt-Verzeichnis in den Container zu mounten.
Die Links werden dann nicht verfolgt, sondern sind nicht lesbar.

LG Jesko

2 „Gefällt mir“

Ich hab das jetzt mal (leider immer noch nicht perfekt) dokumentiert.
Im Prinzip ist es das von @dorian mit kleinen Änderungen an wichtigen Stellen (z.B. den User im Entrypoint-Skript.

Das funktioniert ganz gut, außer dass man im DNS nach dem Domain-Join nochmal die korrekte Adresse nachpflegen muss, weil sonst die Docker-interne sinnfreie Adresse drin steht…
… vielleicht host-netz verwenden statt bridge…

jedenfalls läuft das jetzt bei mir und wird alle 5 Minuten nach außen repliziert.
Rückwärts nicht. Ob das so gewollt ist (also ich will das so) oder ob das eigentlich in beide Richtungen synct und nur aus irgendeinem Grund noch fehlschlägt, weiß ich nicht.
Falls da jemand besser bescheid weiß… bitte melden :slight_smile:

Und falls (was sehr wahrscheinlich ist) da Optimierungspotential ist,… bitte einfach issues öffnen oder pull requests… oder wie auch immer.

hier: Jesko Anschütz / linuxmuster-samba-replikation · GitLab
LG Jesko

3 „Gefällt mir“

Wenn ich das richtig sehe, machst du an der Stelle aber keinen ReadOnly DC sondern einen RW Dc. Der sollte tatsächlich in beide Richtungen syncen.

Hmm. Irgendwas stimmt da auch noch nicht.
Nach meinen Tests war der Sync zwar nur in eine Richtung, aber ich hab mittlerweile diverse Fehlermeldungen entdeckt! NT_irgendwas denied…
Was müsste ich denn Ändern, damit es OneWay ist?

https://wiki.samba.org/index.php/Join_a_domain_as_a_RODC

1 „Gefällt mir“

Ok, das muss ich mir bei Gelegenheit nochmal anschauen. Weil eigentlich war das ja das, was ich wollte… :slight_smile:

Ich möchte aber noch eine Warnung loslassen… ich hatte plötzlich scheinbar vollkommen random Probleme. Mal bei der Anmeldung, mal schon beim Hochfahren der Rechner.

Irgendwann kam mir der Verdacht, dass der neue Domaincontroller das Problem ist und tatsächlich ist er der Auslöser, wenn auch nicht das Problem:

Offensichtlich möchten manche Clients schon beim Booten eine Verbindung zu dem Backup-DC herstellen, was nicht klappt, wenn es vom Client zu diesem keine Route gibt.
In meinem Fall wussten die Clients nicht, wie sie durch das VPN rückwärts rauskommen können.
Mir ist auch nicht klar, warum das zu diesen Effekten führt, eigentlich würde ich annehmen, dass sie mit dem Haupt-DC zufrieden sind, wenn der online ist.

Wie dem auch sei. Ich hab jetzt eine Route eingerichtet, so dass alle Clients bei Bedarf den externen DC erreichen können und jetzt flutscht es. (Die Fehler oben kommen immer noch auf dem BackupDC aber sie scheinen bisher nur die Rück-Synchronisierung zu stören, die ich ja ohnehin nicht haben möchte.)

… LG Jesko