Always-VPN

Use VPN or On ne passe pas! Интернет или только через VPN, или больше никак!


Project by Дмитрий Евдокимов Hosted on GitHub

Always VPN

Build status GitHub Release

Use VPN or On ne passe pas!
Интернет или только через VPN, или больше никак!

Для чего

Есть, например, домашняя сетка. Во враждебном окружении разных провайдеров на пути до Интернета. Для решения таких задач придуман VPN, но он имеет свойство как “дозваниваться”, так и “отваливаться”. Требуется обеспечить, чтобы он был постоянно и гарантированно.

Есть подходяще звучащая технология Microsoft Always On VPN, но она заточена на подключение в сетям корпораций и требует много Microsoft как на той стороне, так и отнюдь небытовых редакций Windows на стороне клиента.

Есть аналогичные нагугленные решения (и больше вопросы) с использованием:

Это решение по событиям:

удаляет все действующие к этому моменту маршруты по умолчанию (то есть выход в Интернет), очищает кэш маршрутов и прописывает едиственный маршрут только на IP указанного сервера VPN, а затем, если соединения с ним нет, поднимает его.

Настройка

Шаг 1: Создание VPN-соединения

Создать VPN-соединение в Windows, назвать его желательно одним английским словом и без пробелов (например, tunnel), адрес сервера указать в числовом виде IP - чтобы не зависеть от доступности DNS, не забыть указать “Использовать основной шлюз в удаленной сети” (“Use default gateway on remote network”)!

В современных Windows это запрятано достаточно далеко. Например, в версии 1803 надо зайти в настройки VPN, далее в Настройка параметров адаптера (справа - не при всякой ширине экрана и влезает), найти наш tunnel, правой кнопкой мыши Свойства, закладка Сеть, в списке IP версии 4 (TCP/IPv4), Свойства, Дополнительно, Параметры IP и там поставить эту галочку.

В процессе подключения новых Windows 10 может быть ошибка вида Policy match error из-за отключенности AES-256-CBC and MODP2048 по умолчанию. Чтобы форсировать их использование, в реестр надо добавить параметр типа DWORD (32 bit) со значением 2:

HKEY_LOCAL_MACHINE\System\CurrentControlSet\Services\Rasman\Parameters\NegotiateDH2048_AES256

Шаг 2: Прописывание констант

В файле always_vpn.cmd указать две используемые константы:

Если название содержит пробелы, то здесь записывать БЕЗ кавычек - например, set vpn=VPN Tunnel IKEv2. Регистр значения не имеет. Тем не менее, всегда лучше, если такие названия будут одним английским словом.

Адрес лучше указывать цифрами (как 127.0.0.1, указанный для примера в программе), так как DNS может оказаться недоступен при удалении прежнего шлюза.

Также сохраните себе куда-нибудь на бумажку шлюзы по умолчанию с Ваших сетевых адаптеров - программа их очистит!

Шаг 3: Правильное размещение

Поместить файл always_vpn.cmd в защищенную от изменений пользователем папку (например, Windows), поскольку он запускается с админскими правами (требуется для удаления-добавления маршрутов) - чтобы не приписали чего.

Шаг 4: Планировщик заданий

Запустить Планировщик заданий Windows, импортировать в него прилагаемый файл always_vpn.xml и откорректировать местоположение запускаемого файла (по умолчанию это %windir%\always_vpn.cmd).

При желании создать Триггеры самостоятельно, события подключения и отключения надо задать вручную:

Прекращение деятельности

При необходимости все отключить, надо:

Заметьте: Пока задание в планировщике не остановлено, любые переподключения сетей не вернут выход в Интернет без поднятия заданного VPN! В этом ведь и заключается главная задача этой программы!

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

netsh int ipv4 show route | find "127.0.0.1/32"

где вместо 127.0.0.1 указать IP Вашего сервера.

IPv6

Данный код обрабатывает только IPv4, поскольку и Windows не добавляет маршрут IPv6 по умолчанию. Это можно сделать командой вида:

netsh interface ipv6 add route ::/0 interface=27

где 27 - для примера это наш интерфейс IKEv2. Или патчить strongSwan issue #817.

Лицензионное соглашение

Licensed under the Apache License, Version 2.0.
Вы можете использовать этот код совершенно свободно без всяких ограничений с моей стороны и без претензий с Вашей.

Downloads

Релизы и инфо Скачать Дата