От 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И каждая такая схема означала ещё немного конфигурации.
Создать домен.
Настроить DNS.
Добавить upstream.
Проверить routing.
Получить TLS-сертификат.
Настроить его обновление.
Проверить, что после обновления ничего не сломалось.
В NetBird значительную часть этого можно сделать непосредственно через Reverse Proxy.
Указываешь внутренний сервис, который доступен через NetBird, создаёшь endpoint — и получаешь проксирование с TLS без необходимости собирать вокруг каждого проекта отдельную конструкцию из Nginx, HAProxy и сертификатов.
Причём поверх сервиса можно добавить авторизацию.
Например:
- пароль;
- PIN-код;
- SSO;
- ограничения доступа.
И это настраивается на уровне конкретного опубликованного сервиса.
Для каких-нибудь внутренних dashboard'ов, development-инструментов и административных панелей это очень удобно.
Три часа вместо трёх часов на один проект
Самое показательное для меня — время миграции.
Примерно за три часа я перенёс на NetBird практически все свои проекты. И это с учётом того, что параллельно я разбирался с самим NetBird и его моделью сети.
Для сравнения: раньше примерно столько же времени вполне могло уйти на один проект.
Особенно если приложение находилось не непосредственно на машине с OpenVPN, а где-нибудь внутри LXC или VM домашнего сервера.
Что мне понравилось больше всего
Если свести впечатления к нескольким пунктам, то это:
- Подключение новых устройств.
Намного проще, чем вручную управлять OpenVPN-конфигурациями. - Mesh-сеть.
Не нужно строить всё вокруг одного центрального VPN-сервера как единственной точки прохождения трафика. - Web Dashboard.
Наконец можно открыть страницу и сразу увидеть состояние сети. - Network Routes.
Можно дать доступ к целой LAN через один NetBird peer. - DNS Zones.
Удобное именование внутренних сервисов без отдельного велосипеда. - Reverse Proxy.
Оказалось, что значительная часть моей конфигурации Nginx и HAProxy мне теперь просто не нужна. - Автоматический TLS.
Ещё одна инфраструктурная задача, которую больше не хочется решать вручную для каждого проекта. - Авторизация опубликованных сервисов.
Пароль, PIN, SSO и другие ограничения можно навесить непосредственно на сервис.
Ляпота
Точнее описания и не придумать. Я ожидал увидеть ещё одну реализацию mesh VPN, А получил инструмент, который в моей инфраструктуре заменил или сильно упростил сразу несколько слоёв.
Не смею утверждаю, что NetBird — это универсальная замена всему этому для любой инфраструктуры.
Если у вас сложная production-сеть, специфичная маршрутизация или уже построенная автоматизированная инфраструктура вокруг WireGuard/OpenVPN, переход может вообще не иметь смысла.
Но для homelab, частной инфраструктуры, небольших серверных сетей и доступа к внутренним сервисам мне пока нравится очень сильно. Я буквально за вечер удалил значительное количество конфигурации, которую до этого годами постепенно наращивал вокруг OpenVPN.
У меня после настройки возник вопрос:
А зачем я всё это настраивал раньше вручную?...