Guía Paso a Paso: Compartir NordVPN en Docker con Gluetun
Hace un par de semanas cambié de VPN, pasé de PIA a NordVPN. Una de las razones principales del cambio es que quería poder compartir la VPN entre contenedores de docker, vi que había bastante documentación para NordVPN y casi nula para PIA.
Y bueno... ayer encontré gluetun, un proyecto que funciona para ambas 😅. Acá escribo el proceso que hice para poder compartir la VPN entre contenedores docker 😛. Bueno... hagámosle.
Requisitos
Sólo se me ocurren dos:
- El contenedor que quieres que use la VPN, por ejemplo, un contenedor ejecutando algún cliente torrent como Transmission.
- Para facilidad, el contenedor de Transmission debe estar en un stack.
Dejo un ejemplo de mi configuración:
services:
transmission:
image: lscr.io/linuxserver/transmission:latest
container_name: transmission
environment:
- PUID=1000
- PGID=1000
- TZ=Etc/UTC
volumes:
- /tu/ruta/transmission/data:/config
- /tu/ruta/transmission/downloads:/downloads
- /tu/ruta/transmission/watch:/watch
restart: unless-stopped
ports:
- 9091:9091
Paso 1: Agregar gluetun
Ahora agregamos el contenedor de gluetun, en este ejemplo usaremos NordVPN pero si revisas la documentación, encontrarás que gluetun tiene soporte para muchos proveedores más.
gluetun:
image: qmcgaw/gluetun
container_name: gluetun
restart: unless-stopped
cap_add:
- NET_ADMIN
devices:
- /dev/net/tun:/dev/net/tun
environment:
- VPN_SERVICE_PROVIDER=nordvpn
- VPN_TYPE=wireguard
- WIREGUARD_PRIVATE_KEY=...
- SERVER_COUNTRIES=United States
- SERVER_CITIES=Miami
Si vas a los logs del contenedor encontrarás que efectivamente se conectó alguno de los países que escogiste:
2025-03-14T01:18:06Z INFO [dns] ready
2025-03-14T01:18:07Z INFO [ip getter] Public IP address is 1.2.3.44 (United States, Florida, Miami - source: ipinfo)
2025-03-14T01:18:07Z INFO [vpn] You are running 1 commit behind the most recent latest
Paso 2: Conectar los contenedores
Ahora vamos a permitir que el contenedor de transmission
use la VPN que se encuentra en el contenedor de gluetun
. Para esto, debemos cambiar el modo de red del contenedor de transmission a network_mode: "service:gluetun"
. Este sería el yaml completo.
services:
transmission:
image: lscr.io/linuxserver/transmission:latest
container_name: transmission
environment:
- PUID=1000
- PGID=1000
- TZ=Etc/UTC
volumes:
- /tu/ruta/transmission/data:/config
- /tu/ruta/transmission/downloads:/downloads
- /tu/ruta/transmission/watch:/watch
restart: unless-stopped
network_mode: "service:gluetun"
gluetun:
image: qmcgaw/gluetun
container_name: gluetun
restart: unless-stopped
cap_add:
- NET_ADMIN
devices:
- /dev/net/tun:/dev/net/tun
environment:
- VPN_SERVICE_PROVIDER=nordvpn
- VPN_TYPE=wireguard
- WIREGUARD_PRIVATE_KEY=...
- SERVER_COUNTRIES=United States
- SERVER_CITIES=Miami
ports:
- 9091:9091
Ah, una última cosa, la exposición de puertos se elimina del contenedor de transmission y pasa ahora al contenedor de gluetun.
Paso 3: Probar
Por último, sólo debemos probar que el contenedor de transmission esta conectado a la VPN. Para esto ingresaremos al contenedor y haremos una petición a un servicio público.
$ docker exec -ti transmission sh
root@ddee87fa4a26:/# curl ifconfig.me
1.2.3.44
Y listo! Te dejo link de NordVPN por si quieres usar mi código de referido, https://refer-nordvpn.com/VqwuTSzghfS.