Cómo instalar WireGuard VPN en Debian 11 Bullseye

En esta entrada veremos cómo instalar y configurar WireGuard VPN en Debian 11 Bullseye paso a paso, de forma que puedas crear tu propio nodo o servidor VPN en Internet al que conectar desde tus dispositivos cuando uses conexiones no confiables. Si ya usas un VPS Debian 11 para otros servicios esta es una opción muy interesante para sacarle el máximo provecho.

Antes de instalar WireGuard VPN en Debian 11 Bullseye

Para poder seguir los pasos de esta guía de instalación y configuración de WireGuard VPN en Debian 11 Bullseye necesitarás partir del siguiente escenario:

  • Un servidor o VPS Debian 11 Bullseye que actuará como servidor de nuestra VPN.
  • Una máquina (o más) Debian 11 Bullseye desde la que conectaremos a la VPN.
  • Acceso a línea de comandos en dichos sistemas con permisos de sudo.
  • Conexión a Internet.

En este tutorial configuraremos WireGuard VPN en un servidor o VPS Debian 11 Bullseye en Internet que servirá como nodo al que enlazar desde otras máquinas Debian 11 (u otros sistemas) que, en principio, accederían a Internet sobre conexiones poco confiables (cafeterías, estaciones y aeropuertos, etc.).

Para que te hagas una idea, el sistema descrito en este tutorial funciona sobre un VPS Debian 11 en Digital Ocean cuyo coste mensual es de 10 $, con 2 GB de RAM, 50 GB de SSD y 2 TB de transferencia de datos, y se utiliza para múltiples servicios más, sobre todo para alojamiento web.

Cómo instalar WireGuard VPN en Debian 11 Bullseye

Vamos a instalar WireGuard VPN en Debian 11 Bullseye desde los repositorios de la distribución, ya que es la primera versión de este sistema que incluye paquetes de WireGuard en la instalación estándar. Este proceso lo haremos tanto en el nodo VPN Debian 11 como en las máquinas clientes, así que empezaremos actualizando la información de los repositorios:

~$ sudo apt update

E instalamos los paquetes necesarios con apt:

~$ sudo apt install -y wireguard

Cómo configurar WireGuard VPN en Debian 11 Bullseye

A continuación vamos a ver cómo configurar WireGuard VPN en Debian 11 Bullseye, tanto en el nodo principal de la VPN como en las máquinas clientes Debian 11.

Creación de las claves públicas y privadas de WireGuard VPN

Este proceso lo seguiremos tanto en el nodo principal de la VPN como en las máquinas clientes.

Al instalar WireGuard se ha creado el directorio de configuración /etc/wireguard/ que inicialmente está vacío.

El primer paso será crear las claves privada y pública de WireGuard sobre la máquina Debian 11:

~$ wg genkey | tee privatekey | wg pubkey > publickey

Ahora tenemos en el directorio de trabajo los archivos privatekey y publickey con las respectivas claves. Moveremos estos archivos al directorio de configuración de WireGuard:

~$ sudo mv privatekey publickey /etc/wireguard/

Por seguridad sólo root debería tener acceso a estos archivos, así que cambiaremos su propietario:

~$ sudo chown root: /etc/wireguard/{publickey,privatekey}

E igualmente cambiaremos los permisos de acceso:

~$ sudo chmod 0600 /etc/wireguard/{publickey,privatekey}

Vamos a echarle un vistazo a las claves porque las necesitamos a continuación.

En el nodo principal, la clave privada:

~$ sudo cat /etc/wireguard/privatekey
QNm74T19NV480307XBQQ+2unC+k0jRJ+TSrc+H0ck28=

Y la pública:

~$ sudo cat /etc/wireguard/publickey
2cGAnR7sqqgN5BK6daZL28Rh/DEE/r0UCP/4Lule62U=

Y en la máquina Debian 11 que configuraremos como cliente VPN, la clave privada:

~$ sudo cat /etc/wireguard/privatekey
UHi+iSvN+1D/TcMHmxOFVVB7n7PKfi4xgdmztVABtF0=

Y la pública:

~$ sudo cat /etc/wireguard/publickey
PTVYrLHC7YgF4RVCZ8YbVOjqG+L0nKh3Iy/F2SepQkE=

Adicionalmente hemos creado las claves sobre un segundo cliente Debian 11 Bullseye, la privada:

