От OpenVPN к NetBird: как я за пару часов упростил всю свою частную сеть

Как я за три часа перевёл свою частную инфраструктуру с OpenVPN, Nginx и HAProxy на NetBird и получил mesh VPN, маршрутизацию, DNS, Reverse Proxy, TLS и управление доступом в одном месте.

До вчерашнего дня практически вся моя частная сеть была построена вокруг OpenVPN.

Сам по себе OpenVPN меня вполне устраивал: технология проверенная, предсказуемая и даёт полный контроль над сетью. Проблема начиналась не в VPN как таковом, а во всей инфраструктуре, которая постепенно вырастала вокруг него.

Для доступа к сервисам использовалась примерно такая цепочка:

OpenVPN -> маршрутизация -> HAProxy / Nginx -> нужная VM или LXC -> приложение/сервис.

Где-то требовалось отдельное проксирование, где-то — дополнительный маршрут, где-то — TLS-сертификат. Для нового устройства нужно было создать и передать конфигурацию OpenVPN по SMTP. Для нового сервиса — понять, через какую прокси-прослойку его лучше вывести, настроить upstream, домен, сертификат и доступ.

Конфигурации становились всё больше, а количество мест, в которых можно было что-нибудь забыть, росло вместе с инфраструктурой.

Мониторинг тоже был соответствующий: SSH и что-нибудь в духе:

watch -n 1 ...

Работает? Работает. Красиво? Вряд ли

А потом я попробовал NetBird

Про NetBird я знал и раньше, но долгое время не видел особого смысла его пробовать. Mesh VPN — далеко не новая идея. Есть Twingate, Netmaker и другие решения, поэтому первоначальная реакция была примерно такой:

Ну да, ещё одна mesh VPN. Зачем мне менять уже работающую инфраструктуру?

Тем более я обычно довольно скептически отношусь к решениям, которые обещают спрятать сложную сетевую инфраструктуру за красивым веб-интерфейсом. Пока всё работает — это действительно удобно. Когда что-то ломается — иногда внезапно оказывается, что старый добрый конфиг на несколько сотен строк был не таким уж плохим вариантом.

Но всё же решил дать шанс NetBird и, в итоге, всё развернул. И довольно быстро понял, что здесь речь уже не просто про замену OpenVPN.

Не просто VPN

Самое важное отличие для меня оказалось в том, что NetBird закрывает сразу несколько задач, для которых раньше у меня существовали отдельные компоненты инфраструктуры.

Во-первых, подключение новых серверов.

Вместо ручной работы с OpenVPN-конфигурациями я получаю нормальный механизм добавления peers. Подключил машину — она появилась в сети и сразу видна в dashboard.

Во-вторых, ролевая система.

Не нужно в конфигах писать хитроумные строки для ограничения доступа конкретном юзеру. Можно просто создать юзера с гостевым доступом и легко выдать доступ к конкретной группе peer'ов.

 

Всё это довольно логично видеть в веб-интерфейсе, и пока что мысль о скептицизме, описанном выше, присутствует. Но вещи, описанные ниже, полностью его нейтрализовали. 

Маршрутизация в LAN

Одна из особенно полезных для меня возможностей — routing peers. 

Не обязательно устанавливать NetBird на каждую виртуальную машину, контейнер или физическое устройство. Можно поставить NetBird на одну машину внутри сети и использовать её как gateway до нужной подсети.

Условно, если дома есть сеть:

192.168.1.0/24

то один NetBird peer может маршрутизировать трафик остальных участников mesh-сети в эту LAN.

Для моей инфраструктуры это особенно удобно, потому что значительная часть сервисов живёт внутри VM и LXC на домашнем сервере.

Раньше доступ до них означал ручную настройку маршрутов и прокси. Теперь это становится частью конфигурации самой overlay-сети.

DNS внутри сети

Туда же отлично вписываются DNS-зоны.

