DFS-N auf FQDN umstellen

By Marc

Microsoft DFS (Distributed File System) wird gerne genutzt, um Freigaben von Daten im Netzwerk unabhängig vom dahinter liegenden Fileserver zu publizieren. Dabei ist es egal, ob sich im Hintergrund ein oder mehrere Windows Server, NetApp, EMC oder andere Maschinen verbergen, die Windows File Shares anbieten.

Historisch bedingt ist DFS allerdings so konfiguriert, dass es immer die NetBIOS Namen der Server veröffentlicht, auf denen die Freigaben gehostet werden. Im “normalen” kleinen Netzwerkumfeld wird diese Einstellung auch gar nicht auffallen, wenn wir allerdings von größeren Umgebungen oder Migrationsszenarien reden, kann man hier wunderbar in Probleme laufen. Hier spielen dann solche Konfigurationen, wie WINS Server, DNS Suffix Suchliste der Clients, Konfiguration von VPN Clients, uvm. eine Rolle. Viele davon kann man relativ leicht aus dem Weg räumen, wenn man DFS direkt so konfiguriert, dass es FQDN (Fully Qualified Domain Names) benutzt. Und wie das unter Windows geht, zeige ich jetzt …

Wir gehen einmal davon aus, wir haben einen bestehenden Namespace, der unter “normalen” Voraussetzungen installiert wurde und somit noch reine NetBIOS Verweise nutzt. Der sollte dann in etwa so aussehen:

dfs_DefaultNamespace

Schaut man allerdings mal unter die Haube, kann man sehr leicht die NetBIOS Verweise des Namespace selbst, aber auch der Folder Targets sehen. Mit den folgenden Befehlen kann man die Konfiguration wunderbar auslesen:

Get-DfsnRoot | Get-DfsnRootTarget | fl
Get-DfsnFolder \\demo.intra\MyNamespace\* | Get-DfsnFolderTarget | ft -AutoSize

Oder aber auch über dfsutil.exe:

dfsutil root \\demo.intra\MyNamespace

In meinem Beispiel sieht das dann so aus:

dfs_NetBIOS

Nun kann man das Ganze sogar on-the-fly umstellen, das bedeutet also ohne Downtime – worauf wartet ihr also? Mit etwas Vorbereitung und wenigen Skripts ist das auch schnell gemacht. Grundsätzlich funktioniert der Vorgang in zwei Schritten:

  1. Ändern jedes DFS Namespace Servers
  2. Aktualisieren der Folder Targets

Ändern jedes DFS Namespace Servers

Wichtig: Solltet ihr nur einen Namespace Server haben, nehmt unbedingt (zumindest temporär) einen zweiten dazu, sonst geht euch Euer Namespace komplett verloren!

Die folgenden Änderungen müssen auf jedem Namespace Server vorgenommen werden:

  1. Entfernt den Namespace Server aus dem DFS Root
  2. Ändert die Konfiguration des DFS Dienstes
  3. Startet den DFS Dienst neu
  4. Fügt den Namespace Server dem DFS Root wieder hinzu

Das funktioniert unter Powershell mit den folgenden Befehlen:

Remove-DfsnRootTarget -TargetPath \\dc2012r2\MyNamespace -Confirm:$false
Set-DfsnServerConfiguration -ComputerName dc2012r2 -UseFqdn $true
Stop-Service dfs
Start-Service dfs
New-DfsnRootTarget -TargetPath \\dc2012r2.demo.intra\MyNamespace

Und mit dfsutil.exe so:

dfsutil.exe target Remove \\fs2012r2\MyNamespace
Dfsutil.exe server registry dfsdnsconfig set fs2012r2
Net stop dfs
Net start dfs
Dfsutil target add \\fs2012r2.demo.intra\MyNamespace

Den Unterschied zwischen einem umgestellten und einem nicht umgestellten sieht man dann in der DFS Verwaltung.

dfs_NamespaceUnterschied

Damit werden die Namespace Server schon mal über DNS aufgelöst, die Folder Targets (also die Fileserver dahinter) allerdings noch nicht.

Aktualisierung der Folder Targets

Für die Aktualisierung der Folder Targets muss die vorhandene Konfiguration exportiert und geändert werden. Danach wird die modifizierte Konfiguration wieder importiert. Das funktioniert nicht mit der Power Shell, sondern nur mit dfsutil.exe.

Den Export erstellt man mit folgendem Befehl:

dfsutil.exe root export \\demo.intra\MyNamespace c:\MyNamespace.xml

Damit erhält meine XML Datei, die etwa so aussehen könnte:

<?xml version="1.0"?>

<Root xmlns = "http://schemas.microsoft.com/dfs/2007/03/dfsutil" majorVersion = "2" minorVersion = "0" 
    Name="\\demo.intra\MyNamespace" State="OK" Timeout="300" SITECOSTING = "1" >
    <Target State="ONLINE" >\\dc2012r2.demo.intra\MyNamespace</Target>
    <Target State="ONLINE" >\\fs2012r2.demo.intra\MyNamespace</Target>

    <Link Name="Share1" State="OK" Timeout="1800" >
        <Target State="ONLINE" >\\DC2012R2\Share1</Target>
    </Link>

    <Link Name="Share2" State="OK" Timeout="1800" >
        <Target State="ONLINE" >\\DC2012R2\Share2</Target>
    </Link>

</Root>

Diese Datei ändern wir nun. Dafür werden in den markierten Zeilen die Pfade zu den Folder Targets von NetBIOS auf DNS Namen umgestellt. Danach sollte es dann etwa so aussehen:

<?xml version="1.0"?>

<Root xmlns = "http://schemas.microsoft.com/dfs/2007/03/dfsutil" majorVersion = "2" minorVersion = "0" 
    Name="\\demo.intra\MyNamespace" State="OK" Timeout="300" SITECOSTING = "1" >
    <Target State="ONLINE" >\\dc2012r2.demo.intra\MyNamespace</Target>
    <Target State="ONLINE" >\\fs2012r2.demo.intra\MyNamespace</Target>

    <Link Name="Share1" State="OK" Timeout="1800" >
        <Target State="ONLINE" >\\DC2012R2.demo.intra\Share1</Target>
    </Link>

    <Link Name="Share2" State="OK" Timeout="1800" >
        <Target State="ONLINE" >\\DC2012R2.demo.intra\Share2</Target>
    </Link>

</Root>

Die so geänderte Konfiguration importiert man wieder mit folgendem Befehl:

dfsutil.exe root import set C:\MyNamespace.xml \\demo.intra\MyNamespace

Und … tada! Alle Folder Targets sind auf DNS Namen umgestellt.

dfs_FolderTargetDNS

Wenn man nun weitere Namespace Server hinzufügt, muss man pro Server die DNS Konfiguration von oben einmalig vornehmen.

Wichtig: Wenn man über die grafische Oberfläche entweder Namespace Server oder Folder Targets hinzufügt, wird dort immer der NetBIOS Name eingetragen, selbst wenn die Einstellung auf DNS vorgenommen wurde!

dfs_NewFolderFalsch

 

Ihr müsst hier unbedingt darauf achten, den DNS Namen manuell einzutragen!

dfs_FolderTargetManuell

Nur so funktioniert das Ganze auch mit neuen Folder Targets.

All diese Informationen sind aus dem Knowledge Base Artikel 244380 (Link) entnommen und schon in vielen Projekten erfolgreich angewandt worden 😉 . Vielleicht stellt ja Microsoft irgendwann auch mal die GUI um … die Hoffnung stirbt zuletzt.

Loading