Cómo Configurar un Servidor OpenVPN en Debian 12

Artículos Guías Manuales Sistemas Linux Windows Binario 0

El objetivo de este manual es configurar un servidor OpenVPN que enrute solo la red visible del servidor OpenVPN o las redes que se quieran setear, excluyendo el tráfico externo a internet.

Pasos generales

  1. Actualizar e instalar paquetes necesarios.
  2. Configurar OpenVPN y crear usuarios.
  3. Configurar reglas de iptables.
  4. Generar certificados.
  5. Configurar EasyRSA y crear credenciales.
  6. Generar y exportar configuraciones para clientes.

Actualización e instalación de paquetes

  1. Inicie con una máquina Debian 12 lista para conexión SSH.
  2. Ejecute los siguientes comandos:

    apt update && apt upgrade -y wget -O - https://swupdate.openvpn.net/repos/repo-public.gpg | gpg --dearmor -o /usr/share/keyrings/openvpn.asc

    echo "deb [signed-by=/usr/share/keyrings/openvpn.asc] https://packages.openvpn.net/openvpn3/debian bullseye main" > /etc/apt/sources.list.d/openvpn.list

    apt update

    apt install openvpn iptables-persistent net-tools -y

Creación de usuario para OpenVPN

  1. Cree un usuario y grupo exclusivo para el servicio:

    adduser --system --shell /usr/sbin/nologin --no-create-home ovpn
    groupadd ovpn
    usermod -g ovpn ovpn

Configuración de OpenVPN

  1. Cree el archivo /etc/openvpn/server.conf con la siguiente configuración base:

    dev tun
    persist-key
    persist-tun
    topology subnet
    port 1194
    proto udp
    keepalive 10 120
    ca /etc/openvpn/server/ca.crt
    cert /etc/openvpn/server/server.crt
    key /etc/openvpn/server/server.key
    dh /etc/openvpn/server/dhp4096.pem
    server 10.0.0.0 255.255.255.0
    push "route 10.1.0.0 255.255.0.0"
    user ovpn
    group ovpn
    tls-crypt /etc/openvpn/server/ta.key
    auth SHA512
    tls-version-min 1.2
    tls-cipher TLS-DHE-RSA-WITH-AES-256-GCM-SHA384:TLS-DHE-RSA-WITH-AES-256-CBC-SHA256
    ncp-ciphers AES-256-GCM:AES-256-CBC
    ifconfig-pool-persist ipp.txt
    status openvpn-status.log
    log /var/log/openvpn.log
    verb 3

Configuración de iptables

  1. Edite las reglas en /etc/iptables/rules.v4:

    *nat
    :POSTROUTING ACCEPT [0:0]
    -A POSTROUTING -s 10.1.0.0/24 -o eth0 -j MASQUERADE
    COMMIT
    *filter
    -A INPUT -i lo -j ACCEPT
    -A INPUT -p icmp -j ACCEPT
    -A INPUT -i eth0 -p udp --dport 1194 -j ACCEPT
    -A FORWARD -s 10.1.0.0/24 -i tun0 -o eth0 -j ACCEPT
    -A OUTPUT -o eth0 -j ACCEPT
    COMMIT
  2. Implemente las reglas:

    iptables-restore < /etc/iptables/rules.v4

Configuración de sysctl para reenvío de IP

  1. Edite /etc/sysctl.conf y asegúrese de que net.ipv4.ip_forward=1 esté habilitado.
  2. Recargue la configuración:

    sysctl --system

Generación de certificados

  1. Cree la clave HMAC para los paquetes TLS:

    openvpn --genkey --secret /etc/openvpn/server/ta.key
  2. Genere el parámetro Diffie-Hellman:

    openssl genpkey -genparam -algorithm DH -out /etc/openvpn/server/dhp4096.pem -pkeyopt dh_paramgen_prime_len:4096

Configuración de EasyRSA

  1. Configure el entorno para la CA:

    make-cadir ~/ca && cd ~/ca
    ln -s openssl-1.0.0.cnf openssl.cnf
    nano vars
  2. Defina las variables base en vars:

    export KEY_COUNTRY="US"
    export KEY_PROVINCE="CA"
    export KEY_CITY="SanFrancisco"
    export KEY_ORG="Fort-Funston"
    export KEY_EMAIL="[email protected]"
    export KEY_OU="MyOrganizationalUnit"
  3. Genere credenciales:

    source ./vars
    ./clean-all
    ./build-ca
    ./build-key-server server

Configuración para el cliente

  1. Cree un script para generar configuraciones de cliente:

    nano clientevpn.sh

    Contenido del script, donde pone serverip=<poner-ip-publica-del-servidor-a-conectar>:

    #!/bin/bash
    clientuser=$1
    cd /root/ca && source ./vars && ./pkitool --pass $clientuser
    serverip="0.0.0.0"
    cat << EOF > $clientuser.ovpn
    client
    dev tun
    proto udp
    remote $serverip 1194
    persist-key
    persist-tun
    <ca>
    $(cat keys/ca.crt)
    </ca>
    <cert>
    $(cat keys/$clientuser.crt)
    </cert>
    <key>
    $(cat keys/$clientuser.key)
    </key>
    <tls-crypt>
    $(cat keys/ta.key)
    </tls-crypt>
    EOF
    chmod +x $clientuser.ovpn
  2. Ejecútelo para generar el archivo .ovpn:

    ./clientevpn.sh <nombre_cliente>
  3. El archivo resultante será el configurador para el cliente OpenVPN.

Finalmente, reinicie la máquina para que los cambios surtan efecto:

reboot