Автоматическое подключение 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- интервал поддержания портов открытыми с помощью секцииkeepalivekeepalive- секция заполняется аналогично секции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\hostsname- домен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 с недоступным сервером, которая могла осуществляться бесконечно долго.
Загрузки
Лицензионное соглашение для бесплатных версий программного обеспечения.