Practica 4 - Configuración de VPN (WireGuard)
Introducción
En este artículo te explicaré de forma muy coloquial cómo instalar y configurar una VPN usando WireGuard en tu VPS de Digital Ocean. Veremos la instalación de WireGuard, la generación de claves, la configuración tanto del servidor como del cliente, y algunos ajustes adicionales (como reenvío de paquetes y modificación de configuraciones web) para integrar la VPN en tu entorno.
1. Instalación de WireGuard
WireGuard es un protocolo de red seguro y de alto rendimiento que simplifica la configuración de VPNs. A continuación, te muestro cómo instalarlo en tu VPS de Digital Ocean. WireGuard se puede instalar en cualquier distribución de Linux, pero en este caso, usaremos Rocky Linux. Visita la documentación oficial de WireGuard para más detalles.
1.1 Actualizar e Instalar WireGuard
Instalar repositorios y herramientas necesarias:
1
sudo dnf install elrepo-release epel-release wireguard-tools -y
(Opcional) Deshabilitar ElRepo si causa problemas de actualización:
1
sudo dnf config-manager --set-disabled elrepo
Actualizar el sistema:
1
sudo dnf update -y
2. Generar Clave Privada y Pública
Generar la clave privada y almacenarla en
/etc/wireguard/private.key
:1
wg genkey | sudo tee /etc/wireguard/private.key
Ajustar permisos de la clave privada:
1
sudo chmod go= /etc/wireguard/private.key
Generar la clave pública a partir de la privada y almacenarla en
/etc/wireguard/public.key
:1
sudo cat /etc/wireguard/private.key | wg pubkey | sudo tee /etc/wireguard/public.key
Verificar las rutas de las claves:
/etc/wireguard/private.key
/etc/wireguard/public.key
3. Configuración de la VPN
3.1 Configurar el Servidor VPN
Crear y editar el archivo de configuración del servidor:
La configuración se encuentra en
/etc/wireguard/wg0.conf
. Puedes basarte en el siguiente ejemplo:1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33
[Interface] PrivateKey = SERVER_PRIVATE_KEY Address = 10.10.10.1/24 # Rango de IP que tu quieras ListenPort = 51820 SaveConfig = true [Peer] PublicKey = PEER_PUBLIC_KEY_DROPLET_1_SSH_PROXY_LB AllowedIPs = 10.10.10.2 [Peer] PublicKey = PEER_PUBLIC_KEY_DROPLET_2_WEB_BACKUP AllowedIPs = 10.10.10.3 [Peer] PublicKey = PEER_PUBLIC_KEY_DROPLET_3_BD AllowedIPs = 10.10.10.4 [Peer] PublicKey = PEER_PUBLIC_KEY_DROPLET_4_WEB_1 AllowedIPs = 10.10.10.5 [Peer] PublicKey = PEER_PUBLIC_KEY_DROPLET_5_WEB_2 AllowedIPs = 10.10.10.6 [Peer] PublicKey = PEER_PUBLIC_KEY_DROPLET_6_WEB_3 AllowedIPs = 10.10.10.7 [Peer] PublicKey = PEER_PUBLIC_KEY_OTRO_CLIENTE AllowedIPs = 10.10.10.x
3.2 Configurar el Cliente VPN
Crear y editar el archivo de configuración del cliente:
El archivo de configuración del cliente se denomina, por ejemplo,
peer.wg0.conf
. Un ejemplo sería:1 2 3 4 5 6 7 8 9 10
[Interface] PrivateKey = PEER_PRIVATE_KEY Address = 10.10.10.2/24 # Rango de IP que tu quieras SaveConfig = true [Peer] PublicKey = SERVER_PUBLIC_KEY AllowedIPs = 10.10.10.0/24 # Rango de IP que tu quieras Endpoint = IP_PUBLIC_SERVER_VPN:51820 PersistentKeepalive = 30
3.3 Habilitar el Reenvío de Paquetes en el Servidor VPN
Activar el reenvío de paquetes de forma inmediata:
1
sudo sysctl -w net.ipv4.ip_forward=1
Asegurarte de que el reenvío de paquetes esté activo permanentemente editando
/etc/sysctl.conf
:Agrega o modifica la siguiente línea:
1
net.ipv4.ip_forward=1
3.4 Asignar Direcciones IP y Claves Públicas al Servidor
Asignar una dirección IP al cliente mediante WireGuard:
1
sudo wg set wg0 peer <clave-publica-peer> allowed-ips <ip-vpn-cliente>/32
Verificar la configuración de WireGuard:
1
sudo wg
Para remover una asignación:
1
sudo wg set wg0 peer <clave-publica-peer> remove
3.5 Iniciar el Servidor y Cliente VPN
Reiniciar la interfaz de WireGuard:
1 2
sudo wg-quick down wg0 sudo wg-quick up wg0
Habilitar y arrancar el servicio de WireGuard:
- Comandos para systemd:
1 2 3
sudo systemctl enable wg-quick@wg0.service sudo systemctl start wg-quick@wg0.service sudo systemctl status wg-quick@wg0.service
- Comandos para Service:
1 2 3 4
sudo service wg-quick@wg0 status sudo service wg-quick@wg0 start sudo service wg-quick@wg0 stop sudo service wg-quick@wg0 restart
Cualquiera funciona, pero se recomienda usar systemd.
- Comandos para systemd:
3.6 Verificar la Conexión VPN
Comprobar la conexión haciendo ping a la IP del cliente VPN:
1
ping -c 5 <ip-vpn-cliente>
En caso de no recibir respuesta, verifica la configuración de las claves y las direcciones IP.
4. Modificaciones Adicionales
4.1 Modificar Configuraciones Web para Usar la VPN
Si tus aplicaciones (por ejemplo, bases de datos o apps web) deben comunicarse vía VPN, asegúrate de ajustar las configuraciones:
En la configuración de la base de datos (PostgreSQL):
Archivo:
/var/lib/pgsql/15/data/postgresql.conf
1
listen_addresses = 'localhost,{ip-privada},{ip-vpn}'
Archivo:
/var/lib/pgsql/15/data/pg_hba.conf
1
hostssl {database} {userdb} {ip-vpn} scram-sha-256
En la configuración de tu aplicación web (por ejemplo, Laravel):
- Archivo:
/home/{user}/{laravel-app}/.env
1
DB_HOST={ip-vpn-db}
- Archivo:
4.2 Configuración de Proxy y Load Balancer para VPN
Si usas un servidor Proxy o Load Balancer, agrega un nuevo upstream y server para la VPN. Revisa los siguientes enlaces para más detalles:
4.3 Habilitar el Servicio de DNS en el Servidor VPN
Para mejorar la resolución de nombres, habilita el servicio DNS con systemd:
1
sudo systemctl enable --now systemd-resolved
Conclusiones
En este artículo, hemos visto cómo instalar y configurar una VPN usando WireGuard en tu VPS de Digital Ocean. Hemos generado claves, configurado tanto el servidor como el cliente, y realizado ajustes adicionales para integrar la VPN en tu entorno.
Cualquier duda o comentario, agregarla en la sección de comentarios abajo de cada publicación.