Instalar una VPN con WireGuard
WireGuard es un protocolo de VPN (red privada virtual) de código abierto y de alto rendimiento. Es muy fácil de configurar y usar. En este tutorial veremos cómo instalar una VPN con WireGuard en Ubuntu 20.04 usando Docker Compose, junto con Pi-hole como servidor DNS para bloquear publicidad y rastreadores.
Instalar la VPN con WireGuard en el servidor
Primero instalamos Docker y Docker Compose:
apt install docker.io docker-compose -y
Creamos el archivo docker-compose.yml:
nano docker-compose.yml
Y pegamos la siguiente configuración. El servicio wireguard usa la imagen de linuxserver, que genera automáticamente las claves y la configuración de los clientes (PEERS=2 crea dos), y el servicio pihole actúa como DNS de la VPN. Ajusta la zona horaria y cambia la contraseña de la interfaz web de Pi-hole (WEBPASSWORD).
version: '3.7'
services:
wireguard:
image: linuxserver/wireguard
container_name: wireguard
cap_add:
- NET_ADMIN
- SYS_MODULE
environment:
- PUID=1000
- PGID=1000
- TZ=Europe/Madrid
- SERVERPORT=51820 #optional
- PEERS=2 #optional
- PEERDNS=auto #optional
- INTERNAL_SUBNET=10.13.13.0 #optional
volumes:
- /root/wireguard:/config
- /lib/modules:/lib/modules
- /usr/src:/usr/src
ports:
- 51820:51820/udp
sysctls:
- net.ipv4.conf.all.src_valid_mark=1
dns:
- 172.20.0.7
restart: unless-stopped
networks:
containers:
ipv4_address: 172.20.0.6
pihole:
container_name: pihole
image: pihole/pihole:v5.7
expose:
- "53"
- "67"
- "80"
- "443"
environment:
TZ: 'America/Mendoza'
WEBPASSWORD: 'peladonerd'
volumes:
- './etc-pihole/:/etc/pihole/'
- './etc-dnsmasq.d/:/etc/dnsmasq.d/'
cap_add:
- NET_ADMIN
restart: unless-stopped
networks:
containers:
ipv4_address: 172.20.0.7
networks:
containers:
ipam:
config:
- subnet: 172.20.0.0/24
Levantamos los contenedores y revisamos los logs:
docker-compose up -d
docker-compose logs -f
Ver el log del servidor
docker logs -f wireguard
Recuerda abrir el puerto 51820/UDP en el firewall del servidor.
Instalar la VPN con WireGuard en el cliente
La configuración de cada cliente la sacamos del servidor usando el log (también se guarda en la carpeta /root/wireguard, en un subdirectorio por cada peer). Será algo parecido a esto:
[Interface]
PrivateKey = MOvnGsnqfjuKOA3339ccViL5zGd00QwayHIWLlm7ZAU4=
ListenPort = 51820
Address = 9.13.13.5/32
DNS = 9.13.13.2
[Peer]
PublicKey = U4qqVYtpHFNTXVY0Kl2KFTIsMQxtuonhFN2dafAeXc=
PresharedKey = yLc3JP4PP4Tz01BDGsf22gBAw1+k42lqBpeKWLbiJo=
AllowedIPs = 0.0.0.0/0, ::/0
Endpoint = 81.198.198.51:51820
Configuras el cliente
Instala la aplicación oficial de WireGuard en tu equipo o móvil e importa esa configuración (en el móvil también puedes escanear el código QR que aparece en el log).
Al activar el túnel, todo tu tráfico pasará por el servidor (AllowedIPs = 0.0.0.0/0, ::/0). Las claves privadas son secretas: no compartas los archivos de configuración de los clientes.
