DEV Community

Jaime Lopez
Jaime Lopez

Posted on

n2n: construya una red privada sobre Internet

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.

Image description

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
Enter fullscreen mode Exit fullscreen mode

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
Enter fullscreen mode Exit fullscreen mode

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
Enter fullscreen mode Exit fullscreen mode

En el segundo nodo:

node2 $ sudo edge -c k2t9 -k 1234 -a 192.168.100.2 -f -l 140.40.40.1:37777
Enter fullscreen mode Exit fullscreen mode

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
Enter fullscreen mode Exit fullscreen mode

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
Enter fullscreen mode Exit fullscreen mode

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
Enter fullscreen mode Exit fullscreen mode

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

Top comments (0)