=> https://github.com/slackhq/nebula Nebula en Github
Nebula es una VPN Mesh (en malla), su principal característica y ventaja es que una vez comunicados los nodos, esta es directa entre ellos, aún se requiere un nodo central pero su único trabajo es poner en comunicación los clientes y monitorear que estén en comunicación por lo que los requerimientos para este nodo central son mínimos.
En la terminología de Nebula, a este nodo central se le conoce como "faro" (ligthouse) y es el único que necesita una IP fija.
El "faro solo pone en contacto los clientes" por lo que "NO sabe que se transmite entre ellos" y dado que los certificados se pueden generar en un cliente, el mismo "faro" nunca podrá generar certificados para otros clientes.
Nebula esta hecho en Go por lo que solo se requiere un binario para el faro y los clientes y uno más para generar los certificados. Asegurate de descargar la versión correcta para la arquitectura del servidor y los clientes.
Todo el procedimiento se puede realizar tanto el servidor como en algunos de los clientes, para este ejemplo todo se genera en un cliente y solo se suben los archivos necesarios al servidor.
Una vez descargado, descomprimelo y deberás ver dos archivos:
```
.rwxr-xr-x 17M mau 10 May 20:27 nebula
.rwxr-xr-x 6.6M mau 10 May 20:27 nebula-cert
```
1] Primero generamos los certificados CA (Certificate Authorities)
```
./nebula-cert ca -name "Nebula para Cuates"
```
Ahora debes de tener.
```
.rw------- 255 mau 4 Jun 22:14 ca.crt
.rw------- 174 mau 4 Jun 22:14 ca.key
.rwxr-xr-x 17M mau 10 May 20:27 nebula
.rwxr-xr-x 6.6M mau 10 May 20:27 nebula-cert
```
2] Generamos los certificados para el faro y para los clientes, en este paso debes de decidir que subred vas utilizar, para este ejemplo usaré: 10.10.1.0/24
Cada uno de estos certificados, es firmado por los certificados CA del primer paso. Guarda el ca.key en un lugar seguro después de generar todos los certificados de cliente que necesites.
Ahora debes de tener.
```
.rw------- 255 mau 4 Jun 22:14 ca.crt
.rw------- 174 mau 4 Jun 22:14 ca.key
.rw------- 292 mau 4 Jun 22:26 casa.crt
.rw------- 127 mau 4 Jun 22:26 casa.key
.rw------- 292 mau 4 Jun 22:26 faro.crt
.rw------- 127 mau 4 Jun 22:26 faro.key
.rwxr-xr-x 17M mau 10 May 20:27 nebula
.rwxr-xr-x 6.6M mau 10 May 20:27 nebula-cert
.rw------- 296 mau 4 Jun 22:26 oficina.crt
.rw------- 127 mau 4 Jun 22:26 oficina.key
```
3] Configuración
Nebula utiliza el formato YAML para su archivo de configuración, es muy importante respetar correctamente la sintaxis de este formato.
Primero configuramos el servidor. Sube el archivo "nebula" al servidor o descargalo de nuevo si usa una arquitectura diferente a tu cliente. En el servidor solo requerimos el binario "nebula" por lo que si lo descargas puedes borrar el binario "nebula-cert". También debes subir el "ca.crt" y los certificados del "faro", estos son los archivos que deberás de subir a tu servidor.
```
ca.crt
faro.crt
faro.key
nebula
```
IMPORTANTE: Asegurate de NO subir el archivo ca.key, recuerda, este guárdalo en un lugar privado y seguro.
Puedes ver el archivo de configuración de ejemplo en:
INFO[0000] Firewall started firewallHash=21716b47a7a140e448077fe66c31b4b42f232e996818d7dd1c6c4991e066dbdb
INFO[0000] Main HostMap created network=10.10.1.2/24 preferredRanges="[]"
INFO[0000] UDP hole punching enabled
INFO[0000] Nebula interface is active build=1.4.0 interface=nebula0 network=10.10.1.2/24 udpAddr="0.0.0.0:4252"
```
En una nueva ventana de tu terminal, prueba la conexión con un simple "ping".
```
ping -c 3 10.10.1.1
PING 10.10.1.1 (10.10.1.1) 56(84) bytes of data.
64 bytes from 10.10.1.1: icmp_seq=1 ttl=64 time=150 ms
64 bytes from 10.10.1.1: icmp_seq=2 ttl=64 time=151 ms
64 bytes from 10.10.1.1: icmp_seq=3 ttl=64 time=150 ms
--- 10.10.1.1 ping statistics ---
3 packets transmitted, 3 received, 0% packet loss, time 2002ms
rtt min/avg/max/mdev = 149.650/150.172/150.638/0.405 ms
```
Presiona CTRL+C en cada terminal para terminar la ejecución de nebula.
4] Crear el servicio
Por ultimo, podemos mover los archivos, el binario, los certificados y el archivo de configuración a una mejor ubicación y crear el servicio correspondiente para su fácil control, para este ejemplo movemos todo a "/opt/nebula"