Entrada

Practica 4 - Configuración de VPN (WireGuard)

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

  1. Instalar repositorios y herramientas necesarias:

    1
    
    sudo dnf install elrepo-release epel-release wireguard-tools -y
    
  2. (Opcional) Deshabilitar ElRepo si causa problemas de actualización:

    1
    
    sudo dnf config-manager --set-disabled elrepo
    
  3. Actualizar el sistema:

    1
    
    sudo dnf update -y
    

2. Generar Clave Privada y Pública

  1. Generar la clave privada y almacenarla en /etc/wireguard/private.key:

    1
    
    wg genkey | sudo tee /etc/wireguard/private.key
    
  2. Ajustar permisos de la clave privada:

    1
    
    sudo chmod go= /etc/wireguard/private.key
    
  3. 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
    
  4. 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

  1. 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

  1. 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

  1. Activar el reenvío de paquetes de forma inmediata:

    1
    
    sudo sysctl -w net.ipv4.ip_forward=1
    
  2. 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

  1. Asignar una dirección IP al cliente mediante WireGuard:

    1
    
    sudo wg set wg0 peer <clave-publica-peer> allowed-ips <ip-vpn-cliente>/32
    
  2. Verificar la configuración de WireGuard:

    1
    
    sudo wg
    
  3. Para remover una asignación:

    1
    
    sudo wg set wg0 peer <clave-publica-peer> remove
    

3.5 Iniciar el Servidor y Cliente VPN

  1. Reiniciar la interfaz de WireGuard:

    1
    2
    
    sudo wg-quick down wg0
    sudo wg-quick up wg0
    
  2. 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.

3.6 Verificar la Conexión VPN

  1. 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:

  1. 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
      
  2. En la configuración de tu aplicación web (por ejemplo, Laravel):

    • Archivo: /home/{user}/{laravel-app}/.env
      1
      
      DB_HOST={ip-vpn-db}
      

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.

Esta entrada está licenciada bajo CC BY 4.0 por el autor.