-
Notifications
You must be signed in to change notification settings - Fork 18
Description
Есть идея перевести VPN для доступа в сеть ХС с OpenVPN на WireGuard.
Для этого нужно решение по генерации конфигов, поскольку WG рассчитано на уникальность ключей и IP-адресов для каждого клиента. У каждого участника может быть несколько устройств, с которых он захочет иметь доступ в ХС, в том числе одновременно.
Возможный вариант:
В профиле пользователя есть список имеющихся конфигураций, пустой по дефолту. Рядом ссылка на инструкцию по настройке клиента под Windows/Linux/Mac.
Кнопка "Создать конфигурацию WG", по нажатию на неё:
- Генерируется пара закрытый-открытый ключ клиента.
- Выделяется IP адрес из пула и помечается в базе как выделенный (либо храним базу адресов, либо просто инкрементируемое поле с последним использованным адресом).
- Эти данные сохраняются в базу, пользователю показывается, что в список конфигураций добавилась новая.
- Закрытый ключ клиента и настройки IP-адреса сохраняются в базе для дальнейшего использования на VPN-сервере.
- VPN-сервер уведомляется об изменении конфигурации и экспортирует конфиг себе (либо делает это по крону раз в 10 минут).
- По нажатию на ссылку "скачать конфигурацию" генерируется клиентский конфиг, содержащий: открытый ключ сервера, закрытый ключ клиента, адрес сервера, настройки IP маршрутизации, keepalive.
- Пользователь скачивает конфиг, устанавливает его и запускает VPN.
VPN-сервер:
По крону обновляет конфигурацию клиентов с сайта. При этом сайт отдаёт конфиги только активных юзеров. Сервер синхронизирует локальную базу с базой сайта, добавляя-удаляя-редактируя записи у себя.
Открытые вопросы для обсуждения:
-
разрешать ли default route (доступ в интернет через ХС) или только доступ в сеть ХС? Если да, то опционально (галочка в свойствах конфигурации) или по дефолту?
-
можно ли с WG сделать, чтобы работал mDNS/Bonjour (доступ по именам устройств вида freddy.local)?
Ответ: Можно, но нужно ставить mdns рефлектор на VPN сервере. В теории возможна маршрутизация multicast пакетов, но на практике сложна в настройке (нужна корректировка TTL и всё такое). -
можно ли WG интерфейс сервера объединить в мост с ETH-интерфейсом, смотрящим в сеть ХС, и раздать клиентам IP из той же подсети, что и внутри ХС? И надо ли? Тогда не надо настраивать ничего на маршрутизаторе, зато усложняет настройку VPN-сервера. Сейчас OpenVPN сервер как раз работает в режиме ethernet-моста, клиент получает IP-адрес от основного DHCP-сервера ХС.
Ответ: Можно использовать методику proxy arp, но на практике не нужно, проще раздать маршруты через DHCP и редиректить пакеты, всё равно пришедшие на default gateway, но адресованные узлам-клиентам WG, на собственно маршрутизаторе.