n2n: construya una red privada sobre Internet
Tags: n2n, vpn, vlan
Published: 2024-02-21 21:10:52

---
title: n2n: construya una red privada sobre Internet
published: true
description: n2n sirve para crear redes punto a punto que emulan una red local sobre Internet. De esa manera usted puede conectarse, por ejemplo, desde cualquier lugar con su computadora en casa.
tags: n2n, vpn, vlan
# cover_image:
# Use a ratio of 100:42 for best results.
# published_at: 2024-02-21 21:06 +0000
---

## 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](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/slyr8fm6x0z2rn4h2i4o.jpg)

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](https://www.ntop.org/products/n2n/)
* Repositorio en Github: [n2n](https://github.com/ntop/n2n/)
* Paper: Deri, L. y Andrews, R. (sf). [N2N: A Layer Two Peer-to-Peer VPN](http://luca.ntop.org/n2n.pdf)
* [About ntop](https://www.ntop.org/about/about-us-2/)