Установка 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.
No comments to display
No comments to display