~$ sudo cat /etc/wireguard/privatekey
gPKCSxl23rPIJ2/Xfw+7eXOp7WIrdZyWoEmiyYphsVI=

Y la pública:

~$ sudo cat /etc/wireguard/publickey
qa4I9R9xTwlNUFIdiSUTM1SEriQeJLnsPfbNN64BUTs=

Estos valores los usaremos en la configuración tanto del nodo principal como de las máquinas clientes.

Configurar el nodo principal de la VPN

En esta sección trabajamos sobre el nodo principal o servidor VPN WireGuard, creando el archivo de configuración para el que usaremos como nombre el de la interfaz de red virtual que se creará, usualmente wg0:

~$ sudo nano /etc/wireguard/wg0.conf

La primera sección de este archivo, llamada Interface, es la que define las características de la interfaz o adaptador de red virtual de la VPN:

[Interface]
Address = 192.168.111.1
PrivateKey = QNm74T19NV480307XBQQ+2unC+k0jRJ+TSrc+H0ck28=
ListenPort = 51820

La directiva Address indica la dirección IP de la interfaz de red virtual. Puedes utilizar cualquier rango de direcciones privadas que quieras, pero debes elegir uno que no se esté usando por otros adaptadores de red físicos tanto en el nodo VPN como en las máquinas clientes.

Por ejemplo, la máquina cliente podría estar usando ya una dirección IP típica como 192.168.0.x ó 192.168.1.x asignada por la red WiFi de una biblioteca, cafetería, aeropueto, etc., así que usaríamos un rango completamente distinto para evitar conflictos.

También configuramos la directiva PrivateKey con la clave privada del servidor VPN tal como la creamos anteriormente.

El puerto de escucha por defecto suele ser el 51820 UDP, pero puedes elegir otro si lo consideras necesario.

A continuación añadimos las reglas de filtrado con iptables:

...
PostUp = iptables -A FORWARD -i wg0 -j ACCEPT; iptables -t nat -A POSTROUTING -o enp0s3 -j MASQUERADE
PostDown = iptables -D FORWARD -i wg0 -j ACCEPT; iptables -t nat -D POSTROUTING -o enp0s3 -j MASQUERADE

Como este tutorial no trata de iptables no vamos a explicar con detalle las directivas anteriores, salvo que hacen NAT sobre el tráfico recibido por la interfaz wg0 de la VPN. Es muy importante que en el bloque anterior configures correctamente la interfaz de red con la que el nodo VPN conecta a Internet, en este ejemplo es enp0s3 pero si en tu caso fuera otra deberías cambiarla en dicho bloque de configuración (por ejemplo, podría ser eth0).

Por último vamos a añadir un bloque Peer por cada cliente que queramos conectar al servidor de la VPN, en este ejemplo serán dos:

...
[Peer]
PublicKey = PTVYrLHC7YgF4RVCZ8YbVOjqG+L0nKh3Iy/F2SepQkE=
AllowedIPs=192.168.111.100/32

[Peer]
PublicKey = qa4I9R9xTwlNUFIdiSUTM1SEriQeJLnsPfbNN64BUTs=
AllowedIPs=192.168.111.101/32

Las directivas PublicKey contienen la clave pública de WireGuard de la máquina cliente Debian 11 en cuestión, mientras que la directiva AllowedIPs define la red o dirección IP que tendrán los clientes dentro de la VPN. En este ejemplo hemos especificado directamente la dirección IP porque permitiremos varios clientes simultáneos.

Por fin podemos guardar y cerrar el archivo de configuración.

Para que el nodo permita enrutar el tráfico de la red VPN hacia Internet (o hacia donde se haya configurado) hay que activar el enrutado:

~$ sudo sysctl -w net.ipv4.ip_forward=1

Si tenemos activado el firewall UFW es importante abrir el puerto de escucha de conexiones que acabamos de configurar:

~$ sudo ufw allow 51820/udp

Y por fin podemos levantar la interfaz de red virtual que acabamos de configurar:

~$ sudo wg-quick up wg0

Si todo ha ido bien debería mostrarse una salida semejante a la siguiente:

