Instalación de Red Overlay Nebula
Nebula es una herramienta de red overlay mesh desarrollada por Slack que permite crear redes privadas seguras entre múltiples nodos usando certificados X.509 y firewall basado en grupos. A diferencia de otras soluciones VPN, Nebula no requiere servidor central continuo gracias a sus nodos lighthouse que solo actúan como facilitadores de descubrimiento. Esta guía cubre la instalación completa de Nebula en Linux para conectar servidores VPS y baremetal.
Requisitos Previos
- Mínimo 2 servidores Linux (uno como lighthouse con IP pública)
- Ubuntu 20.04+, Debian 11+, CentOS 8+ o Rocky Linux 8+
- Acceso root o sudo en todos los nodos
- Puerto UDP 4242 abierto en el firewall del lighthouse
- Kernel Linux 3.13+ (para soporte TUN/TAP)
Descarga e Instalación de Nebula
Descargar los binarios desde GitHub Releases:
# Descargar la última versión de Nebula (ajustar la versión según corresponda)
NEBULA_VERSION="v1.9.0"
wget https://github.com/slackhq/nebula/releases/download/${NEBULA_VERSION}/nebula-linux-amd64.tar.gz
# Extraer los binarios
tar xzf nebula-linux-amd64.tar.gz
# Mover los binarios al PATH del sistema
sudo mv nebula nebula-cert /usr/local/bin/
# Verificar la instalación
nebula --version
nebula-cert --version
Para arquitectura ARM (Raspberry Pi, servidores ARM):
# Descargar versión ARM64
wget https://github.com/slackhq/nebula/releases/download/${NEBULA_VERSION}/nebula-linux-arm64.tar.gz
tar xzf nebula-linux-arm64.tar.gz
sudo mv nebula nebula-cert /usr/local/bin/
Crear los directorios de configuración:
# Crear directorio de configuración (solo en el servidor que actuará de CA)
sudo mkdir -p /etc/nebula
Configuración de la Autoridad de Certificación
La CA de Nebula es un par de archivos (clave + certificado) que firma todos los certificados de nodos. Guardar estos archivos de forma segura.
# Crear el directorio para la CA (en una máquina segura, no en el lighthouse)
mkdir -p ~/nebula-ca
cd ~/nebula-ca
# Generar la clave y certificado de la CA
nebula-cert ca --name "MiEmpresa Nebula CA"
# Los archivos generados son:
# ca.crt - Certificado público de la CA (distribuir a todos los nodos)
# ca.key - Clave privada de la CA (¡NUNCA distribuir!)
ls -la ca.*
Opciones adicionales para la CA:
# CA con duración personalizada (por defecto 1 año)
nebula-cert ca --name "MiEmpresa Nebula CA" --duration 87600h # 10 años
# Verificar el certificado de la CA
nebula-cert print --path ca.crt
Generación de Certificados para Nodos
Generar un certificado por cada nodo de la red. La IP asignada determina la dirección del nodo en la red overlay Nebula.
# Planificar el espacio de direcciones (ejemplo: 10.42.0.0/16)
# Lighthouse: 10.42.0.1/16
# Servidor web: 10.42.0.2/16
# Base de datos: 10.42.0.3/16
# Generar certificado para el lighthouse
nebula-cert sign \
--name "lighthouse01" \
--ip "10.42.0.1/16" \
--groups "lighthouse,servidores" \
--ca-crt ca.crt \
--ca-key ca.key
# Generar certificado para un servidor web
nebula-cert sign \
--name "web01" \
--ip "10.42.0.2/16" \
--groups "web,servidores" \
--ca-crt ca.crt \
--ca-key ca.key
# Generar certificado para un servidor de base de datos
nebula-cert sign \
--name "db01" \
--ip "10.42.0.3/16" \
--groups "database,servidores" \
--ca-crt ca.crt \
--ca-key ca.key
# Verificar un certificado generado
nebula-cert print --path web01.crt
Distribuir los archivos a cada nodo:
# Para el lighthouse (copiar vía scp)
scp ca.crt lighthouse01.crt lighthouse01.key usuario@IP-LIGHTHOUSE:/etc/nebula/
# Para el servidor web
scp ca.crt web01.crt web01.key usuario@IP-WEB01:/etc/nebula/
# Asegurar permisos correctos en cada nodo
sudo chmod 600 /etc/nebula/*.key
sudo chmod 644 /etc/nebula/*.crt
Configuración del Lighthouse
El lighthouse es el nodo de descubrimiento con IP pública. Crear su archivo de configuración:
sudo nano /etc/nebula/config.yaml
# Configuración del Lighthouse Nebula
pki:
ca: /etc/nebula/ca.crt
cert: /etc/nebula/lighthouse01.crt
key: /etc/nebula/lighthouse01.key
# Configuración del lighthouse
lighthouse:
am_lighthouse: true
interval: 60
# Escuchar en todas las interfaces en el puerto UDP 4242
listen:
host: 0.0.0.0
port: 4242
# Interfaz tunnel
tun:
disabled: false
dev: nebula1
drop_local_broadcast: false
drop_multicast: false
tx_queue: 500
mtu: 1300
# Registro de logs
logging:
level: info
format: text
# Firewall del lighthouse - permitir solo ICMP y Nebula
firewall:
conntrack:
tcp_timeout: 12m
udp_timeout: 3m
default_timeout: 10m
outbound:
- port: any
proto: any
host: any
inbound:
- port: any
proto: icmp
host: any
- port: any
proto: any
group: servidores
Configuración de Nodos Regulares
Configuración para los nodos que se conectan al lighthouse:
sudo nano /etc/nebula/config.yaml
# Configuración de nodo regular Nebula
pki:
ca: /etc/nebula/ca.crt
cert: /etc/nebula/web01.crt
key: /etc/nebula/web01.key
# Definir el lighthouse (usar IP pública real)
lighthouse:
am_lighthouse: false
interval: 60
hosts:
- "10.42.0.1" # IP Nebula del lighthouse
# Mapa estático para el lighthouse (IP pública:puerto)
static_host_map:
"10.42.0.1": ["IP-PUBLICA-LIGHTHOUSE:4242"]
# Escuchar en un puerto aleatorio (0 = automático)
listen:
host: 0.0.0.0
port: 0
# Opciones de tunelado
tun:
disabled: false
dev: nebula1
drop_local_broadcast: false
drop_multicast: false
tx_queue: 500
mtu: 1300
# Punch through NAT
punchy:
punch: true
respond: true
# Logging
logging:
level: info
format: text
# Reglas de firewall del nodo
firewall:
conntrack:
tcp_timeout: 12m
udp_timeout: 3m
default_timeout: 10m
outbound:
- port: any
proto: any
host: any
inbound:
- port: any
proto: icmp
host: any
- port: 22
proto: tcp
group: servidores
- port: 80
proto: tcp
group: servidores
- port: 443
proto: tcp
group: servidores
Reglas de Firewall en Nebula
El firewall de Nebula opera por grupos y hosts. Los grupos se definen en los certificados:
# Ejemplos de reglas de firewall avanzadas en config.yaml
firewall:
inbound:
# Permitir ICMP desde cualquier nodo Nebula
- port: any
proto: icmp
host: any
# Permitir SSH solo desde el grupo "admin"
- port: 22
proto: tcp
group: admin
# Permitir acceso web desde cualquier nodo de la red
- port: 80
proto: tcp
cidr: 10.42.0.0/16
- port: 443
proto: tcp
cidr: 10.42.0.0/16
# Permitir acceso a la base de datos solo desde servidores web
- port: 5432
proto: tcp
group: web
# Permitir cualquier tráfico desde un nodo específico
- port: any
proto: any
host: "10.42.0.5"
Configuración como Servicio Systemd
Configurar Nebula para que inicie automáticamente:
# Crear el archivo de servicio systemd
sudo tee /etc/systemd/system/nebula.service << 'EOF'
[Unit]
Description=Nebula overlay networking tool
Wants=basic.target network-online.target nss-lookup.target time-sync.target
After=basic.target network.target network-online.target
[Service]
SyslogIdentifier=nebula
StandardOutput=syslog
StandardError=syslog
ExecReload=/bin/kill -HUP $MAINPID
ExecStart=/usr/local/bin/nebula -config /etc/nebula/config.yaml
Restart=always
TimeoutStopSec=5
[Install]
WantedBy=multi-user.target
EOF
# Recargar systemd y habilitar el servicio
sudo systemctl daemon-reload
sudo systemctl enable nebula
sudo systemctl start nebula
# Verificar el estado
sudo systemctl status nebula
Verificar la conectividad entre nodos:
# Ping entre nodos usando las IPs de Nebula
ping 10.42.0.1 # Lighthouse
ping 10.42.0.3 # Base de datos
# Ver la interfaz nebula1
ip addr show nebula1
# Ver rutas de Nebula
ip route | grep nebula
Solución de Problemas
El nodo no conecta con el lighthouse:
# Verificar logs en tiempo real
sudo journalctl -u nebula -f
# Comprobar que el puerto UDP está abierto en el lighthouse
nc -zuv IP-PUBLICA-LIGHTHOUSE 4242
# Verificar el firewall del sistema operativo en el lighthouse
sudo ufw status # Ubuntu
sudo firewall-cmd --list-all # CentOS/Rocky
Certificado inválido o expirado:
# Verificar la validez del certificado
nebula-cert print --path /etc/nebula/web01.crt
# Comprobar que la CA coincide
nebula-cert verify --ca /etc/nebula/ca.crt --crt /etc/nebula/web01.crt
Problemas de conectividad entre peers:
# Activar logging detallado temporalmente
# Editar config.yaml: logging.level: debug
sudo systemctl restart nebula
sudo journalctl -u nebula -f | grep -E "handshake|punch|relay"
Rendimiento de la interfaz:
# Verificar el MTU de la interfaz
ip link show nebula1
# Ajustar MTU si hay fragmentación (reducir a 1250 en config.yaml)
# tun.mtu: 1250
Conclusión
Nebula proporciona una solución de red overlay robusta y segura basada en certificados, ideal para conectar múltiples servidores VPS y baremetal en diferentes proveedores y regiones. Su modelo de seguridad basado en grupos y certificados X.509 lo hace especialmente adecuado para entornos donde se requiere control granular del acceso entre servicios.


