DirectAccess für Essentials 2012 via Powershell Skript

Posted by O.Sommer

Die von Microsoft in der Technet unter

http://technet.microsoft.com/en-us/library/jj204618.aspx

und von meinem MVP Kollegen aus England Robert Pearman unter

http://titlerequired.com/2012/10/15/enable-directaccess-on-windows-server-2012-essentials/

bebilderte Anleitung zur Konfiguration von DirectAccess für Essentials 2012 Server hat einen nicht unwesentlichen Nachteil:

Die Anleitungen sind beide für englischsprachige Server.
Insbesondere das in der Theorie nahezu automatisierte Powershellskript am Ende des TechentArtikel zur Konfiguration eines Essentials 2012 funktioniert auf deutschen Systemen nicht und wirft diverse Fehler.

Mit etwas Einsatz kann man aber die richtigen deutschen Namen für Sicherheitsgruppen und Gruppenrichtlinen sowie Firewallregeln herausbekommen und in dem Skript korrigieren.

Damit ist es mir gelungen mit dem Powershellskript, sowie den im TechNet Artikel beschriebenen Vorarbeiten

  • Follow the procedure in Step 3: Prepare a certificate and DNS record for the network location server to enroll a certificate named DirectAccess-NLS.contoso.com (where contoso.com is replaced by your actual internal domain name), and to add a DNS record for the network location server (NLS).
  • Add a security group named DirectAccessClients in Active Directory, and then add client computers for which you want to provide the DirectAccess functionality.

eine funktionierende Essentials 2012 Umgebung mit DirectAccess Zugriff zu konfigurieren:

image

Das von mir (mehrfach) verwendete Skript lautet:

#Add Remote Access role if not installed yet
$ra = Get-WindowsFeature RemoteAccess
If ($ra.Installed -eq $FALSE) { Add-WindowsFeature RemoteAccess }

#Server may need to restart if you installed RemoteAccess role in the above step

 

#Set the internet domain name to access server, replace contoso.com below with your own domain name
$InternetDomain = "remote.sbsfaq.de"
#Set the SG name which you create for DA clients
$DaSecurityGroup = "DirectAccessClients"
#Set the internal domain name
$InternalDomain = [System.DirectoryServices.ActiveDirectory.Domain]::GetCurrentDomain().Name

#Set static IP and DNS settings
$NetConfig = Get-WmiObject Win32_NetworkAdapterConfiguration -Filter "IPEnabled=$true"
$CurrentIP = $NetConfig.IPAddress[0]
$SubnetMask = $NetConfig.IPSubnet | Where-Object{$_ -like "*.*.*.*"}
$NetConfig.EnableStatic($CurrentIP, $SubnetMask)
$NetConfig.SetGateways($NetConfig.DefaultIPGateway)
$NetConfig.SetDNSServerSearchOrder($CurrentIP)

#Get physical adapter name and the certificate for NLS server
$Adapter = (Get-WmiObject -Class Win32_NetworkAdapter -Filter "NetEnabled=$true").NetConnectionId
$Certs = dir cert:\LocalMachine\My
$nlscert = $certs | Where-Object{$_.Subject -like "*CN=DirectAccess-NLS*"}

#Add regkey to bypass CA cert for IPsec authentication
Set-ItemProperty -Path HKLM:\SYSTEM\CurrentControlSet\Services\IKEEXT\Parameters -Name ikeflags -Type DWORD -Value 0x8000

#Install DirectAccess.
Install-RemoteAccess -NoPrerequisite  -DAInstallType FullInstall  -InternetInterface $Adapter  -InternalInterface $Adapter -ConnectToAddress $InternetDomain -nlscertificate $nlscert -force

#Restart Remote Access Management service
Restart-Service RaMgmtSvc

#Remove the unnecessary IPv6 prefix GPO
$key = Get-ChildItem -Path HKLM:\SOFTWARE\Policies\Microsoft\Windows\RemoteAccess\config\MachineSIDs | Where-Object{$_.GetValue("IPv6RrasPrefix") -ne $null}
Remove-GPRegistryValue -Name "DirectAccess-Servereinstellungen" -Key $key.Name -ValueName IPv6RrasPrefix
gpupdate

#Set the appropriate security group used for DA client computers. Replace the group name below with the one you created for DA clients
Add-DAClient -SecurityGroupNameList $DaSecurityGroup
Remove-DAClient -SecurityGroupNameList "Domänencomputer"
Set-DAClient -OnlyRemoteComputers Disabled

#Gather DNS64 IP address information
$Remoteaccess = get-remoteaccess
$IPinterface = get-netipinterface -InterfaceAlias IPHTTPSInterface | get-netipaddress -PrefixLength 128
$DNS64IP=$IPInterface[1].IPaddress
$Natconfig = Get-NetNatTransitionConfiguration

# Configure TCP and UDP firewall rules for the DirectAccess server GPO
$GpoName = 'GPO:'+$InternalDomain+'\DirectAccess-Servereinstellungen'
Get-NetFirewallRule -PolicyStore $GpoName -Displayname "Domänennamenserver (TCP eingehend)"|Get-NetFirewallAddressFilter | Set-NetFirewallAddressFilter -LocalAddress $DNS64IP
Get-NetFirewallrule -PolicyStore $GpoName -Displayname "Domänennamenserver (UDP eingehend)"|Get-NetFirewallAddressFilter | Set-NetFirewallAddressFilter -LocalAddress $DNS64IP

# Configure the name resolution policy settings for the DirectAccess server, replace the DNS suffix below with the one in your domain
$Suffix = '.' + $InternalDomain
set-daclientdnsconfiguration -DNSsuffix $Suffix -DNSIPAddress $DNS64IP

# Change the DNS64 configuration to listen to IP-HTTPS interface
Set-NetDnsTransitionConfiguration -AcceptInterface IPHTTPSInterface

# Copy the necessary files to NLS site folder
XCOPY 'C:\inetpub\wwwroot' 'C:\Program Files\Windows Server\Bin\WebApps\Site\insideoutside' /E
XCOPY 'C:\Program Files\Windows Server\Bin\WebApps\Site\Default.aspx' 'C:\Program Files\Windows Server\Bin\WebApps\Site\insideoutside'

# Reserve port for NAT64

Set-NetNatTransitionConfiguration –IPv4AddressPortPool @("$CurrentIP, 10000-47000")

Restart-Service winnat

 

Ich habe bisher keine negativen Folgen des mehrfachen Durchlaufes des Skriptes gefunden, lege aber trotzdem jedem die üblichen Sicherheitsmaßnahmen nahe (Backup, etc.).

Letztlich habe ich mittels der neuen “Powershell ISE” das Skript dann Abschnittsweise durchlaufen lassen, weil immer noch Fehler auftraten und ich die finden wollte:

image