VPN и RDP: Автоматизация настройки удаленных рабочих мест

Развертывание VPN и RDP клиентов для удаленных пользователей 

В рамках данного блога были публикации о настройке VPN сервера.

2020 год принес всем сюрприз в виде съеденной летучей мыши.

В марте нынешнего года пришлось организовывать несколько десятков удаленных рабочих мест штатными средствами (Windows 7, 8  и 10 ).

Для себя я выбрал связку Softether VPN как VPN сервер и Windows Terminal Server как Сервер терминалов:)

Для быстроты развертывания на клиентской стороне VPN и RDP  были созданы скрипты простые автоматизации.

Забегая вперед — полностью автоматизировать настройку у меня не получилось, удалось сократить время настройки на 70-80% удалось.

Общая идея:

  1. Автоматизировать VPN и  RDP подключение пользователем запуском одного файла.
  2. При отключении RDP сессии отключаться от VPN сервера.
  3. Ускорить развёртывание на стороне клиента

Реализация:

  1. Шаблон VPN соединения
  2. Шаблон RDP файла
  3. Программа cmdow для сокрытия активного окна CMD
  4. Bat скрипт автоматизации подключения
  5. Bat скрипт создания клиентских подключений

Считаем, что VPN сервер (L2TP/IPSec) настроен и доступен по адресу vpn.mydomain.ru.

В сети до сих пор есть описания о создании терминальных серверов с пробросами портов в инет.
Как защиту предлагают сменить стандартный порт 3389 на другой.
!Никогда так не делайте, обязательно ставьте в разрыв VPN сервер! 

Создадим директорию проекта:

mkdir %SystemDrive%\VPNconnect

Создание «шаблона» VPN подключения:

Настраиваем и тестируем VPN соединение, после удачного теста сохраняем его данные в текстовый файл под именем my.pbk.

Для этого открываем текстовым редактором файл:

notepad %USERPROFILE%\AppData\Roaming\Microsoft\Network\Connections\Pbk\rasphone.pbk

Если на вашей машине одно соединение, то можно просто скопировать данный файл в рабочую папку проекта.

Если несколько подключений, то скопируйте руками в новый файл данные нужного подключения.

Ориентир — название подключения в квадратных скобках:
[vpn.mydomain.ru]

Конец конфигурации заканчивается блоком:
DEVICE=vpn

Полный текст конфигурации
[vpn.mydomain.ru]

Encoding=1
PBVersion=4
Type=2
AutoLogon=0
UseRasCredentials=1
LowDateTime=1140277904
HighDateTime=30850051
DialParamsUID=4810171
Guid=0CDB884F96A5084D83311721A107FAF9
VpnStrategy=3
ExcludedProtocols=8
LcpExtensions=1
DataEncryption=256
SwCompression=0
NegotiateMultilinkAlways=0
SkipDoubleDialDialog=0
DialMode=0
OverridePref=15
RedialAttempts=3
RedialSeconds=60
IdleDisconnectSeconds=0
RedialOnLinkFailure=1
CallbackMode=0
CustomDialDll=
CustomDialFunc=
CustomRasDialDll=
ForceSecureCompartment=0
DisableIKENameEkuCheck=0
AuthenticateServer=0
ShareMsFilePrint=1
BindMsNetClient=1
SharedPhoneNumbers=0
GlobalDeviceSettings=0
PrerequisiteEntry=
PrerequisitePbk=
PreferredPort=VPN3-0
PreferredDevice=WAN Miniport (L2TP)
PreferredBps=0
PreferredHwFlow=1
PreferredProtocol=1
PreferredCompression=1
PreferredSpeaker=1
PreferredMdmProtocol=0
PreviewUserPw=1
PreviewDomain=1
PreviewPhoneNumber=0
ShowDialingProgress=1
ShowMonitorIconInTaskBar=0
CustomAuthKey=0
AuthRestrictions=512
IpPrioritizeRemote=1
IpInterfaceMetric=0
IpHeaderCompression=0
IpAddress=0.0.0.0
IpDnsAddress=0.0.0.0
IpDns2Address=0.0.0.0
IpWinsAddress=0.0.0.0
IpWins2Address=0.0.0.0
IpAssign=1
IpNameAssign=1
IpDnsFlags=0
IpNBTFlags=1
TcpWindowSize=0
UseFlags=2
IpSecFlags=1
IpDnsSuffix=
Ipv6Assign=1
Ipv6Address=::
Ipv6PrefixLength=0
Ipv6PrioritizeRemote=1
Ipv6InterfaceMetric=0
Ipv6NameAssign=1
Ipv6DnsAddress=::
Ipv6Dns2Address=::
Ipv6Prefix=0000000000000000
Ipv6InterfaceId=0000000000000000
DisableClassBasedDefaultRoute=0
DisableMobility=0
NetworkOutageTime=0
ProvisionType=0
PreSharedKey=
CacheCredentials=1
NumCustomPolicy=0
NumEku=0
UseMachineRootCert=0
NumServers=0
NumRoutes=0
NumNrptRules=0
AutoTiggerCapable=0
NumAppIds=0
NumClassicAppIds=0
SecurityDescriptor=
ApnInfoProviderId=
ApnInfoUsername=
ApnInfoPassword=
ApnInfoAccessPoint=
ApnInfoAuthentication=1
ApnInfoCompression=0
WebPreAuth=
DisableDefaultDnsSuffixes=0
NumTrustedNetworks=0
NumDnsSearchSuffixes=0
PowershellCreatedProfile=0
ProxyFlags=0
ProxySettingsModified=0
ProvisioningAuthority=
AuthTypeOTP=0
GREKeyDefined=0
NumPerAppTrafficFilters=0
AlwaysOnCapable=0
PrivateNetwork=0

