Wireguard сервер на OpenBSD с UI
WireGuard - полезный инструмент для создания шифрованных туннелей между подсетями или для организации доступа в локальную сеть. Конечно, можно делать все по памяти, либо сделать пару-тройку простеньких скриптов для выполнения каких-то повторяющихся действий по внесению изменений в настройки сервиса, но так же можно использовать UI веб-интерфейсы. На мой взгляд, это, в некоторых случаях, может давать ряд приимуществ. В данном случае, основным приимуществом для меня является то, что, при использовании wireguard-ui, можно быстро добавить нового пользователя, даже если ты уже давно этого не делал. Всё что нужно помнить - это логин и пароль от веб-интерфейса, а все остальное делается интуитивно.
Почему именно OpenBSD выбран в качестве основы для предоставления сервиса? Тут действуют два основных стимула - малые требования к ресурсам самой ОС и скруeпулезный подход к безопасности системы со стороны коммьюнити, занимающегося разработкой данного дистрибутива. Так же мне видится плюсом использование pf (packet filter) в качестве межсетевого экрана, ведь читаемость его конфигурации (как мне кажется) значительно лучше нежели в iptables.
План действий следующий:
- Установка и настройка OpenBSD в VirtualBox
- Сборка приложения wireguard-ui из иходного кода (т.к. таковой отсутствует под OpenBSD)
- Установка и настройка OpenBSD в Proxmox VE
- Настройка WireGuard-сервера
- Начальная настройка wireguard-ui
Установка и настройка OpenBSD в VirtualBox
-
Создаем новую ВМ в VirtualBOX, где все предлагаемые параметры можно оставить по умолчанию, либо сделать больше, но конфигурации с одним ядром и одним гигабайтом оперативной памяти, плюс 16 Гб жесткого диска вполне достаточно. Единственный нюанс - это то, что нужно сменить тип контроллера в разделе “Storage” конфигурации ВМ, у диска на который будет производиться установка, c PIIX4 на ACHI. В противном случае установка не удастся
-
Устанавливаем ОС:
Весь процесс установки, я думаю, описывать не стоит, но следует обратить внимание на некоторые моменты:
- На вопрос “Allow root ssh login?” отвечаем утвердительно, т.к. все действия будут выполняться от имени пользователя root и удобнее работать c машиной именно через SSH
- На шаге создания разметки выбираем вариант
(c)-Custom
и создаем два раздела:
1 2 3 4 5 6 7 8 9 10
sd0> a a offset: [64] size: [33554368] 14G FS type: [4.2BSD] mount point: [none] / sd0*> a b offset: [29366816] size: [4187616] FS type: [swap] sd0*> q
Если всё получилось, то извлекаем установочный диск и загружаемся в свежеустановленную ОС
-
Чтобы подключиться к этой машине по SSH, пробрасываем в нее какой-то порт хостовой машины, ведущий на 22-й порт гостевой. Всё это можно сделать в разделе:
Machine -> Settings -> Network -> Advanced -> Port Forwarding
, добавив новое правило перенаправления следующего вида:Name Protocol Host IP Host Port Guest IP Guest Port Rule 1 TCP 127.0.0.1 2222 22 Подключаемся с помощью команды
ssh root@127.0.0.1 -p 2222
Сборка приложения wireguard-ui
Для начала скачаем набор, так называемых, “портов”, чтобы получить среди этого набора сценарий сборки и установки golang. Для этого, сначала, скачиваем архив:
|
|
Распаковываем его:
|
|
Собираем и устанавливаем golang:
|
|
Устанавливаем git и yarn:
|
|
Идем собирать wireguard-ui:
|
|
В случае успеха, мы получаем бинарный файл wireguard-ui
, который мы будем использовать на другой виртуальной машине, где уже будет работать сам WireGuard.
Теперь его нужно скопировать на родительский хост, после чего можно будет убить это машину в VirtualBox.
Копируем бинарник, выполнив на локальной машине:
|
|
Установка и настройка OpenBSD в Proxmox VE
Установка OpenBSD в Proxmox VE будет моло чем отличаться от установки VirtualBox. Основное отличие будет заключаться только в размере диска, куда будет установлена ОС и в наборе устанавливаемых пакетов. Процесс подготовки к установке описывать не буду, т.к. подразумевается, что вы умеете это делать.
Создаем машину с примерно такими характеристиками:
|
|
Устанавливаем туда OpenBSD, где при установке разбиваем диск на 3.5 Гб для корневого раздела и всё остальное под swap.
На этапе выбора наборов файлов убираем всё что связано с Xorg, введя последовательно: -x*
и -game*
. В итоге, уже установленная система со всем содержимым будет занимать около 1.5G и ~1.7G будет свободно, чего должно быть вполне достаточно для долгой и счастливой жизни сервиса.
Настройка WireGuard-сервера
Чтобы не писать перед каждой командой doas
, подразумевается, что все нижеследующее будет выполняться от имени пользователя root
Разрешаем перенаправление пакетов:
|
|
Чтобы после перезагрузки системы данные настройки сохранились, выполняем команды:
|
|
Создаем папку настроек wireguard и переходим в нее:
|
|
Генерируем приватный и публичный ключи:
|
|
Создаем файл конфигурации wg0.conf
:
|
|
Далее, добавляем правило фаервола, добавив в файл /etc/pf.conf
строки:
|
|
em0
- это имя физического интерфейса виртуальной машины c типом сетевого адаптера Intel E1000. Если при создании ВМ, был вабран, например, тип сетевого адаптера VirtIO, то имя будет vio0
, т.ч. обратите на это внимание.Применяем изменения правил:
|
|
Создаем скрипт инициализации и обновления конфигурации интерфейса wireguard:
|
|
Создаем скрипт запуска скрипта wireguard-up
как сервиса:
|
|
Включаем и запускаем сервис:
|
|
Копируем созданный ранее в VirtualBox бинарный файл wireguard-ui
в папку /usr/local/bin
и создаем скрипт запуска сервиса:
|
|
Включаем и запускаем сам сервис:
|
|
На этом основную настройку сервера можно считать законченой и все остальное делать уже в wireguard-ui
Начальная настройка wireguard-ui
Отркрываем в браузере адрес созданной на предыдущем шаге машины и авторизуемся с логином admin и парлем admin.
Первым делом следует сменить пароль администратора по умолчанию в разделе “SETTINGS -> Users Settings”
После этого следует обратить внимание на раздел “SETTINGS -> Global Settings”, в котором следует обратить внимание на значение поля “Endpoint Address”, он должен соответствовать IP-адресу интерфейса куда будет производиться подключение клиентов. Так же можно задать свой набор DNS-серверов.
В разделе “MAIN -> Wireguard Server” можно ничего не менять, но можно обратить внимание на поле “Server Interface Addresses”, который определят диапазон из которого будут выдаваться адреса для клиентских подключений. Поле “Listen Port” должно соответствовать значению “51820”, т.к. на предыдущем шаге мы создавали правило фаервола именно для этого порта.
Если все настройки устраивают, то можно добавлять клиентов с помощью кнопки “New Client”, находящейся в правом-верхнем углу страницы. В форме добавления клиента можно не заполнять ничего, кроме имени клиента в поле “Name”, т.к. все остальные поля уже заполнены, а ключи “Public Key” и “Preshared Key” будут сгенерированы автоматически.
После применения всех изменений, следует нажать кнопку “Apply Config”, находящуюся в правом-верхнем углу страницы.
Если всё работает правильно, то после добавления клиентов, мы должы увидеть их в списке раздела “UTILITES -> Status -> Connected Peers”