Univention Bugzilla – Bug 27395
Windows7 Client mit DNS gegen Zentrale joined gegen Samba4 DC Slave
Last modified: 2019-05-15 13:43:35 CEST
Im UCS@School 3.0 Samba4 Szenario mit Samba4 in der Zentrale sollte für die GPO-Bearbeitung ein Windows7 Client gegen den DC in der Zentrale gejoined werden. Dafür wurde dem Client eine IP aus dem zentralen Netz gegeben und als DNS Server der zentrale konfiguriert. Der Client war nach dem erfolgreichen Join in die Schule/Site eines Samba4 DC Slave der Domäne gejoined. Ursache scheint zu sein, dass der DC Locator des Clients den SRV-Record _ldap._tcp.dc._msdcs auswertet, in dem er mit gleicher Priorität alle DCs vorfindet, aus denen er vermutlich zufällig einen auswählt. Als Workaround habe ich die Prioritäten aller DC Slaves am SRV record erhöht, sodass von Client der UCS Master mit default Priorität 0 ausgewählt wurde.
Created attachment 4451 [details] s4_connector_srv_records.patch Eine erste Version als Patch.
Ich hatte jetzt auch den Fall, dass nach der Migration der Zentrale sich ein Benutzer aus Schule2 an Schule1 anmelden konnte. Problematisch an dem Überschreiben könnte sein, dass in der Zentrale dann nur noch ein DC eingetragen wird, es aber mehrere DCs geben kann. Vorschlag ist: Die Schul DCs registrieren die SRV Records für ldap und kerberos nicht mehr. Dafür sollte in ucs-school-slave eine UCR Variable gesetzt werden und die Einträge sollten aus dem LDAP entfernt werden. In den Samba Paketen sollte diese Variable ausgewertet werden. In 3.0-2 sollten dann zusätzlich univention-heimdal und univention-ldap die Variable auswerten. Die Schul DCs überschreiben dann per Connector die SRV Records für ldap und kerberos.
Lokal sind die Punkte jetzt umgesetzt. Problematisch ist jetzt, wenn die SRV Records für LDAP, beispielsweise _ldap._tcp.dc._msdcs ,nicht global registriert werden, dann kann der Connector die Einträge für das lokale S4 DNS auch nicht überschreiben. Nachdem samba_dnsupdate auf dem Slave ausgeführt wird, sind diese Einträge vorhanden.
Patches sind eingespielt, nach dem Update des Masters kann man sich aber immer noch mit Schülern aus schule2 am DC der schule1 anmelden. In den folgenden SRV Records wird der Master mit aufgeführt: root@slave1743:~# host -al deadlock174.local | grep SRV | grep master _gc._tcp.deadlock174.local. 900 IN SRV 0 100 3268 master1741.deadlock174.local. _kerberos-adm._tcp.deadlock174.local. 900 IN SRV 0 100 88 master1741.deadlock174.local. _ldap._tcp.gc._msdcs.deadlock174.local. 900 IN SRV 0 100 3268 master1741.deadlock174.local. _domaincontroller_master._tcp.deadlock174.local. 900 IN SRV 0 0 0 master1741.deadlock174.local. _gc._tcp.default-first-site-name._sites.deadlock174.local. 900 IN SRV 0 100 3268 master1741.deadlock174.local. _ldap._tcp.default-first-site-name._sites.deadlock174.local. 900 IN SRV 0 100 389 master1741.deadlock174.local. _kerberos._tcp.default-first-site-name._sites.deadlock174.local. 900 IN SRV 0 100 88 master1741.deadlock174.local. _ldap._tcp.default-first-site-name._sites.gc._msdcs.deadlock174.local. 900 IN SRV 0 100 3268 master1741.deadlock174.local. _ldap._tcp.default-first-site-name._sites.dc._msdcs.deadlock174.local. 900 IN SRV 0 100 389 master1741.deadlock174.local. _kerberos._tcp.default-first-site-name._sites.dc._msdcs.deadlock174.local. 900 IN SRV 0 100 88 master1741.deadlock174.local. _ldap.5739c4fb-dfbd-46e6-9f71-fa2c31923492.domains._msdcs.deadlock174.local. 900 IN SRV 0 100 389 master1741.deadlock174.local.
Im Samba 4 Debug auf dem DC Slave ist zu sehen, dass der Windows Client die SRV Records aus der Default Site anfragt: ldb_request BASE dn=DC=_ldap._tcp.default-first-site-name._sites.dc._msdcs.deadlock174.local,CN=MicrosoftDNS,CN=System,DC=deadlock174,DC=local filter=(objectClass=dnsZone) Durch ein Überschreiben der SITE Konfiguration per Connector sollte die Verbindung des Windows Clients zum Master unterbunden werden können.
Auf dem Master werden jetzt die SRV Records aus OpenLDAP ignoriert. Allerdings verwendet samba_dnsupdate per Default Kerberos. Ohne vorkonfiguriertes DNS (SRV Records für Kerberos) können allerdings keine Kerberos Tickets angefordert werden. Das einfachste dürfte sein samba_dnsupdate um einen local-Modus zu erweitern.
*** Bug 27398 has been marked as a duplicate of this bug. ***
Patch für die Metapakete hinzugefügt. Die Änderungen wurden auch direkt im Verzeichnis ucs-3.0/ucs-school/ucs-school-metapackage durchgeführt. YAML Datei hinzugefügt. Noch nicht implementiert ist: Bug #28065 Durch die Änderungen stimmen ansonsten die DNS Daten, auf einem Schul DC haben die SRV Records die passenden Werte und in der Zentrale stimmen die Werte auch, bis auf Bug #28065.
Es gab noch einen Typo im Wert einer UCR-Variable (Doppelter Underscore __gc._tcp). Da dieser das ucs-school spezifische Paket betrifft lässt er sich schlecht durch Bug 28065 fixen. Daher habe ich das jetzt angepasst und gebe diesen Bug dann für diese spezifische Änderung weiter zur QA an Felix. Gefixt in: * 4.0.37-1-ucsschool-errata/10_ucsschool-bug_27395.patch * ucs-3.0/ucs-school/ucs-meta-package * ucsschool-errata/2012-07-25-ucs-school-metapackage.yaml Sonst ist hier alles Verified: * Windows Client joinen gegen den DC, der per DNS eingetragen ist. * Schüler der Schule1 können sich nur an Windows Clients anmelden, die in Schule1 gejoined worden sind. * Zugriff auf Samba-Dienste in der Zentrale sind weiter für alle Schüler möglich. * In Gruppenrichtlinienverwaltung und AD Benutzer und Computer ist nur der lokale DC zur Auswahl aufgefürt. Das gilt auch für die Zentrale. * YAML-Advisory OK =============================================================================== VERIFIED im Detail: > Die Schul DCs registrieren die SRV Records für ldap und kerberos nicht mehr. > Dafür sollte in ucs-school-slave eine UCR Variable gesetzt werden und die > Einträge sollten aus dem LDAP entfernt werden. In den Samba Paketen sollte > diese Variable ausgewertet werden. 1.a) Die Schul-DCs setzen jetzt in der neuen VERSION=3 des ucs-school-slave Joinscripts die beiden UCR Variablen dns/register/srv_records/kerberos?false dns/register/srv_records/ldap?false 1.b) Falls diese UCR-Variablen dann nicht den Wert true haben wird das lokale System aus den folgenden SRV-Records im UCS-LDAP entfernt: _kpasswd._tcp und _kpasswd._udp _kerberos._tcp und _kerberos._udp _kerberos._tcp.dc._msdcs sowie _ldap._tcp port 389 und 7389 _ldap._tcp.pdc._msdcs _ldap._tcp.dc._msdcs 1.c) Auch in /usr/share/univention-samba4/scripts/setup-dns-in-ucsldap.sh werden diese beiden UCR-Variablen ausgewertet, um zu entscheiden, ob diese SRV-Records im UDM angelegt werden sollen. Zusätzlich werden dort folgende SRV-Records dann _nicht_ in UDM angelegt: _ldap.$Partition_GUID.domains._msdcs _ldap._tcp.$Domain_GUID.domains._msdcs _ldap._tcp.$sitename._sites _ldap._tcp.$sitename._sites.dc._msdcs _kerberos._tcp.$sitename._sites _kerberos._tcp.$sitename._sites.dc._msdcs _gc._tcp.$sitename._sites _ldap._tcp.$sitename._sites.gc._msdcs Die letzten 6 Einträge werden statt dessen a) vom S4 Connector bei Synchronisation von Veränderungen nach Samba4 gemäß UCR-Vorgabe umgeschrieben (siehe Punkt 2.a weiter unten) b) per samba_dnsupdate ins Samba4 Verzeichis geschrieben (siehe Punkt 2.b weiter unten) Unverändert werden weiterhin folgende DNS-Einträge angelegt (siehe Bug 28065): CNAME $NTDS_objectGUID._msdcs A gc._msdcs SRV _gc._tcp SRV _gc._tcp.$sitename._sites > In 3.0-2 sollten dann zusätzlich univention-heimdal und univention-ldap die Variable auswerten. * Im Moment unklar was damit gemeint war. > Die Schul DCs überschreiben dann per Connector die SRV Records für ldap und kerberos. 2.a) Variablen der Familie connector/s4/mapping/dns/srv_record/*/location werden beim Update per postinst sowie per joinscript so gesetzt, dass der S4 Connector instruiert wird, bei der Synchronisation von den entsprechenden SRV-Records nur die per UCR vorgegebenen Werte in das Samba 4 Verzeichnis zu schreiben. 2.b) Zusätzlich wird die UCR variable samba4/join/dnsupdate?true gesetzt und im Joinscript von univention-samba4-dns ausgewertet. Falls sie auf true steht, wird durch Aufruf von samba_dnsupdate --local dafür gesorgt, dass die notwendigen SRV records in das lokale Samba 4 Verzeichnis geschrieben werden. Note: Die aktuelle Lösung funktioniert nur für Neuinstallationen, da zum einen die existierenden Einträge im Samba 4 Verzeichnis nicht angepasst werden und zum andern der S4 Connector nach Setzen der UCR-Variablen nicht neu gestartet wird. Aktuell ist das OK so, bei Bedarf wird es hierzu einen separaten Bug geben. > Durch ein Überschreiben der SITE Konfiguration per Connector sollte die > Verbindung des Windows Clients zum Master unterbunden werden können. * Für "Default-First-Site-Name" werden folgende SRV-Records analog zu 2.a) per UCR vorgegeben vom S4 Connector bei Synchronisation in das Samba 4 Verzeichnis umgeschrieben: _ldap._tcp.default-first-site-name._sites _ldap._tcp.default-first-site-name._sites.dc._msdcs _kerberos._tcp.default-first-site-name._sites _kerberos._tcp.default-first-site-name._sites.dc._msdcs _ldap._tcp.default-first-site-name._sites.gc._msdcs _gc._tcp.default-first-site-name._sites Dadurch hängt die Antwort auf die Frage nach dem Zuständigen DC für die "Default-First-Site-Name" davon ab, welchen DC ein Windows-Client (per DNS oder Netbios) fragt. Das funktioniert im Test auch. Schüler aus "schule1" können Sich nur dort und nicht an "schule2" anmelden. Diese Art der "relativen" Default-Site Konfiguration scheint auch gweisse Vorteile gegenüber einer IP-Network basierten Zuordung von Windows-Clients zu Sites zu haben. > Auf dem Master werden jetzt die SRV Records aus OpenLDAP ignoriert. Allerdings > verwendet samba_dnsupdate per Default Kerberos. Ohne vorkonfiguriertes DNS > (SRV Records für Kerberos) können allerdings keine Kerberos Tickets > angefordert werden. > Das einfachste dürfte sein samba_dnsupdate um einen local-Modus zu erweitern. * OK. > Patch für die Metapakete hinzugefügt. Die Änderungen wurden auch direkt im Verzeichnis ucs-3.0/ucs-school/ucs-school-metapackage durchgeführt. * OK 3.0-0-0-ucs/4.0.37-1-ucsschool-errata/10_ucsschool-bug_27395.patch stimmt mit ucs-3.0/ucs-school überein.
Das doppelte "_" wurde entfernt: -> grep -r '__' ucs-school-metapackage/ ucs-school-metapackage/debian/changelog: * fix typo __gc._tcp (Bug #27395) -> grep '__' ucs-school-metapackage/3.0-0-0-ucs/4.0.37-1-ucsschool-errata/10_ucsschool-bug_27395.patch ... univention-install ... Multifile: /etc/samba/smb.conf Create connector/s4/mapping/dns/srv_record/_ldap._tcp.i386.de/location Create connector/s4/mapping/dns/srv_record/_ldap._tcp.pdc._msdcs.i386.de/location Create connector/s4/mapping/dns/srv_record/_ldap._tcp.dc._msdcs.i386.de/location Create connector/s4/mapping/dns/srv_record/_ldap._tcp.gc._msdcs.i386.de/location Create connector/s4/mapping/dns/srv_record/_gc._tcp.i386.de/location Create connector/s4/mapping/dns/srv_record/_kerberos._tcp.i386.de/location Create connector/s4/mapping/dns/srv_record/_kerberos._udp.i386.de/location Create connector/s4/mapping/dns/srv_record/_kerberos-adm._tcp.i386.de/location Create connector/s4/mapping/dns/srv_record/_kerberos._tcp.dc._msdcs.i386.de/location Create connector/s4/mapping/dns/srv_record/_kpasswd._tcp.i386.de/location Create connector/s4/mapping/dns/srv_record/_kpasswd._udp.i386.de/location Create connector/s4/mapping/dns/srv_record/_kerberos._tcp.default-first-site-name._sites.dc._msdcs.i386.de/location Create connector/s4/mapping/dns/srv_record/_kerberos._tcp.default-first-site-name._sites.i386.de/location Create connector/s4/mapping/dns/srv_record/_ldap._tcp.default-first-site-name._sites.gc._msdcs.i386.de/location Create connector/s4/mapping/dns/srv_record/_ldap._tcp.default-first-site-name._sites.dc._msdcs.i386.de/location Create connector/s4/mapping/dns/srv_record/_ldap._tcp.default-first-site-name._sites.i386.de/location Create connector/s4/mapping/dns/srv_record/_gc._tcp.default-first-site-name._sites.i386.de/location Restarting univention-directory-listener daemon -> ucr search __
http://errata.univention.de/ucsschool-errata6.html