Что может?

  • Автоматическое создание и поддерживание подключения 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 - альтернативный DNS
  • dnssuffix - DNS суффикс подключения.
  • dnsregister - регистрация в DNS.
  • requireencrypt - обязательное шифрование
  • ipv6 - true - использовать IPv6
  • checkall - 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 - проверка методом запроса к сервисам DNS
      • host - доменное имя для проверки;
      • 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 с недоступным сервером, которая могла осуществляться бесконечно долго.

Загрузки

Полная версия установщика, включая зависимости
51,74 Мб , 22.01.2024 (429 загрузок)
Минимальная версия установщика. Требуется предустановленный .net 7
2,03 Мб , 22.01.2024 (15 загрузок)
Шаблон профиля VPN подключения
1,59 Кб , 22.01.2024 (33 загрузок)
2,37 Кб , 13.04.2023 (119 загрузок)