Jaime Lopez
Posted on February 21, 2024
Introducción
n2n
es una aplicación punto a punto que emula una conexión de red local sobre Internet. Eso significa que dos computadoras pueden entre ellas hacer ping y usar cualquier otro servicio de red de área local, aún cuando se encuentren en diferentes redes privadas. Como ejemplo práctico, usted puede conectar desde cualquier lugar su computadora portátil con su computadora en casa mediante una sesión SSH
.
Para establecer la conexión, n2n
requiere de un supernodo que mantiene el registro de los dispositivos conectados en la red virtual, de tal forma que estos se puedan ubicar. Una vez que la conexión ha sido establecida, la comunicación transcurre directamente entre dispositivo y dispositivo, es decir, en un esquema punto a punto. Eventualmente, en caso de que la seguridad de la red privada en la que se encuentra los dispositivos impida la conexión punto a punto, el supernodo también puede intermediar en el transporte de los datos.
Los datos viajan encriptados. Solo los dispositivos que están en cada punto pueden desencriptarlos. Esto garantiza que ningún punto intermedio, ni siquiera el supernodo que ayuda a establecer la conexión, pueda descifrar el contenido de los mensajes. El esquema de seguridad implementado por n2n
es mediante contraseña, que para casos básicos puede ser suficiente.
Como ejemplo, se presenta un escenario con tres computadoras con sistema operativo Linux. Una de ellas está ubicada en una red pública y actuará como supernodo. Las otras dos se encuentran detrás de diferentes redes privadas y actuarán como nodos. n2n
está disponible como paquete instalable en la mayoría de distribuciones GNU/Linux. Se asume que la distribución del ejemplo hace uso de servicios systemd
, como Debian, Ubuntu, CentOS, Rocky Linux y ArchLinux.
Configuración del supernodo
Los archivos de configuración de n2n
están ubicados en /etc/n2n
. La configuración del supernodo está en el archivo supernode.conf
:
-p=37777
-c=community.list
La opción -p
indica el puerto en el cual el supernodo estará escuchando peticiones de los nodos que necesiten conectarse. La opción -c
es opcional e indica la lista de comunidades que podrán establecer conexiones. Una comunidad es la representación de una red de área local virtual identificada mediante un nombre. En este ejemplo, el contenido del archivo community.list
es solo el identificador de una red virtual, k2t9
.
Una vez la configuración está completa, se puede iniciar el servicio, habilitar su carga automática cuando la computadora sea reiniciada, y verificar que el servicio está corriendo correctamente.
supernode $ sudo systemctl start supernode
supernode $ sudo systemctl enable supernode
Created symlink /etc/systemd/system/multi-user.target.wants/supernode.service → /usr/lib/systemd/system/supernode.service.
supernode $ sudo systemctl status supernode
● supernode.service - n2n supernode process
Loaded: loaded (/usr/lib/systemd/system/supernode.service; enabled; preset: disabled)
Active: active (running) since Wed 2024-02-21 15:48:30 UTC; 12s ago
Main PID: 3396157 (supernode)
Tasks: 2 (limit: 1139)
Memory: 316.0K (peak: 584.0K)
CPU: 2ms
CGroup: /system.slice/supernode.service
└─3396157 /usr/bin/supernode /etc/n2n/supernode.conf -f
Configuración de los nodos
Asumiendo que el supernodo tiene la IP pública 140.40.40.1
, en cada nodo se puede establecer la conexión usando el comando edge
provisto por n2n
.
En el primer nodo:
node1 $ sudo edge -c k2t9 -k 1234 -a 192.168.100.1 -f -l 140.40.40.1:37777
En el segundo nodo:
node2 $ sudo edge -c k2t9 -k 1234 -a 192.168.100.2 -f -l 140.40.40.1:37777
En los ejemplos previos, el argumento -c
es el identificador de la comunidad. El argumento -k
es la contraseña. Todos los nodos deben hacer uso del mismo identificador de comunidad de la misma contraseña. El argumento -a
permite especificar la IP del nodo. La opción -f
es para indicarle a edge
que no se ejecute como servicio. El último argumento es -l
, que indica la dirección y el puerto del supernodo.
Cuando se ejecuta el comando edge
, en cada nodo se creará una interfaz virtual de red. Por ejemplo, consultando las interfaces de red con ip addr
, en el primer nodo aparecerá algo similar a la siguiente captura de pantalla. En este caso, el nombre de la interfaz de red es n2n0
y tiene asignada la IP 192.168.100.1.
4: n2n0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1290 qdisc fq_codel state UNKNOWN group default qlen 1000
link/ether 2e:9b:e3:14:88:7e brd ff:ff:ff:ff:ff:ff
inet 192.168.100.1/24 brd 192.168.100.255 scope global n2n0
valid_lft forever preferred_lft forever
inet6 fe80::2c9b:e3ff:fe14:887e/64 scope link proto kernel_ll
valid_lft forever preferred_lft forever
En adelante, los nodos 1 y 2 mostrados en este ejemplo podrán comunicarse, por ejemplo, haciendo ping o estableciendo una sessión SSH.
El comando edge
también puede ser ejecutado como servicio. En esa forma, cuando se encienda la computadora, la conexión con la red local virtual creada mediante n2n
será automáticamente habilitada. Para tal efecto, es necesario crear el archivo de configuración /etc/n2n/edge.conf
. Siguiendo con el ejemplo, el archivo de configuración para nodo 1 se muestra a continuación.
-d=n2n0
-c=k2t9
-k=1234
-a=192.168.100.1
-p=50001
-l=140.40.40.1:37777
Los argumentos adicionales en esta configuración son -d
, que permite especificar el nombre de la interfaz de red, y -p
para indicar el puerto que será utilizado para la conexión a la red local virtual.
Completada la configuración del nodo, se puede iniciar el servicio, habilitarlo para el arranque y verificar su estado, tal como se muestra en la siguiente captura de pantalla:
node1 $ sudo systemctl start edge
node1 $ sudo systemctl enable edge
node1 $ sudo systemctl status edge
edge.service - n2n edge process
Loaded: loaded (/usr/lib/systemd/system/edge.service; enabled; preset: disabled)
Active: active (running) since Wed 2024-02-21 11:10:04 EST; 9s ago
Main PID: 5333 (edge)
Tasks: 3 (limit: 76743)
Memory: 5.1M (peak: 6.6M)
CPU: 14ms
CGroup: /system.slice/edge.service
└─5333 /usr/bin/edge /etc/n2n/edge.conf -f
Conclusión
Los casos de uso de una red local virtual sobre Internet son diversos. Incluyen la conexión entre distantes puntos, el enlace de servicios en la nube, la colaboración entre pares, acceso y telecomunicación remota y redundancia y recuperación ante desastres. Las redes punto a punto ofrecen la ventaja adicional de no requerir, una vez que la conexión entre nodos ha sido establecida, servidores intermediarios para mantener la comunicación.
n2n
es una alternativa sencilla de red local virtual punto a punto sobre Internet, como se ha mostrado en este artículo. Tiene opciones de configuración y de seguridad fáciles de definir, que no requieren de soporte experto, y que pueden ser suficientes para aplicaciones básicas. n2n
es un proyecto de código abierto del equipo de ntop
, que también mantiene otros proyectos para monitoreo y seguridad de redes.
Referencias
- Documentación: n2n, a Layer Two Peer-to-Peer VPN
- Repositorio en Github: n2n
- Paper: Deri, L. y Andrews, R. (sf). N2N: A Layer Two Peer-to-Peer VPN
- About ntop
Posted on February 21, 2024
Join Our Newsletter. No Spam, Only the good stuff.
Sign up to receive the latest update from our blog.