NETCOMPONENTS=
ms_msclient=1
ms_server=1

MEDIA=rastapi
Port=VPN3-0
Device=WAN Miniport (L2TP)

DEVICE=vpn
PhoneNumber=vpn.mydomain.ru
AreaCode=
CountryCode=0
CountryID=0
UseDialingRules=0
Comment=
FriendlyName=
LastSelectedPhone=0
PromoteAlternates=0
TryNextAlternateOnFail=1

Этот файл в дальнейшем мы будем импортировать клиентам.

При импорте мы потеряем логин, пароль и общий ключ IPSec.

Создадим в директории проекта RDP файл (текстовый файл c расширением rdp):

RDP File

screen mode id:i:2
use multimon:i:0
desktopwidth:i:1920
desktopheight:i:1080
session bpp:i:32
winposstr:s:0,3,0,0,800,600
compression:i:1
keyboardhook:i:2
audiocapturemode:i:0
videoplaybackmode:i:1
connection type:i:2
networkautodetect:i:1
bandwidthautodetect:i:1
displayconnectionbar:i:1
enableworkspacereconnect:i:0
disable wallpaper:i:0
allow font smoothing:i:0
allow desktop composition:i:0
bitmapcachepersistenable:i:1
full address:s:192.168.66.223
audiomode:i:0
redirectprinters:i:1
redirectcomports:i:0
redirectsmartcards:i:1
redirectclipboard:i:1
redirectposdevices:i:0
autoreconnection enabled:i:1
authentication level:i:0
prompt for credentials:i:1
negotiate security layer:i:1
remoteapplicationmode:i:0
alternate shell:s:
shell working directory:s:
gatewayhostname:s:
gatewayusagemethod:i:4
gatewaycredentialssource:i:4
gatewayprofileusagemethod:i:0
promptcredentialonce:i:0
gatewaybrokeringtype:i:0
use redirection server name:i:0
rdgiskdcproxy:i:0
kdcproxyname:s:
redirectdirectx:i:1
drivestoredirect:s:Локальный диск (C:);
username:s:MYDOMAIN\vladimir

Обращаем внимание на 3 строки и меняем их на нужные:

  • full address:s:192.168.66.223 — адрес вашего терминального сервера
  • drivestoredirect:s:Локальный диск (C:); — перенаправление локального диска пользователя
  • username:s:MYDOMAIN\vladimir  — логин пользователя

Более полное описание доступных переменных в rdp файле

Докидываем в директорию проекта cmdow.exe из скаченного архива по пути \bin\Release (альтернативная ссылка).

Итого в директории у нас 3 файла:

  1. my.pbk — шаблон VPN соединения
  2. my.rdp — RDP файл
  3. cmdow.exe — программа для скрытия рабочего окна скрипта 

Создадим 2 bat-скрипта в директории проекта:

  1. install.bat — скрипт установщик
  2. connect.bat — скрипт запуска VPN и RDP сессий

notepad++ %SystemDrive%\VPNconnect\connect.bat

cmdow @ /HID
rasdial vpn.mydomain.ru username password
mstsc.exe my.rdp
rasdial vpn.mydomain.ru /disconnect

notepad++ %SystemDrive%\VPNconnect\install.bat

copy my.rdp connect.bat %USERPROFILE%\Desktop
copy cmdow.exe %LOCALAPPDATA%|
type my.pbk >> %USERPROFILE%\AppData\Roaming\Microsoft\Network\Connections\Pbk\rasphone.pbk
REM Открываем в панели управления сетевые адаптеры для установки IPSec общего ключа
ncpa.cpl

Заполняем корректными данными RDP файл (адрес сервера, имя пользователя).

В файле connect.bat указываем корректные имя и пароль.

Разворачиваем клиентов

Копируем директорию проекта на компьютер клиента.

Переходим в директорию и запускаем от администратора install.bat.

Устанавливаем IPSec ключ в свойствах сетевого адаптера:
L2TP общий ключНа рабочем столе клиента появились два файла:

  1. connect.bat — поднимает VPN соединение, RDP сессию (на основе файла my.rdp)
    гасит VPN коннект после отключения RDP сессии
  2. my.rdp — необходим для RDP сессии

После запуска connect.bat произойдет подключение к VPN серверу и после этого запустится RDP сессия.

На этом наверное все:)
P.S. Из массы разнообразных домашних компьютеров попались два экземпляра:

Windows XP — вообще ни как штатными средствами не удалось настроить VPN

Windows 7 (32) — при попытке соединения выдавал различные ошибки

Пришлось на этих двух машинах установить VPN клиент от SoftEther.

SoftEther VPN Client Manager

После его настройке можно автоматизировать запуск с помощью его CLI:

  • vpncmd localhost /client /cmd AccountConnect Имя_соединения
  • vpncmd localhost /client /cmd AccountDisconnect Имя_соединения
Рейтинг
( 3 оценки, среднее 5 из 5 )
Понравилась статья? Поделиться с друзьями:
Добавить комментарий

:) :D :( :o 8O :? 8) :lol: :x :P :oops: :cry: :evil: :twisted: :roll: :wink: :!: :?: :idea: :arrow: :| :mrgreen:
This site is protected by reCAPTCHA and the Google Privacy Policy and Terms of Service apply.