В этой заметке, кратко опишу установку роли Remote Desktop Gateway в самой простой конфигурации на Windows Server 2019(17763) с указанием порта отличного от стандартного.
ComputerName |
IPAddress |
HTTPPort(default) |
UDPPort(default) |
srv-rdgw.contoso.com |
192.168.0.21 |
443 |
3391 |
1. Установка роли RDS-Gateway
Проверим, что роль не установлена:
PS > Get-WindowsFeature RDS*
Display Name Name Install State
------------ ---- -------------
[ ] Remote Desktop Connection Broker RDS-Connection-Broker Available
[ ] Remote Desktop Gateway RDS-Gateway Available
[ ] Remote Desktop Licensing RDS-Licensing Available
[ ] Remote Desktop Session Host RDS-RD-Server Available
[ ] Remote Desktop Virtualization Host RDS-Virtualization Available
[ ] Remote Desktop Web Access RDS-Web-Access Available
[ ] Remote Desktop Licensing Tools RDS-Licensing-UI Available
Установка:
PS > Install-WindowsFeature RDS-Gateway -IncludeAllSubFeature -IncludeManagementTools Success Restart Needed Exit Code Feature Result ------- -------------- --------- -------------- True No Success {Network Policy and Access Services, Remot...
2. Конфигурирование портов GUI
Попробуем задать порт отличный от стандартного с указанием IP адреса. Запускаем оснастку tsgateway.msc , выбираем сервер и нажимаем Properties.
Выскакивает ошибка, что установить порт не удалось. В EventLog регистрируются два события, в которых указано, что не удалось изменить стандартные правила в Firewall.
Проверим стандартные правила в Firewall:
PS > Get-NetFirewallRule TSG-HTTPS-Transport-In-TCP,TSG-UDP-Transport-In-UDP | Select Name, Enabled
Name Enabled
---- -------
TSG-HTTPS-Transport-In-TCP False
TSG-UDP-Transport-In-UDP True
Для HTTP транспорта, оно не включено.
PS > Get-NetFirewallRule TSG-HTTPS-Transport-In-TCP,TSG-UDP-Transport-In-UDP | Get-NetFirewallPortFilter Protocol : UDP LocalPort : 3391 RemotePort : Any IcmpType : Any DynamicTarget : Any Protocol : TCP LocalPort : 443 RemotePort : Any IcmpType : Any DynamicTarget : Any
Новые правила, как в предыдущих версиях Windows Server, автоматически не создались для нестандартных портов.
Посмотрим изменения в IIS:
Настройки применились, в tsgateway.msc все без изменений. Проверим порты:
PS > netstat -an | Select-String "4443|4444|3391" TCP 0.0.0.0:4443 0.0.0.0:0 LISTENING TCP [::]:4443 [::]:0 LISTENING UDP 0.0.0.0:3391 *:* UDP [::]:3391 *:*
Для UDP порт остался прежним.
* Правила Firewall по умолчанию:
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\SharedAccess\Defaults\FirewallPolicy\FirewallRules
PS > Get-ItemProperty HKLM:\SYSTEM\CurrentControlSet\Services\SharedAccess\Defaults\FirewallPolicy\FirewallRules\ -Name TSG*Transport* TSG-HTTPS-Transport-In-TCP : v2.29|Action=Allow|Active=FALSE|Dir=In|Protocol=6|LPort=443|App=System|Name=@FirewallAPI.dll,-39137|Desc=@FirewallAPI. dll,-39138|EmbedCtxt=@FirewallAPI.dll,-39135| TSG-UDP-Transport-In-UDP : v2.29|Action=Allow|Active=TRUE|Dir=In|Protocol=17|LPort=3391|App=%systemroot%\system32\svchost.exe|Svc=tsgateway|Name= @FirewallAPI.dll,-39139|Desc=@FirewallAPI.dll,-39140|EmbedCtxt=@FirewallAPI.dll,-39135|
Правила по умолчанию не будем изменять, лучше создадим новые.
Часть настроек Remote Desktop Gateway хранится в реестре: HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\TerminalServerGateway
Другая часть, хранится в файле rap.xml:
C:\Windows\System32\tsgateway\rap.xml
Проверим, настройки в реестре:
Изменения не применились, все осталось по умолчанию.
3. Конфигурирование портов скриптом
# Константы $IPAddress = "192.168.0.21" $HTTPPort = 4443 $UDPPort = 4444 $hklm = "HKLM:\SOFTWARE\Microsoft\Windows NT\CurrentVersion\TerminalServerGateway\Config\Core" # Создаем правила Remove-NetFirewallRule TSG-HTTPS-Transport-In-TCP,TSG-UDP-Transport-In-UDP New-NetFirewallRule -Name "TSG-HTTPS-Transport-In-TCP" -DisplayName "Remote Desktop Gateway HTTP Listener" -Direction Inbound -LocalPort 4443 -Protocol TCP -Action Allow -Profile Any New-NetFirewallRule -Name "TSG-UDP-Transport-In-UDP" -DisplayName "Remote Desktop Gateway UDP Listener" -Direction Inbound -LocalPort 4444 -Protocol UDP -Action Allow -Profile Any # Останавливаем службу Stop-Service TSGateway # Изменяем IP и порт для UDP Set-ItemProperty -Path $hklm -Name HttpIPAddress -Value $IPAddress Set-ItemProperty -Path $hklm -Name UdpIPAddress -Value $IPAddress Set-ItemProperty -Path $hklm -Name UdpPort -Value $UDPPort # Изменяем IP и порт для UDP Get-CimInstance -Namespace root/CIMV2/TerminalServices -ClassName Win32_TSGatewayServerSettings | Invoke-CimMethod -MethodName SetIPAndPort -Arguments @{TransportType = 2;IPAddress = $IPAddress; Port = $UDPPort} Get-CimInstance -Namespace root/CIMV2/TerminalServices -ClassName Win32_TSGatewayServerSettings | Invoke-CimMethod -MethodName Configure # Запуск службы Start-Service TSGateway # Изменяем IP и порт для TCP Get-CimInstance -Namespace root/CIMV2/TerminalServices -ClassName Win32_TSGatewayServerSettings | Invoke-CimMethod -MethodName SetIPAndPort -Arguments @{TransportType = 1;IPAddress = $IPAddress; Port = $HTTPPort; OverrideExisting = 1} Get-CimInstance -Namespace root/CIMV2/TerminalServices -ClassName Win32_TSGatewayServerSettings | Invoke-CimMethod -MethodName Configure # Перезапуск службы Restart-Service TSGateway # Изменяем IP и порт для TCP Set-ItemProperty -Path $hklm -Name HttpsPort -Value $HTTPPort Get-CimInstance -Namespace root/CIMV2/TerminalServices -ClassName Win32_TSGatewayServerSettings | Invoke-CimMethod -MethodName SetIPAndPort -Arguments @{TransportType = 1;IPAddress = $IPAddress; Port = $HTTPPort; OverrideExisting = 1} Get-CimInstance -Namespace root/CIMV2/TerminalServices -ClassName Win32_TSGatewayServerSettings | Invoke-CimMethod -MethodName Configure Restart-Service TSGateway # Создаем self-certificate и привязываем его $cert = Invoke-CimMethod -Namespace root/CIMV2/TerminalServices -ClassName Win32_TSGatewayServer -MethodName CreateSelfSignedCertificate -Arguments @{SubjectName = "SRV-RDGW.contoso.com"} $CertHash = $cert.CertHash Get-CimInstance -Namespace root/CIMV2/TerminalServices -ClassName Win32_TSGatewayServerSettings | Invoke-CimMethod -MethodName SetCertificate -Arguments @{CertHash = $CertHash} Get-CimInstance -Namespace root/CIMV2/TerminalServices -ClassName Win32_TSGatewayServerSettings | Invoke-CimMethod -MethodName Configure Get-CimInstance -Namespace root/CIMV2/TerminalServices -ClassName Win32_TSGatewayServerSettings | Invoke-CimMethod -MethodName SetCertificateACL -Arguments @{CertHash = $CertHash} Get-CimInstance -Namespace root/CIMV2/TerminalServices -ClassName Win32_TSGatewayServerSettings | Invoke-CimMethod -MethodName RefreshCertContext -Arguments @{CertHash = $CertHash} Get-CimInstance -Namespace root/CIMV2/TerminalServices -ClassName Win32_TSGatewayServerSettings | Invoke-CimMethod -MethodName Configure Restart-Service TSGateway
После применения настроек:
PS > netstat -an | Select-String "4443|4444|3391" TCP 0.0.0.0:4443 0.0.0.0:0 LISTENING TCP [::]:4443 [::]:0 LISTENING UDP 192.168.0.21:4444 *:*
IIS:
Thanks for sharing, your code really made my day! But there is a problem in my case, I don’t know how to set IPAddress as «All Unassigned», do you have any ideas?