Вместо необходимости помнить:

192.168.x.x

или:

100.x.x.x

можно нормально именовать внутренние сервисы и управлять DNS централизованно.

Для маленькой сети это необязательная возможность. Когда количество VM, контейнеров, серверов и внутренних сервисов начинает измеряться десятками — уже совсем другое дело.

Reverse Proxy

Но окончательно меня добил встроенный Reverse Proxy.

Раньше публикация очередного сервиса для меня выглядела примерно так:

Internet
   ↓
Nginx / HAProxy
   ↓
TLS termination
   ↓
VPN / routing
   ↓
VM / LXC
   ↓
Application

И каждая такая схема означала ещё немного конфигурации.

  1. Создать домен.

  2. Настроить DNS.

  3. Добавить upstream.

  4. Проверить routing.

  5. Получить TLS-сертификат.

  6. Настроить его обновление.

  7. Проверить, что после обновления ничего не сломалось.

В NetBird значительную часть этого можно сделать непосредственно через Reverse Proxy.

Указываешь внутренний сервис, который доступен через NetBird, создаёшь endpoint — и получаешь проксирование с TLS без необходимости собирать вокруг каждого проекта отдельную конструкцию из Nginx, HAProxy и сертификатов.

Причём поверх сервиса можно добавить авторизацию.

Например:

  • пароль;
  • PIN-код;
  • SSO;
  • ограничения доступа.

И это настраивается на уровне конкретного опубликованного сервиса.

Для каких-нибудь внутренних dashboard'ов, development-инструментов и административных панелей это очень удобно.

Три часа вместо трёх часов на один проект

Самое показательное для меня — время миграции.

Примерно за три часа я перенёс на NetBird практически все свои проекты. И это с учётом того, что параллельно я разбирался с самим NetBird и его моделью сети.

Для сравнения: раньше примерно столько же времени вполне могло уйти на один проект.

Особенно если приложение находилось не непосредственно на машине с OpenVPN, а где-нибудь внутри LXC или VM домашнего сервера.

Что мне понравилось больше всего

Если свести впечатления к нескольким пунктам, то это:

  1. Подключение новых устройств.
    Намного проще, чем вручную управлять OpenVPN-конфигурациями.
  2. Mesh-сеть.
    Не нужно строить всё вокруг одного центрального VPN-сервера как единственной точки прохождения трафика.
  3. Web Dashboard.
    Наконец можно открыть страницу и сразу увидеть состояние сети.
  4. Network Routes.
    Можно дать доступ к целой LAN через один NetBird peer.
  5. DNS Zones.
    Удобное именование внутренних сервисов без отдельного велосипеда.
  6. Reverse Proxy.
    Оказалось, что значительная часть моей конфигурации Nginx и HAProxy мне теперь просто не нужна.
  7. Автоматический TLS.
    Ещё одна инфраструктурная задача, которую больше не хочется решать вручную для каждого проекта.
  8. Авторизация опубликованных сервисов.
    Пароль, PIN, SSO и другие ограничения можно навесить непосредственно на сервис.

Ляпота

Точнее описания и не придумать. Я ожидал увидеть ещё одну реализацию mesh VPN, А получил инструмент, который в моей инфраструктуре заменил или сильно упростил сразу несколько слоёв.

Не смею утверждаю, что NetBird — это универсальная замена всему этому для любой инфраструктуры. 

Если у вас сложная production-сеть, специфичная маршрутизация или уже построенная автоматизированная инфраструктура вокруг WireGuard/OpenVPN, переход может вообще не иметь смысла.

Но для homelab, частной инфраструктуры, небольших серверных сетей и доступа к внутренним сервисам мне пока нравится очень сильно. Я буквально за вечер удалил значительное количество конфигурации, которую до этого годами постепенно наращивал вокруг OpenVPN.

У меня после настройки возник вопрос:

А зачем я всё это настраивал раньше вручную?...