https://github.com/diev/always-vpn
Use VPN or On ne passe pas! Интернет или только через VPN, или больше никак!
https://github.com/diev/always-vpn
batch-script cmd default gateway ikev2 ikev2-setup ip ipv4 netsh network routes scheduled-tasks shell-script strongswan-vpn tunnel vpn vpn-connections vpn-gateway
Last synced: 8 months ago
JSON representation
Use VPN or On ne passe pas! Интернет или только через VPN, или больше никак!
- Host: GitHub
- URL: https://github.com/diev/always-vpn
- Owner: diev
- License: apache-2.0
- Created: 2018-11-14T17:36:55.000Z (almost 7 years ago)
- Default Branch: master
- Last Pushed: 2021-04-07T13:20:51.000Z (over 4 years ago)
- Last Synced: 2025-01-03T01:29:13.718Z (9 months ago)
- Topics: batch-script, cmd, default, gateway, ikev2, ikev2-setup, ip, ipv4, netsh, network, routes, scheduled-tasks, shell-script, strongswan-vpn, tunnel, vpn, vpn-connections, vpn-gateway
- Language: Shell
- Homepage: http://diev.github.io/Always-VPN/
- Size: 27.3 KB
- Stars: 1
- Watchers: 3
- Forks: 1
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- Changelog: CHANGELOG.md
- License: LICENSE
Awesome Lists containing this project
README
# [Always-VPN]
[![Build status]][appveyor]
[![GitHub Release]][releases]Use VPN or On ne passe pas!
Интернет или только через VPN, или больше никак!## Last News
Вместо этого пакета теперь используется аналогичный [скрипт для WireGuard].
## Для чего
Есть, например, домашняя сетка. Во враждебном окружении разных провайдеров
на пути до Интернета. Для решения таких задач придуман *VPN*, но он имеет
свойство как "дозваниваться", так и "отваливаться". Требуется обеспечить,
чтобы он был постоянно и гарантированно.Есть подходяще звучащая технология Microsoft *Always On VPN*, но она
заточена на подключение в сетям корпораций и требует много Microsoft как
на той стороне, так и отнюдь небытовых редакций Windows на стороне клиента.Есть аналогичные нагугленные решения (и больше вопросы) с использованием:
* Windows *Firewall*, но он плохо различает *wireless* и *ras* и правила
у него типа "0-49,51-499,501-4499,4501-65535", куда потом может
понадобиться вставить еще сетевую печать, например.
* Ярлыка в автозагрузку, но потом Windows в какой-нибудь новой версии
возьмет и перестанет давать права на жонглирование маршрутами.
* Постоянной проверки раз в 30 секунд, что VPN еще не отвалился.
* Перспективного *PowerShell*, но он так и не реализовал всей былой
функциональности встроенной утилиты *NETSH* по работе с маршрутами,
да и запускается он медленно, тогда как здесь важна быстрота
реагирования.Это решение по событиям:
* При входе любого пользователя,
* Появилось какое-то новое сетевое соединение,
* Пропало какое-то сетевое соединение,
* При разблокировании рабочей станции любым пользователемудаляет все действующие к этому моменту маршруты по умолчанию (то есть
выход в Интернет), очищает кэш маршрутов и прописывает едиственный маршрут
только на *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 8.1/10 может появиться ошибка вида
*Policy match error* из-за отключенности *AES-256-CBC and MODP2048*
по умолчанию. Чтобы форсировать их использование, в реестр надо добавить
параметр:[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\RasMan\Parameters]
"NegotiateDH2048_AES256"=dword:00000002При использовании числового IP вместо символьного имени DNS скорее всего
понадобится также добавить в реестр еще один параметр (или попробовать сервис
[sslip.io]):[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\RasMan\Parameters]
"DisableIKENameEkuCheck"=dword:00000001### Шаг 2: Прописывание констант
В файле **always_vpn.cmd** указать две используемые константы:
* название соединения (set vpn=*tunnel*)
* адрес сервера (set ip=*IP*).Если название содержит пробелы, то здесь записывать БЕЗ кавычек - например,
set vpn=*VPN Tunnel IKEv2*. Регистр значения не имеет. Тем не менее,
всегда лучше, если такие названия будут одним английским словом.Адрес лучше указывать цифрами (как *127.0.0.1*, указанный для примера в
программе), так как DNS может оказаться недоступен при удалении прежнего
шлюза.Также сохраните себе куда-нибудь на бумажку шлюзы по умолчанию с Ваших
сетевых адаптеров - программа их очистит!### Шаг 3: Правильное размещение
Поместить файл **always_vpn.cmd** в защищенную от изменений пользователем
папку (например, *Windows*), поскольку он запускается с админскими правами
(требуется для удаления-добавления маршрутов) - чтобы не приписали чего.### Шаг 4: Планировщик заданий
Запустить *Планировщик заданий* Windows, импортировать в него прилагаемый
файл **always_vpn.xml** и откорректировать местоположение запускаемого
файла (по умолчанию это `%windir%\always_vpn.cmd`).При желании создать *Триггеры* самостоятельно, *события* подключения и
отключения надо задать вручную:* Журнал: *Microsoft-Windows-NetworkProfile/Выполняется*
* Источник: *NetworkProfile*
* Код события: *10000* (подключение) и *10001* (отключение)## Прекращение деятельности
При необходимости все отключить, надо:
* *Отключить* выполнение задания в *Планировщике заданий*,
* у статических (чаще кабельных) сетевых адаптеров прописать обратно
их *шлюз по умолчанию*, который удалила эта программа,
* у адаптеров с DHCP (чаще это Wi-Fi) - просто переподключиться.**Заметьте:** Пока задание в планировщике не остановлено, любые
переподключения сетей не вернут выход в Интернет без поднятия заданного
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].
Поэтому скрипт создания сервера также только IPv4.## Создание VPN-сервера
Собственно, создание самого сервера осуществляется скриптом `vps-setup.sh`.
Выполняются команды:cd /tmp
wget https://raw.githubusercontent.com/diev/Always-VPN/master/vps-setup.sh
chmod u+x vps-setup.sh
./vps-setup.shДля скачивания также можно использовать сокращенный URL, но тогда с указанием
имени для сохранения файла:wget https://git.io/JemOz -O vps-setup.sh
## Благодарности
Код скрипта создания сервера основан на проекте [jawj/IKEv2-setup].
Copyright (c) 2015 – 2018 George MacKerron.
Released under the [MIT licence].Также скрипт использует проект [ValdikSS/easy-rsa-ipsec] для генерации
сертификатов RSA для сервера и клиентов, forked from Easy-RSA 3.
Copyright (C) 2013 by the Open-Source OpenVPN development community.
Easy-RSA 3 license: GPLv2.## Лицензионное соглашение
Licensed under the [Apache License, Version 2.0].
Вы можете использовать этот код совершенно свободно без всяких ограничений
с моей стороны и без претензий с Вашей.[Wiki]: https://github.com/diev/Always-VPN/wiki
[Идеи]: https://github.com/diev/Always-VPN/projects/1
[Issues]: https://github.com/diev/Always-VPN/issues
[releases]: https://github.com/diev/Always-VPN/releases/latest[CHANGELOG]: CHANGELOG.md
[Apache License, Version 2.0]: LICENSE
[MIT licence]: http://opensource.org/licenses/mit-license[Always-VPN]: http://diev.github.io/Always-VPN
[sslip.io]: https://sslip.io/
[#817]: https://wiki.strongswan.org/issues/817
[jawj/IKEv2-setup]: https://github.com/jawj/IKEv2-setup
[ValdikSS/easy-rsa-ipsec]: https://github.com/ValdikSS/easy-rsa-ipsec[скрипт для WireGuard]: https://github.com/burghardt/easy-wg-quick/
[appveyor]: https://ci.appveyor.com/project/diev/always-vpn
[Build status]: https://ci.appveyor.com/api/projects/status/bq1u869v35o09nai?svg=true
[GitHub Release]: https://img.shields.io/github/release/diev/Always-VPN.svg