~$ sudo wg-quick up wg0
[#] ip link add wg0 type wireguard
[#] wg setconf wg0 /dev/fd/63
[#] ip -4 address add 192.168.111.1 dev wg0
[#] ip link set mtu 1420 up dev wg0
[#] ip -4 route add 192.168.111.101/32 dev wg0
[#] ip -4 route add 192.168.111.100/32 dev wg0
[#] iptables -A FORWARD -i wg0 -j ACCEPT; iptables -t nat -A POSTROUTING -o enp0s3 -j MASQUERADE

En cambio si ha habido algún error se mostrará información que ayudará a corregirlo, tras lo cual intentaremos iniciar de nuevo la interfaz de red hasta que lo consigamos.

En el lado del nodo principal o servidor VPN ya está todo en marcha, a la espera de conexiones.

Puedes observar el estado del servicio lanzando en consola el siguiente comando:

~$ sudo wg
interface: wg0
  public key: 2cGAnR7sqqgN5BK6daZL28Rh/DEE/r0UCP/4Lule62U=
  private key: (hidden)
  listening port: 51820

peer: PTVYrLHC7YgF4RVCZ8YbVOjqG+L0nKh3Iy/F2SepQkE=
  allowed ips: 192.168.111.100/32

peer: qa4I9R9xTwlNUFIdiSUTM1SEriQeJLnsPfbNN64BUTs=
  allowed ips: 192.168.111.101/32

Configuración permanente del servidor

Si quieres que el servidor Debian 11 Bullseye que has configurado como nodo principal de la VPN WireGuard siga funcionando tras eventuales reinicios del sistema, hay que habilitar el servicio:

~$ sudo systemctl enable wg-quick@wg0

Y también habrá que hacer persistente el enrutado, para lo que editamos el archivo sysctl.conf:

~$ sudo nano /etc/sysctl.conf

Buscamos esta línea:

...
#net.ipv4.ip_forward=1
...

Y la activamos eliminando el carácter # al inicio de la línea:

...
net.ipv4.ip_forward=1
...

Tras lo que podemos guardar y cerrar el archivo.

De hecho, si reiniciamos la máquina podemos comprobar que el servicio está activo:

~$ sudo systemctl status wg-quick@wg0

como instalar wireguard vpn en debian 11 bullseye

Y además podremos ver el estado de las conexiones:

~$ sudo wg

instalar wireguard vpn en debian 11 bullseye

Configurar los clientes Debian 11 de la VPN WireGuard

En cada cliente Debian 11 crearemos su propio archivo de configuración para la interfaz de red de WireGuard, de forma similar a como lo hemos hecho en el nodo principal o servidor:

~$ sudo nano /etc/wireguard/wg0.conf

Crearemos la sección Interface para configurar el adaptador de red:

[Interface]
Address = 192.168.111.100
PrivateKey = UHi+iSvN+1D/TcMHmxOFVVB7n7PKfi4xgdmztVABtF0=
PostUp = sysctl net.ipv6.conf.enp0s3.disable_ipv6=1

La directiva Address lógicamente debe indicar una dirección IP exclusiva para este cliente dentro del rango configurado en el nodo principal. Si configuras otros clientes deberás tener cuidado de que sus respectivas direcciones IP dentro de la VPN no coincidan con la del nodo principal ni con las del resto de clientes (pero siempre deben pertenecer al mismo rango, en este ejemplo 192.168.111.x).

En el ejemplo de este tutorial ya habíamos previsto todo esto y preparamos las direcciones IP de los clientes, incluyéndolas en la configuración del servidor VPN, por lo que usamos la misma dirección IP privada que definimos en la sección Peer de la configuración del servidor.

La clave privada es la de la propia máquina cliente

Y hemos añadido una directiva PostUp que desactiva el protocolo IPv6 sobre la interfaz de red física con la que conectamos a Internet (si en tu sistema no es enp0s3 sustituye por eth0, wlan0 o lo que corresponda) porque esta pequeña VPN sólo funciona sobre IPv4, y cualquier posible tráfico IPv6 viajaría por la conexión ordinaria en lugar de por la VPN.

A continuación configuramos la sección Peer que en este contexto hace referencia al servidor o nodo principal de la VPN:

...
[Peer]
PublicKey = 2cGAnR7sqqgN5BK6daZL28Rh/DEE/r0UCP/4Lule62U=
Endpoint = XXX.XXX.XXX.XXX:51820
AllowedIPs = 0.0.0.0/0
PersistentKeepalive = 20

En este caso la configuración es la siguiente:

  • Publickey contiene la clave pública del nodo principal de la VPN al que conectamos.
  • Endpoint indica la direción IP pública de dicho nodo principal (no confundir con la dirección IP privada de la VPN) y el puerto de conexión.
  • AllowedIPs indica qué tráfico enviaremos a la VPN, que en este ejemplo será todo (todo el IPv4).
  • PersistentKeepalive permitirá que la conexión no se cierre enviando algo de tráfico cuando no haya actividad en 20 segundos. Este parámetro no es necesario, ya que la conexión se vuelve a establecer al reanudar el tráfico, pero se producirá un retraso de unos segundos antes de continuar la actividad.

Ya podemos guardar y cerrar el archivo de conexión y levantar la nueva interfaz de red:

~$ sudo wg-quick up wg0

Si aparece algún mensaje de error habrá que solventar el problema y volver a levantar la interfaz de red.

Podremos comprobar fácilmente el estado de la conexión:

~$ sudo wg

como configurar la vpn wireguard en debian 11 bullseye

Comprobar el funcionamiento de la VPN WireGuard en Debian 11 Bullseye

Con el servicio funcionando en el servidor VPN Debian 11 y los adaptadores de red activados en la o las máquinas clientes podemos comprobar el funcionamiento de la conexión desde los clientes de diversas formas:

  • Haciendo ping desde los clientes a la dirección IP privada del servidor WireGuard (192.168.111.1 en este tutorial).
  • Si hay varios clientes conectados a la VPN, haciendo ping entre sus direcciones IP privadas en la VPN.
  • Y, obviamente, conectando a distintos servicios de Internet (web, correo-e, etc.).

En el servidor podemos obtener un resumen de actividad con el comando sudo wg:

~$ sudo wg
interface: wg0
  public key: 2cGAnR7sqqgN5BK6daZL28Rh/DEE/r0UCP/4Lule62U=
  private key: (hidden)
  listening port: 51820

peer: PTVYrLHC7YgF4RVCZ8YbVOjqG+L0nKh3Iy/F2SepQkE=
  endpoint: XXX.XXX.XXX.XXX:57092
  allowed ips: 192.168.111.100/32
  latest handshake: 4 seconds ago
  transfer: 105.43 KiB received, 3.04 MiB sent

peer: qa4I9R9xTwlNUFIdiSUTM1SEriQeJLnsPfbNN64BUTs=
  endpoint: XXX.XXX.XXX.XXX:21841
  allowed ips: 192.168.111.101/32
  latest handshake: 13 minutes, 46 seconds ago
  transfer: 760 B received, 552 B sent

Observamos que al primer cliente se le ha enviado más de 3 MiB de información. Si usamos en el mismo comando en esa máquina cliente:

~$ sudo wg
interface: wg0
  public key: PTVYrLHC7YgF4RVCZ8YbVOjqG+L0nKh3Iy/F2SepQkE=
  private key: (hidden)
  listening port: 57092
  fwmark: 0xca6c

peer: 2cGAnR7sqqgN5BK6daZL28Rh/DEE/r0UCP/4Lule62U=
  endpoint: XXX.XXX.XXX.XXX:51820
  allowed ips: 0.0.0.0/0
  latest handshake: 4 minutes, 23 seconds ago
  transfer: 3.06 MiB received, 158.15 KiB sent

Comprobamos que la cantidad de información recibida coincide.

¡Nuestra VPN funciona!

Conclusión

Ahora que sabes cómo instalar y configurar la VPN WireGuard en Debian 11 Bullseye ya puedes usar la potencia de tu servidor o VPS Debian 11 en Internet para proteger la conexión de tus dispositivos cuando los conectas a redes públicas poco seguras.

Si ya funciona todo en tu sistema y quieres agradecérnoslo contribuyendo al mantenimiento y actualización de este sitio, cualquier pequeña contribución es bienvenida.

Puedes ayudarnos dejando una propina de tan solo 1 $ desde PayPal:

¡Gracias!

5/5 - (1 voto)

Deja un comentario

Este sitio esta protegido por reCAPTCHA y laPolítica de privacidady losTérminos del servicio de Googlese aplican.

El periodo de verificación de reCAPTCHA ha caducado. Por favor, recarga la página.