Inicio » Linux » Cómo Configurar un Servidor OpenVPN en Debian 12

Cómo Configurar un Servidor OpenVPN en Debian 12

Loading

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="me@myhost.mydomain"
    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