Skip to main content

Установка Nebula 1.10.3 на Ubuntu

Nebula — оверлейная mesh-VPN от Slack с собственным CA и P2P-соединениями через lighthouse-узлы.

Порядок важен. Сертификаты выпускаются один раз на CA-хосте и раздаются вручную на каждый узел. Установка бинарника и systemd-юнита одинакова что для lighthouse, что для обычного узла — разница только в config.yml.


1. Каталоги

sudo mkdir -p /etc/nebula

Бинарник будет лежать в /usr/local/bin, конфиг и сертификаты — в /etc/nebula.


2. Скачивание бинарников (v1.10.3)

curl -LO https://github.com/slackhq/nebula/releases/download/v1.10.3/nebula-linux-amd64.tar.gz

Распаковка и установка:

sudo tar -xzf nebula-linux-amd64.tar.gz -C /usr/local/bin nebula nebula-cert && sudo chmod +x /usr/local/bin/nebula /usr/local/bin/nebula-cert && rm nebula-linux-amd64.tar.gz

Проверка версии:

nebula -version

Ожидается что-то вроде Version: 1.10.3.

Для ARM-серверов (например, Oracle Ampere) вместо linux-amd64 берите linux-arm64 — архитектуру проверяйте через uname -m.


3. Сертификаты

На CA-хосте (выполняется один раз для всей сети)

Если CA ещё не создан:

sudo nebula-cert ca -name "Ваша Организация"

Создаст ca.crt и ca.key в текущей директории. ca.key не копируется на узлы — он остаётся только там, где будут выпускаться новые сертификаты.

Выпуск сертификата под конкретный узел (пример для lighthouse с IP 192.168.100.1 во внутренней nebula-сети /24):

sudo nebula-cert sign -name "lighthouse1" -ip "192.168.100.1/24"

Для обычного узла — аналогично, со своим именем и IP из той же подсети:

sudo nebula-cert sign -name "node1" -ip "192.168.100.2/24"

На каждом узле

Копируем на сервер (через scp с локальной машины или из CA-хоста) три файла в /etc/nebula:

  • ca.crt
  • <имя_узла>.crt
  • <имя_узла>.key
sudo mv ca.crt node1.crt node1.key /etc/nebula/ && sudo chmod 600 /etc/nebula/*.key

4. Конфигурация

Берём образец конфига из репозитория как основу:

curl -Lo /tmp/config.yml https://raw.githubusercontent.com/slackhq/nebula/v1.10.3/examples/config.yml
sudo cp /tmp/config.yml /etc/nebula/config.yml && sudo nano /etc/nebula/config.yml

Ключевые параметры, которые нужно поправить:

pki:
  ca: /etc/nebula/ca.crt
  cert: /etc/nebula/node1.crt
  key: /etc/nebula/node1.key

static_host_map:
  "192.168.100.1": ["ПУБЛИЧНЫЙ_IP_LIGHTHOUSE:4242"]

lighthouse:
  am_lighthouse: false      # true только на самом lighthouse
  hosts:
    - "192.168.100.1"

listen:
  host: 0.0.0.0
  port: 4242

На самом lighthouse-узле: am_lighthouse: true, а lighthouse.hosts оставляем пустым (он сам себе lighthouse).


5. Файрвол

Lighthouse должен принимать UDP на порту nebula (по умолчанию 4242) из интернета:

sudo ufw allow 4242/udp

На обычных узлах отдельно открывать этот порт снаружи не обязательно, если исходящий трафик уже разрешён — соединение инициируется изнутри mesh-сети.


6. systemd-юнит

curl -Lo /tmp/nebula.service https://raw.githubusercontent.com/slackhq/nebula/v1.10.3/examples/service_scripts/nebula.service
sudo cp /tmp/nebula.service /etc/systemd/system/nebula.service

Проверяем, что пути в юните совпадают с реальными (ExecStart=/usr/local/bin/nebula -config /etc/nebula/config.yml):

cat /etc/systemd/system/nebula.service

В типовом юните нет ожидания сети при загрузке — при использовании FQDN в static_host_map возможны обрывы после ребута, если DNS ещё не поднялся. Если lighthouse указан по IP (как в примере выше), проблема не актуальна.

Запуск:

sudo systemctl daemon-reload && sudo systemctl enable --now nebula

7. Проверка

Статус сервиса:

sudo systemctl status nebula

Появился ли туннельный интерфейс (обычно nebula1):

ip addr show nebula1

Пинг lighthouse по внутреннему nebula-адресу:

ping -c 3 192.168.100.1

Логи в реальном времени, если что-то не так:

sudo journalctl -u nebula -f

Замечания

  • ca.key храните отдельно от серверов сети — компрометация этого файла позволяет выпускать сертификаты для входа в mesh под видом любого узла.
  • Сертификаты имеют срок действия (по умолчанию у nebula-cert sign — 1 год); истечение приводит к тихому разрыву соединения без явной ошибки в логах на стороне соединяющегося узла — стоит следить за sudo nebula-cert print -path /etc/nebula/node1.crt на предмет details.notAfter.
  • Полный список опций конфига и changelog версии — в релизах на GitHub.