Wireguard для Kubernetes и удобные GUI

og1axt79nanekjhdy_2yw3c3xii.png


Can I just once again state my love for [WireGuard] and hope it gets merged soon? Maybe the code isn’t perfect, but I’ve skimmed it, and compared to the horrors that are OpenVPN and IPSec, it’s a work of art.

Linus Torvalds, on the Linux Kernel Mailing List


Уверен, что многие уже слышали про Wireguard. Некоторые даже щупали вживую. Мне он вполне понравился в продакшене как по производительности, так и по простоте настройки. Да, там нет миллиона загадочных конфигураций на все случаи жизни как у OpenVPN и XFRM+StrongSwan в IPSEC VPN. Он прост и лаконичен как в коде, так и в конфигах. Жирным и неповоротливым он станет еще нескоро. Короче, такой позитивный вариант сценария «сжечь легаси и написать все как надо».

Я решил не писать очередной гайд «как я поставил Wireguard», а поделиться некоторыми полезными утилитами. Некоторые с очень удачным, на мой вкус GUI, что уместно для сервисов со множеством пользователей. Разберем использование этого VPN для связи между нодами в разных кластерах Kubernetes, несколько web-GUI для генерации и пару полезных ресурсов.

Зачем он вообще нужен?


Ключевой вопрос. Одна из самых крутых его фишек — он очень производительный. В большинстве кейсов меньше задержки и выше пропускная способность при равной загрузке CPU. Если вы платите за потраченные ресурсы или планируете аренду виртуальных машин с учетом пиковых нагрузок, то этот тип VPN еще и сэкономит вам деньги. Объяснять, чем плохо гонять трафик по открытым сетям между отдельными нодами, я думаю не надо.

9-k9_nceklb6ldpewwobfkl5als.png
Источник: www.wireguard.com/performance

Причем стоит обратить внимание на то, что он был включен в состав ядра начиная с Linux 5.6, а с весны этого года он также включен в состав основной ветки ядра Android, что дает нам отличную энергоэффективность на мобильниках. Хотя, надо сказать, что он и до этого не особо напрягал батарею телефона.

Kilo — wireguard для Kubernetes


Очень часто у компаний крупнее среднего возникают ситуации, когда необходимо использовать несколько разных облаков. Причины разные — отказоустойчивость, хорошее присутствие в регионе и низкие пинги. Иногда цены на конкретные продукты. Например, вы можете крутить фронтенд и основную логику на собственных серверах, а GPU-hungry задачи выносить на AWS-инстансы.

Как это работает? Kilo требует наличия wireguard kernel-модуля на всех нодах. Если вы используете ядра новее 5.6, то модуль будет уже в основной ветке и допиливать ничего не придется. Далее, kilo agent, «kg», запускается на каждой ноде кластера, настраивая приватные и публичные ключи для организации VPN. Также автоматически настраиваются правила маршрутизации трафика между отдельными регионами. Также kilo может работать совместно с другими сетевыми решениями для кластеров, например с Flannel. При этом kilo будет обеспечивать связь между регионами, а Flannel позаботится о трафике внутри одной локации.
При построении сетевой топологии он опирается на topology.kubernetes.io/region, но можно разметить регионы и вручную.

Требования:

  • Ядро новее 5.6 или отдельный модуль wireguard
  • Белые IP у нод, для организации прямого коннекта между ними.


Более подробная информация есть в прошлогоднем выступлении разработчиков на Kubernetes Forums в Сеуле и в документации.

wg-gen-web


image
Что называется, «yet another config generator». Но очень приятный в работе. Основное отличие в подходе — автор не пытается на лету править конфигурацию работающего сервиса, а лишь предоставляет удобный GUI для генерации правил. Дальше вы сами имплементируете обновление конфигов на свой вкус.

Ключевые фичи — генерирует удобные QR-коды для мобильных клиентов и отправляет на почту клиенту все необходимые данные для подключения. Ну и докеризирован, само собой. Репозиторий тут.

Деплой довольно прост:

docker run --rm -it -v /tmp/wireguard:/data -p 8080:8080 -e "WG_CONF_DIR=/data" vx3r/wg-gen-web:latest


Subspace


hesyvvfzg-vgwrz0sepabfcskbe.png
Еще один GUI для удобной работы с множеством клиентских устройств.
Основные фичи:

  1. Single Sign-On с использованием SAML. Можно заходить под Google учеткой.
  2. Добавление и удаление устройств в несколько кликов
  3. Генерация индивидуальных конфигов для каждого устройства. Ну и QR-код, конечно.
  4. HTTPS от Let’s Encrypt из коробки и автоматический редирект на 443 порт


Легко деплоится на VPS. У нас, кстати, они есть. Можем отсыпать)
На сервере должен быть установлен wireguard и открыты порты: 80/tcp, 443/tcp, 51820/udp (WireGuard). При этом надо удалить штатный dnsmasq, так как он будет запущен в контейнере.
Дальше все довольно типично, только --env SUBSPACE_HTTP_HOST заменить на свой домен:

# Your data directory should be bind-mounted as `/data` inside the container using the `--volume` flag.
$ mkdir /data

docker create \
    --name subspace \
    --restart always \
    --network host \
    --cap-add NET_ADMIN \
    --volume /usr/bin/wg:/usr/bin/wg \
    --volume /data:/data \
    --env SUBSPACE_HTTP_HOST=subspace.example.com \
    subspacecloud/subspace:latest

$ sudo docker start subspace


Репозиторий тут.

Вместо выводов


Если вы еще не пробовали этот VPN — настоятельно рекомендую. Часто он способен оживить не очень мощное железо, которое не справлялось под нагрузкой ранее. А еще он не очень сложен в конфигурации. Правда, его основная задача все же пробивание прямых, заранее настроенных туннелей. Всякие динамические конфигурации ему недоступны в привычном понимании. Своеобразная плата за простоту и производительность.
Кстати, если вы еще не в курсе, то wireguard уже включен в бета-версию RouterOS 7.1 от MikroTik. Попробовать можно уже сейчас, но, по моим ощущениям, оно еще сыровато.

-nhf-jkfg02uqfocizx6as-uvtw.png
Ну и традиционно могу пригласить попробовать задеплоить wireguard на наших VPS. Например, чтобы заворачивать часть трафика домашней сети в Швейцарию или Нидерланды. У нас много разных локаций и ценовая политика весьма приятная для подобных задач.

Как я уже говорил, Wireguard очень экономно потребляет ресурсы, поэтому более чем достаточно будет минимальной конфигурации с 1 ядром и 1 ГБ оперативной памяти для поддержки большого количества клиентов. Цены тоже получаются довольно гуманные:

8xzqbhb0at3_pjylb5c4366w_t8.png

oug5kh6sjydt9llengsiebnp40w.png

© Habrahabr.ru