Luego de instalar y configurar un cliente OpenVPN tuve la necesidad de que el mismo utilice una dirección IP estática en la red privada. Esto generalmente ocurre porque necesitamos permitir el acceso en firewalls de otros sistemas en la misma red privada según la IP del cliente. Por lo tanto esta debe ser fija y conocida.

Por defecto, un servidor OpenVPN provee DHCP para asignar direcciones IP a sus clientes. Sin embargo es posible forzar el uso de una IP fija a través de la directiva ifconfig-push. Este artículo explica cómo configurar una IP estática para un cliente OpenVPN, a través del uso y funcionamiento de dicha directiva.



A diferencia de las asignaciones fijas de direcciones IP en un servidor DHCP, donde la reserva se hace según la MAC address de la interfaz de red del cliente, en una VPN esto no es posible, pues la MAC address del cliente no es conocida a priori (y, peor aún, puede variar ya que se permite que un cliente pueda acceder desde diferentes dispositivos con un mismo certificado SSL).

En OpenVPN entonces, la asignación, reserva o configuración de una dirección IP estática para un cliente se hace por certificado, según su CN (Common Name).

Manos a la obra

Supongamos que se desea que a cierto cliente se le asigne al dirección IP 10.8.0.100. Antes de empezar, cabe destacar que toda la configuración se hace en el servidor, no en el cliente.

Cambiar al directorio de configuración del servidor OpenVPN y editar el archivo de configuración del mismo:

root@vpn:~# cd /etc/openvpn/
root@vpn:/etc/openvpn# nano server.conf

Habilitar el uso del directorio de configuración por cliente:

# having the certificate common name "Thelonious"
# also has a small subnet behind his connecting
# machine, such as 192.168.40.128/255.255.255.248.
# First, uncomment out these lines:
client-config-dir ccd

Por defecto se utiliza el nombre de directorio ccd, aunque puede cambiarse por cualquier otro.

Crear el directorio:

root@vpn:/etc/openvpn# mkdir ccd

En este directorio es posible agregar un archivo de configuración específico para cada cliente. Cada cliente se identifica por el CN (Common Name) de su certificado.

Si no se recuerda el CN de un cliente en particular, es posible obtenerlo con el siguiente comando:

root@vpn:/etc/openvpn# openssl x509 -in easy-rsa/keys/cliente1.crt -noout -subject | sed 's/,/\n/g' | grep CN
 CN = cliente1

Aunque generalmente (si se utilizó el framework easy-rsa para generar y administra la CA) éste coincide con el nombre del archivo del certificado cliente.

El nombre del archivo de configuración entonces debe ser igual al CN. Crear dicho archivo de configuración específico para el cliente:

root@vpn:/etc/openvpn# nano ccd/cliente1

Agregar la directiva ifconfig-push para asignar la dirección IP fija:

ifconfig-push 10.8.0.100 255.255.255.0

Tal como se observa, esta directiva incluye la dirección IP y su máscara.

Finalmente, reiniciar o recargar la configuración del servidor VPN:

root@vpn:/etc/openvpn# systemctl restart openvpn

Prueba de funcionamiento

Verificar el acceso al cliente con la nueva IP:

root@vpn:/etc/openvpn# ping -c 1 10.8.0.100
PING 10.8.0.100 (10.8.0.100) 56(84) bytes of data.
64 bytes from 10.8.0.100: icmp_seq=1 ttl=64 time=905 ms

--- 10.8.0.100 ping statistics ---
1 packets transmitted, 1 received, 0% packet loss, time 0ms
rtt min/avg/max/mdev = 905.546/905.546/905.546/0.000 ms

Es importante notar que, al hacer este cambio, no se requiere reiniciar el cliente (las maravillas de la implementación de OpenVPN). Al reiniciar el servidor de VPN, el cliente se reconecta automáticamente y aplica la nueva configuración.

Por supuesto, desde el cliente es posible notar que la dirección IP de la interfaz TUN ha cambiado:

luser@ubuntu1604:~$ ip a s dev tun0
10: tun0: <POINTOPOINT,MULTICAST,NOARP,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UNKNOWN group default qlen 100
    link/none
    inet 10.8.0.100 peer 255.255.255.0/32 scope global tun0
       valid_lft forever preferred_lft forever
    inet6 fe80::saraza/64 scope link flags 800
       valid_lft forever preferred_lft forever

Ya explicaré en un próximo artículo cuál fue el sentido de configurar una IP estática a mi cliente de VPN.


Tal vez pueda interesarte


Compartí este artículo