Автоматическое подключение VPN в Windows
- Что может?
- Установка
- Профили
- Развертывание
- Что нового
- Загрузки
Что может?
- Автоматическое создание и поддерживание подключения VPN в активном состоянии
- Проброс маршрутов
- Поддерживаемые протоколы PPTP, L2TP/IPSec PSK, PPPoE
- Контролировать соединение одновременно по нескольким точкам используя ping, tcp, http, dns
- Запуск внешних скриптов после подключения и при отключении (сбросе)
- Проверка доступности серверов при любом изменении профиля сети, подключении/отключении любых сетевых подключений.
- Защищенные профили.
-
Поддержка port knocking - позволяющая динамически открывать порты на стороне Firewall VPN сервера после
последовательности попыток подключений или
ping
заданного хоста.
Установка
Установка сервиса осуществляется программой установки из раздела загрузки.
Инсталятор автоматически определяет платформу x64
/x86
и устанавливает
соответствующие компоненты.
Для тихого режима необходимо использовать ключ /silent
. Использование тихого режима не
обязательно, т.к. инсталятор автоматически закрывается после завершения установки без взаимодействия с
пользователем.
Если рядом с установщиком будет находиться файл point.xml
/point.cxml
то он
будет автоматически скопирован в папку профилей, а служба после завершения установки - запущена.
Если профиль при установке не будет предоставлен в папке профилей будет создан шаблон
example.xml
, а служба останется в незапущенном состоянии. Для запуска службы необходимо
воспользоваться оснасткой Службы
или командой net start taa.vpn.service
.
Для регистрации сервиса в качестве службы необходимо запустить ее с ключом taa.vpn.service.exe
/install
от имени администратора. Ключ /uninstall
удаляет службу.
При использовании минимального пакета необходимо убедиться в наличии предустановленного пакета .NET 7 Runtime.
Профиль подключения
Профиль подключения представляет собой xml
/cxml
файл, содержащий параметры
подключения. Профили хранятся в директории %ProgramFiles%\taa\vpn.service\points\
и их
может быть несколько.
Профили поднимаются абсолютно независимо друг от друга.
Пример профиля:
<taa>
<machine>taapc</machine>
<id>test_vpn</id>
<type>l2tp</type>
<host>myvpn.server.com</host>
<key>preshared_key</key>
<login>test_vpndialer</login>
<password>test_password</password>
<defaultgw>false</defaultgw>
<ip/>
<ipv6>false</ipv6>
<dnssuffix>domain.local</dnssuffix>
<dnsregister>false</dnsregister>
<dns1/>
<dns2/>
<metric>1000</metric>
<classroutes>false</classroutes>
<requireencrypt>false</requireencrypt>
<checkinterval>30</checkinterval>
<knocking>
<open>
<tcp host="192.168.7.8" port="3379" timeout="2000" />
<ping host="195.191.78.205" timeout="2000" />
<tcp host="192.168.7.8" port="3381" timeout="2000" />
</open>
<kainterval>300</kainterval>
<keepalive>
<tcp host="192.168.7.8" port="3344" />
</keepalive>
</knocking>
<checkers>
<item type="ping" host="192.168.7.5" count="2" timeout="1000"/>
<item type="dns" host="some.domain.local" data="10.1.0.100" count="1" timeout="1000"/>
<item type="http" host="http://some.domain.local/ping/" data="OK" count="1" timeout="1000"/>
<item type="tcp" host="192.168.7.5" port="1433" count="1" timeout="1000"/>
</checkers>
<routes>
<route net="192.168.7.0" mask="255.255.255.0" metric="10"/>
<route net="195.201.201.32" mask="255.255.255.255" gateway="10.100.1.1" metric="10"/>
</routes>
<hosts>
<host name="hosts.test" ip="0.0.0.0"/>
</hosts>
<scriptup/>
<scriptdown/>
</taa>
, где
machine
- имя компьютера к которому привязан профиль. Если имя компьютера не совпадает, то профиль игнорируется. Пустое значение - игнорирование параметра.id
- идентификатор подключения. Используется в качестве имени линка на локальной машине. Не может быть более одного профиля с одним именем.type
- тип подключения. Может бытьpptp
,l2tp
илиpppoe
.host
- IP или имя хоста VPN сервераkey
-preshared key
дляl2tp
подключенияlogin
- логин пользователяpassword
- пароль пользователя. Пароль не будет храниться в профиле VPN подключения Windows. Он используется только при непосредственном подключении.defaultgw
-true
, если шлюз подключения необходимо использовать в качестве шлюза по умолчанию. Иначе -false
.classroutes
-true
, если необходимо добавить классовые маршруты. Иначе -false
.ip
- IP подключения. Пустое значение - получить с сервера.metric
- метрика подключенияdns1
- основной DNS. Пустой - получить с сервера.dns2
- альтернативный DNSdnssuffix
- DNS суффикс подключения.dnsregister
- регистрация в DNS.requireencrypt
- обязательное шифрованиеipv6
-true
- использовать IPv6checkall
-true
- если требуется чтобы все проверкиcheckers
были успешными.knocking
- секция port knocking. Отвечает за открытие доступа к серверу VPN и его поддержание.open
- секция методов port knocking для открытия доступа к VPN серверу. Все действия секции выполняются строго синхронно и последовательно.tcp
-tcp
подключение кhost
на портport
с таймаутомtimeout
мс. Наличие слушателя значения не имеет.ping
-ping
хостаhost
с таймаутомtimeout
мс.
kainterval
- интервал поддержания портов открытыми с помощью секцииkeepalive
keepalive
- секция заполняется аналогично секцииknocking/open
checkinterval
- интервал в секундах проверки доступности серверов по секцииcheckers
. Параметры методов проверки:- Общие:
type
- тип проверкиhost
- хост проверкиcount
- количество попытокtimeout
- таймаут попытки в миллисекундах
ping
- проверка методом эхо-запроса. При использовании данного метода необходимо учитывать, что IP адреса могут быть доступны в сети Интернет провайдера пользователя.ttl
- время жизни пакета. В некоторых случая позволяет сократить количество проблем с IP адресами провайдеров.
dns
- проверка методом запроса к сервисам DNShost
- доменное имя для проверки;data
- ожидаемый ответ. Если пустое - любой ответ от DNS сервера будет считаться успешным завершением проверки;server
- явно заданный DNS сервер, к которому отправляется запрос (может быть доменным именем). Если пустой - используются все DNS сервера всех подключений;
http
- проверка HTTP(S) запросомhost
- URL для проверки;data
- ожидаемый ответ (начало ответа). Пустое значение - любой не ошибочный ответа;
tcp
- проверка tcp подключениемport
- порт подключения;
- Общие:
routes
- маршруты поднимаемые при подключении.net
- подсеть маршрутаmask
- маска маршрутаgateway
- явное объявление шлюза маршрутаmetric
- метрика маршрута
-
hosts
- обновление файла%SystemRoot%\System32\drivers\etc\hosts
name
- доменip
- IP домена
scriptup
-cmd
скрипт выполняемый при подключении. Если при запуске сервиса все проверки проходят (пользователь находится в офисной сети) скрипт не выполняется.scriptdown
-cmd
скрипт выполняемый при сбросе подключении (проверки не пройдены).
В скриптах и некоторых других параметрах доступны теги:
%server%
- IP VPN сервера к которому фактически осуществлено подключение. Актуально когда подключение к VPN осуществляется по доменному имени, содержащего несколько A записей.%gateway%
- шлюз подключения.%ip%
- IP предоставленный сервером.%dns1%
- основной DNS предоставленный сервером.%dns2%
- альтернативный DNS предоставленный сервером.%ifindex%
- индекс интерфейса VPN подключения.%iplocal%
- локальный IP.
Шифрование профиля
В некоторых сценариях нежелательно открытое хранение профилей подключения. Для решения этой проблемы используется шифрование, которое на основании подготовленного профиляxml
генерирует зашифрованный cxml
. Зашифрованный профиль обычный пользователь открыть
и прочитать не сможет.
Шифрование профиля осуществляется командной строкой:
taa.vpn.service.exe /crypt <file.xml>
- для генерации зашифрованного профиляfile.cxml
привязанного к локальной машине. Профиль не доступен для использования на других машинах и на локальной в случае переустановки Windows. Рекомендуется только в случае ручной административной настройки, когда необходим максимальный уровень закрытости параметров профиля.taa.vpn.service.exe /cryptshared <file.xml>
- для генерации зашифрованного профиляfile.cxml
работающего на любой машине. Рекомендуется задать атрибутmachine
профиля «во избежание» несанкционированного переноса профиля.
Раздельный пакет развертывания
Пример скрипта PowerShell
для формирования пакета автоматического развертывания у пользователя:
$Env:Programfiles'\taa\vpn.service\taa.vpn.service.exe' /cryptshared point.xml
$Env:Programfiles'\7-Zip\7z.exe' a "vpn.zip" "point.cxml" "taa.vpn.service.installer.exe"
Пример cmd
скрипта:
@echo off
%ProgramFiles%\taa\vpn.service\taa.vpn.service.exe /cryptshared point.xml
%ProgramFiles%\7-Zip\7z.exe a "vpn.zip" "point.cxml" "taa.vpn.service.installer.exe"
После выполнения скрипта, будет сформирован архив vpn.zip
, который необходимо передать пользователю.
Интегрированный пакет развертывания
Начиная с версии 1.2.1 доступна интеграция профиля в исполняемый файл установочного пакета (все в одном):
@echo off
%ProgramFiles%\taa\vpn.service\taa.vpn.service.exe /integrate "point.xml" "taa.vpn.service.installer.exe"
На выходе будет создан установочный пакет с именем: taa.vpn.service.installer_<MACHINE>_<LOGIN>.exe
который содержит внутри профиль подключения.
Что нового?
История изменений:
- 1.3.0
- Добавлена секция port knocking (пинание портов) -
knocking
- 1.2.1
- Добавлена интеграция профиля в исполняемый файл установочного пакета.
- 1.1.17
- Добавлен параметр TTL для метода ping.
- Добавлена очистка кеша DNS для домена перед проверкой (актуально при использовании системных DNS).
- 1.1.15
- Исправлена проверка методом DNS с недоступным сервером, которая могла осуществляться бесконечно долго.