Автоматическое подключение VPN в Windows
- Автоматическое создание и поддерживание подключения VPN в активном состоянии
-
Проброс маршрутов -
Поддерживаемые протоколы PPTP, L2TP/IPSec PSK, PPPoE -
Контролировать соединение одновременно по нескольким точкам используя ping, tcp, http, dns -
Запуск внешних скриптов после подключения и при отключении (сбросе) -
Проверка доступности серверов при любом изменении профиля сети, подключении/отключении любых сетевых подключений. -
Защищенные профили.
Установка
Установка сервиса осуществляется програмой установки из раздела загрузки.
Инсталятор автоматически определяет платформу 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>
<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
были успешными.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.
Шифрование профиля
Шифрование профиля осуществляется коммандной строкой:
taa.vpn.service.exe /crypt <file.xml>
- для генерации зашифрованного профиляfile.cxml
привязанного к локальной машине.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.2.1
- Добавлена интеграция профиля в исполняемый файл установочного пакета.
- 1.1.17
- Добавлен параметр TTL для метода ping.
- Добавлена очистка кеша DNS для домена перед проверкой (актуально при использовании системных DNS).
- 1.1.15
- Исправлена проверка методом DNS с недоступным сервером, которая могла осуществляться бесконечно долго.
Поддержка проекта: