Skip to content

IMPLEMENTACIÓN DE WIREGUARD ENTRE DOS CONTENEDORES DE DOCKER

En un servidor Ubuntu Server 22.04.4 LTS, se implementará una VPN utilizando Docker para establecer una conexión segura entre dos contenedores. Esta conexión se realizará mediante la tunelización de los contenedores a través del protocolo VPN WireGuard.

img
Versión del servidor de Ubuntu Server.

Requisitos previos

  1. Tener Docker instalado en tu sistema, se puede guiar de los anexos, que son guías en formato digital para instalar Docker.
  2. Acceso a internet para descargar las imágenes de Docker necesarias.
  3. Conocimientos básicos de Docker y redes.

Para conectar dos contenedores de Docker con una VPN de WireGuard, puedes seguir estos pasos:

1. Crear una red interna de Docker

Se creó una red para almacenar los dos contenedores de Docker y poder realizar la respectiva conectividad.

docker network create --driver bridge vpn-net

img

2. Crear los contenedores

Se configuran los dos contenedores, tanto para el servidor como para el cliente.

Contenedor de Servidor

docker run -dit \
  --name server \
  --cap-add=NET_ADMIN \
  --cap-add=SYS_MODULE \
  -v server:/etc/wireguard \
  --network=vpn-net \
  --rm \
  linuxserver/wireguard

Contenedor de cliente

docker run -dit \
  --name client \
  --cap-add=NET_ADMIN \
  --cap-add=SYS_MODULE \
  --cap-add=SYS_PTRACE \
  -v client:/etc/wireguard \
  --network=vpn-net \
  --rm \
  linuxserver/wireguard

Se puede observar los dos contenedores en ejecución. img

3. Configurar el servidor

Para generar las claves públicas y privadas dentro del servidor, primero accede al contenedor del server. Luego, configura la red de VPN utilizando estas claves privada y publica. Accede al contenedor del servidor:

docker exec -it server /bin/bash

Genera una clave pública y privada para el servidor:

wg genkey | tee /etc/wireguard/privatekey | wg pubkey > /etc/wireguard/publickey

img img

Configuramos ahora la interfaz de red wg0

[Interface]
Address=10.13.13.1/24
PrivateKey=aCcGAmPrZIm5GJ+MHsGzbJ4vh5PKB43lplLbBZds0XU=
ListenPort=51820

[Peer]
PublicKey=+RiujZizA2g6m1szd+XUQGfEETQ3wkMFS+CzIdCQRjc=
AllowedIPs=10.13.13.2/32
Endpoint=172.19.0.3:51820

4. Configurar el cliente

Para generar las claves públicas y privadas dentro del servidor, primero accede al contenedor del client. Luego, configura la red de VPN utilizando estas claves privada y publica. Igualmente accedemos al contenedor del cliente.

docker exec -it client /bin/bash

Genera una clave pública y privada para el cliente:

wg genkey | tee /etc/wireguard/privatekey | wg pubkey > /etc/wireguard/publickey

img

Configuramos ahora la interfaz de red wg0

[Interface]
Address=10.13.13.2/24
PrivateKey=8H8GNaW6PXNEnn/Jm/0JEKg4dq0YrmtA3ZydfLp7KmQ=
ListenPort=51820

[Peer]
PublicKey=xIfYNOGJRYyKe/d7p3wZ+dM8/jijMoeFcs9V3flRAik=
AllowedIPs=10.13.13.1/32
Endpoint=172.19.0.2:51820

5. Iniciar la VPN en el servidor y el cliente

En el contenedor del servidor:

wg-quick up wg0

img

En el contenedor del cliente:

wg-quick up wg0

img

6. Verificación de creación de la VPN

Conexión de la VPN en servidor
img

Conexión de la VPN en el cliente img

7. Verificar la conexión

Verificar envío de paquete ICMP desde el contenedor de servidor.

ping 10.13.13.2

img

Verificar envió de paquete ICMP desde el contenedor de cliente.

ping 10.13.13.1

img

8. Desactivar la VPN creada con Wireguard

Para terminar de la conexión de la VPN entre los dos contenedores se debe de realizar el siguiente comando en el contenedor de Servidor y Cliente.

wg-quick down wg0