# Cómo Configurar un Servidor OpenVPN en Debian 12

- Link: https://binariocero.com/linux/como-configurar-un-servidor-openvpn-en-debian-12
- Published: 2024-12-06T12:39:21+01:00
- Author: Juan José Fernández Durán

![Loading](https://binariocero.com/wp-content/plugins/page-views-count/ajax-loader-
2x.gif)

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:

    ```wp-block-preformatted
    reboot
    ```
