Найти в Дзене
Эникей на передержке

WireGuard. Автоматическое подключение + Бонусы Linux/Windows

Большинство сотрудников сейчас работают удалённо, но периодически им нужен доступ в сеть компании. Для организации такого доступа мы используем WireGuard. Чтобы получить доступ к ресурсам сети, пользователю необходимо активировать VPN-туннель. Как правило, сотрудники понимают инструкции с первого раза, но бывают исключения. Ещё одним требованием является наличие у пользователя прав Администратора (root для Linux). Если это личный ПК сотрудника, то проблем обычно не возникает, но если это ПК компании, в которой права доступа строго ограничены, то пользователь при всём желании не сможет самостоятельно подключиться к VPN. Избавиться от вышеописанных проблем поможет автоматизация подключения при помощи скрипта. Обратите внимание, что для работы скрипта требуется подготовленный конфигурационный файл, а также установленный клиент. Скачать его можно на официальном сайте: https://www.wireguard.com/install/ Автоматическое подключение WireGuard Подготовка файлов Создадим* в папке пользователя с
Оглавление

Большинство сотрудников сейчас работают удалённо, но периодически им нужен доступ в сеть компании. Для организации такого доступа мы используем WireGuard.

Чтобы получить доступ к ресурсам сети, пользователю необходимо активировать VPN-туннель. Как правило, сотрудники понимают инструкции с первого раза, но бывают исключения. Ещё одним требованием является наличие у пользователя прав Администратора (root для Linux). Если это личный ПК сотрудника, то проблем обычно не возникает, но если это ПК компании, в которой права доступа строго ограничены, то пользователь при всём желании не сможет самостоятельно подключиться к VPN.

Избавиться от вышеописанных проблем поможет автоматизация подключения при помощи скрипта.

Обратите внимание, что для работы скрипта требуется подготовленный конфигурационный файл, а также установленный клиент. Скачать его можно на официальном сайте: https://www.wireguard.com/install/

Автоматическое подключение WireGuard

Подготовка файлов

Создадим* в папке пользователя структуру каталогов vpns\wireguard\mycompany**

*создавать папки можно вручную, но я предпочитаю использовать PowerShell:

mkdir $Env:USERPROFILE\vpns\wireguard\mycompany

**я использую mycompany вместо реального наименования компании

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

Move-Item $Env:USERPROFILE\anykey_mycompany.conf -Destination $Env:USERPROFILE\vpns\wireguard\mycompany

В моём примере имя файла (anykey_mycompany.conf) включает в себя имя пользователя и наименование компании. При подключении создаётся интерфейс с именем, идентичным имени конфигурационного файла (до расширения). Таким образом можно избежать конфликтов при подключении.

Осталось создать файл скрипта:

New-Item -Path $Env:USERPROFILE\vpns\wireguard\mycompany\wg_up_anykey_mycompany.ps1

Расположение созданных файлов и путь к ним
Расположение созданных файлов и путь к ним

Поднимаем сетевой интерфейс

Для поднятия интерфейса WireGuard в Windows используется следующая команда:
wireguard /installtunnelservice <path to conf>.conf

В моём случае данная команда будет выглядеть так:

Start-Process -FilePath "$Env:ProgramFiles\WireGuard\wireguard.exe" -ArgumentList '/installtunnelservice "C:\Users\Anykey\vpns\wireguard\mycompany\anykey_mycompany.conf"'

Кажется, что скрипт готов и его можно добавлять в планировщик заданий на запуск при входе пользователя в систему, но на самом деле не учтён следующий нюанс:

Как заставить скрипт отработать повторно, если подключение не было установлено или было разорвано в процессе работы?

Мой вариант решения не является универсальным, но помогает автоматизировать устранение проблем в более 90% случаев:

Блок-схема варианта по автоматизации решения проблем в >90% случаев
Блок-схема варианта по автоматизации решения проблем в >90% случаев

Улучшаем скрипт

В виде команд PowerShell блок-схема выше выглядит следующим образом:

 Листинг скрипта на запуск и проверку соединения
Листинг скрипта на запуск и проверку соединения

Скачать готовый скрипт можно здесь: https://disk.yandex.ru/d/AScM4gB3NzYnBw

Добавляем задачу в планировщик

При создании задачи в планировщике настраиваем триггер на запуск задачи при входе в систему конкретного пользователя:

Настройка триггера задачи
Настройка триггера задачи

В качестве действия выбираем "Запуск программы", в поле "Программа или сценарий:" вводим powershell, а в качестве аргументов следующую строку:

-WindowStyle hidden -File "C:\Users\Anykey\vpns\wireguard\mycompany\wg_up_anykey_mycompany.ps1"

*обратите внимание, что у вас путь к файлу скрипта может отличаться

Настройка действий
Настройка действий

В условиях лучше снять галочку с запуска только при питании от сети, а в параметрах с пункта "Останавливать задачу, выполняемую дольше:"

Имя задачи и описание укажите самостоятельно.

Бонус 1. Поднимаем сетевой интерфейс WG (Linux)

Подготовка файлов

В Linux файлы конфигурации клиента должны распологаться в каталоге /etc/wireguard/

Переместим anykey_mycompany.conf в вышеуказанную директорию:

sudo mv anykey_mycompany.conf /etc/wireguard/anykey_mycompany.conf

Поднимаем сетевой интерфейс

В Linux для поднятия сетевого интерфейса достаточно выполнить команду:

# wg-quick up anykey_mycompany

*запуск команды должен осуществляться от имени пользователя, имеющего соответствующие разрешения (root по умолчанию)

Для автоматизации подключения можно в cron создать задачу на запуск команды выше

Бонус 2. Автоматическая установка WireGuard (Windows)

Запускаем PowerShell от имени Администратора, копируем и вставляем следующие строки одной командой:

Invoke-WebRequest "https://download.wireguard.com/windows-client/wireguard-installer.exe" -OutFile $Env:TEMP\wireguard-installer.exe;

Start-Process -FilePath "$Env:TEMP\wireguard-installer.exe"