N2N es una aplicación VPN de capa 2/3 de código abierto. A diferencia de muchos otros programas VPN, N2N puede conectar computadoras ubicadas detrás de un enrutador NAT. Esto ofrece una gran ventaja para conectarse a un entorno de nube sin tener que depender de protocolos especiales como el protocolo ESP (utilizado por ipsec). Para lograr esta conexión, N2N usa un supernodo que puede enrutar la información entre los nodos NAT. Esta conexión VPN se puede utilizar para conectar varias instancias de Vultr entre regiones juntas.
Prerrequisitos
En este ejemplo, utilizaremos tres nodos en varias zonas:
Instalación del software.
Los siguientes comandos se ejecutarán en cada instancia.
Comience instalando build-essential
desde el repositorio y también libssl-dev
, ya que construiremos a partir del código fuente más nuevo.
apt-get install -y build-essential libssl-dev
A continuación, descargue el código fuente de github.
cd /tmp
git clone https://github.com/ntop/n2n.git
Compila todos los binarios.
cd n2n
make
make install
El make install
comando habrá creado los binarios supernode
y edge
en el /usr/sbin
directorio. Termine limpiando los archivos.
rm -rf /tmp/n2n
Instalación - Node Paris
El primer nodo será nuestro llamado supernodo. Este supernodo iniciará el servicio de supernodo que escuchará en el puerto UDP 1200
. Por defecto, la aplicación N2N no crea un archivo de servicio. Entonces tendremos que proporcionar el nuestro.
Cree el archivo de servicio 'n2n_supernode':
nano /etc/systemd/system/n2n_supernode.service
Agregue el siguiente contenido:
[Unit]
Description=n2n supernode
Wants=network-online.target
After=network-online.target
[Service]
ExecStart=/usr/sbin/supernode -l 1200
[Install]
WantedBy=multi-user.target
La directiva '-l' define el puerto UDP 1200
. Este es el puerto en el que escuchará el supernodo. Para asegurarse de que todo funciona, inicie el servicio de supernodo:
systemctl start n2n_supernode
Verifique el estado del supernodo.
systemctl status n2n_supernode
Esto mostrará un estado similar al siguiente.
● n2n_supernode.service - n2n supernode
Loaded: loaded (/etc/systemd/system/n2n_supernode.service; disabled; vendor prese
Active: active (running) since Wed 2018-08-15 17:07:46 UTC; 5s ago
Main PID: 4711 (supernode)
Tasks: 1
Memory: 80.0K
CPU: 1ms
CGroup: /system.slice/n2n_supernode.service
└─4711 /usr/sbin/supernode -l 1200
A continuación crearemos el servicio perimetral. Este servicio de borde reclamará una IP privada para la comunicación entre los otros bordes en otras zonas de Vultr.
Al igual que con el servicio supernodo, también necesitará su propio archivo de servicio.
nano /etc/systemd/system/n2n_edge.service
Agregue el siguiente contenido:
[Unit]
Description=n2n edge
Wants=network-online.target
After=network-online.target n2n_supernode.service
[Service]
ExecStart=/usr/sbin/edge -l localhost:1200 -c Vultr -a 192.168.1.1 -k mypassword -f
[Install]
WantedBy=multi-user.target
En este archivo de servicio definimos las siguientes opciones de línea de comando:
-l localhost:1200
: Esto se conectará a localhost en el puerto UDP 1200
.
-c Vultr
: Esta es la comunidad a la que se unirá Edge. Todos los bordes dentro de la misma comunidad aparecen en la misma LAN (segmento de red de capa 2). Los bordes que no están en la misma comunidad no se comunicarán entre sí.
-a 192.168.1.1
: La IP asignada a esta interfaz. Esta es la dirección IP de LAN virtual N2N que se reclama.
-k mypassword
: La contraseña utilizada para cada borde. Todos los bordes que se comunican deben usar la misma clave y el mismo nombre de comunidad.
-f
: Deshabilita el modo demonio y hace que Edge se ejecute en primer plano. Esto es necesario para el archivo de servicio, de lo contrario systemctl
no se iniciará el servicio.
Para asegurarse de que todo funciona, inicie el servicio.
systemctl start n2n_edge
Luego, consulte el estado del servicio.
systemctl status n2n_edge
La salida será similar a la siguiente.
● n2n_edge.service - n2n edge
Loaded: loaded (/etc/systemd/system/n2n_edge.service; disabled; vendor preset: en
Active: active (running) since Wed 2018-08-15 17:10:46 UTC; 3s ago
Main PID: 4776 (edge)
Tasks: 1
Memory: 396.0K
CPU: 8ms
CGroup: /system.slice/n2n_edge.service
└─4776 /usr/sbin/edge -l localhost:1200 -c Vultr -a 192.168.1.1 -k mypass
Si marcamos 'ifconfig', verá que la edge0
interfaz reclama la IP virtual N2N .
ifconfig
La salida será similar a la siguiente.
edge0 Link encap:Ethernet HWaddr 42:14:55:64:7d:21
inet addr:192.168.1.1 Bcast:192.168.1.255 Mask:255.255.255.0
inet6 addr: fe80::4014:55ff:fe64:7d21/64 Scope:Link
UP BROADCAST RUNNING MULTICAST MTU:1400 Metric:1
RX packets:0 errors:0 dropped:0 overruns:0 frame:0
TX packets:8 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:0 (0.0 B) TX bytes:648 (648.0 B)
Una vez hecho esto, habilite y cree las reglas del firewall. Asegúrese de reemplazar el texto node_miami_ip
y node_sydney_ip
con la IP pública de la instancia de Sydney y Miami. (Los usaremos más adelante).
ufw allow 22/tcp
ufw allow from node_miami_ip to any port 1200
ufw allow from node_sydney_ip to any port 1200
ufw enable
Lo último que debe hacer con este nodo es habilitar ambos servicios en el arranque.
systemctl enable n2n_supernode.service
systemctl enable n2n_edge.service
Instalación - Nodo Miami
El nodo de Miami se conectará al súper nodo que se está ejecutando actualmente en la zona de París. Para lograr esto, solo necesitamos crear un archivo de servicio para la edge
aplicación.
Comience creando un archivo de servicio perimetral.
nano /etc/systemd/system/n2n_edge.service
Agregue el siguiente contenido.
[Unit]
Description=n2n edge
Wants=network-online.target
After=network-online.target
[Service]
ExecStart=/usr/sbin/edge -l node_paris_ip:1200 -c Vultr -a 192.168.1.2 -k mypassword -f
[Install]
WantedBy=multi-user.target
Nota : Reemplace el node_paris_ip
con la IP pública de la instancia que se ejecuta en París
Esto se conectará al nodo en París en el puerto UDP 1200
, se unirá a la comunidad ' Vultr
', reclamará IP 192.168.1.2
y se autenticará con ' mypassword
'.
A continuación, inicie el servicio.
systemctl start n2n_edge
Verifique el estado para ver si el servicio se inició correctamente y se está ejecutando.
systemctl status n2n_edge
Luego, asegúrese de edge0
reclamar la IP.
ifconfig
Mostrará la 192.168.1.2
dirección IP.
edge0 Link encap:Ethernet HWaddr 42:14:55:64:7d:21
inet addr:192.168.1.2 Bcast:192.168.1.255 Mask:255.255.255.0
inet6 addr: fe80::4014:55ff:fe64:7d21/64 Scope:Link
UP BROADCAST RUNNING MULTICAST MTU:1400 Metric:1
RX packets:0 errors:0 dropped:0 overruns:0 frame:0
TX packets:8 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:0 (0.0 B) TX bytes:648 (648.0 B)
Lo siguiente que debe hacer es habilitar el servicio en el arranque.
systemctl enable n2n_edge.service
Opcionalmente, habilite el firewall y agregue las reglas SSH.
ufw allow 22/tcp
ufw enable
Ahora podremos hacer ping a ambos bordes que se ejecutan en nuestras instancias.
En París, haga ping a la instancia de Vultr en Miami
ping 192.168.1.2
En Miami, haz ping en el borde en París
ping 192.168.1.1
Instalación - Nodo Sydney
Finalmente, agregaremos nuestro último continente a la mezcla: Australia. Comience nuevamente creando un servicio perimetral, este servicio perimetral también se conectará al supernodo configurado previamente en París.
nano /etc/systemd/system/n2n_edge.service
Agregue el siguiente contenido.
[Unit]
Description=n2n edge
Wants=network-online.target
After=network-online.target
[Service]
ExecStart=/usr/sbin/edge -l node_paris_ip:1200 -c Vultr -a 192.168.1.3 -k mypassword -f
[Install]
WantedBy=multi-user.target
Nota : Reemplace el node_paris_ip
con la IP pública de la instancia que se ejecuta en París.
Esto se conectará al nodo en París en el puerto UDP 1200
, se unirá a la comunidad ' Vultr
', reclamará IP 192.168.1.3
y se autenticará con ' mypassword
'.
systemctl start n2n_edge
Verifique el estado para asegurarse de que se inicia el servicio.
systemctl status n2n_edge
Asegúrese de edge0
reclamar la IP.
edge0 Link encap:Ethernet HWaddr 46:56:b0:e9:8f:8a
inet addr:192.168.1.3 Bcast:192.168.1.255 Mask:255.255.255.0
inet6 addr: fe80::4456:b0ff:fee9:8f8a/64 Scope:Link
UP BROADCAST RUNNING MULTICAST MTU:1400 Metric:1
RX packets:0 errors:0 dropped:0 overruns:0 frame:0
TX packets:8 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:0 (0.0 B) TX bytes:648 (648.0 B)
Nuevamente, habilite este servicio en el arranque.
systemctl enable n2n_edge.service
Opcionalmente, habilite el firewall y agregue las reglas SSH.
ufw allow 22/tcp
ufw enable
Ahora podremos hacer ping a cada instancia de Vultr desde cada nodo.
ping 192.168.1.1
ping 192.168.1.2
ping 192.168.1.3
Si desea probar la conexión entre cada borde de nodo, active las reglas de firewall en las instancias de Miami y París. Esto permitirá la comunicación entre bordes.
En Miami, agregue las siguientes reglas. (Asegúrese de reemplazar el texto node_paris_ip
y node_sydney_ip
con las IP públicas de las instancias de Sydney y París).
ufw allow from node_paris_ip to any port 1200
ufw allow from node_sydney_ip to any port 1200
En Sydney, agregue las siguientes reglas.
ufw allow from node_paris_ip to any port 1200
ufw allow from node_miami_ip to any port 1200
Ahora puede apagar o reiniciar el supernodo. Las conexiones de red continuarán existiendo. Solo los nuevos bordes sufrirán problemas de conectividad mientras el servicio de supernodo esté inactivo.
Conclusión
Hemos configurado con éxito una conexión VPN entre múltiples zonas. Esto debería ofrecer muchas posibilidades nuevas para escenarios de alta disponibilidad en nuestro entorno recién configurado.