====== OpenVPN con easy-rsa ======
En términos generales se describe cómo se configura un **server** OpenVPN en la red interna que recibe las conexiones públicas por reenvío de puerto 1194/UDP desde el router o firewall de borde. Como resultado de la VPN, el **client** puede acceder a todos los equipos que están en la red privada 10.0.1.0/24, como muestra el siguiente esquema:
{{ :documentos:seguridad:openvpn.png?direct&600 |}}
===== Servidor =====
Estos son los pasos para dejar funcionando el servidor OpenVPN, utilizando los scripts que vienen con **easy-rsa** para generar los certificados.
==== Instalar ====
apt-get update
apt-get install -y openvpn openssl
==== Configurar OpenVPN Server ====
Tomar la configuración de ejemplo que viene con el paquete:
cp /usr/share/doc/openvpn/examples/sample-config-files/server.conf.gz /etc/openvpn/
cd /etc/openvpn/
gzip -d server.conf.gz
Editar la configuración y cambiarle las líneas indicadas (están comentadas con punto y coma)
vim server.conf
# Esta ruta es pasada a los clientes para llegar a la red interna
push "route 10.0.1.0 255.255.255.0"
push "redirect-gateway def1 bypass-dhcp"
push "dhcp-option DNS 8.8.8.8"
push "dhcp-option DNS 8.8.4.4"
user nobody
group nogroup
==== Configurar easy-rsa ====
Tomar la configuración que viene en el paquete
mkdir /etc/openvpn/easy-rsa
cp -rf /usr/share/doc/openvpn/examples/easy-rsa/2.0/* /etc/openvpn/easy-rsa
cd /etc/openvpn/easy-rsa
Editar el archivo de variables y adaptar las mismas al entorno donde va a funcionar la VPN:
vim vars
export KEY_COUNTRY="UY"
export KEY_PROVINCE="MVD"
export KEY_CITY="Montevideo"
export KEY_ORG="Pilas.Guru"
export KEY_EMAIL="info@pilas.guru"
export KEY_CN=openvpn-server
export KEY_NAME=server
export KEY_OU=server
Activar la configuración de openssl necesaria:
cp openssl-1.0.0.cnf openssl.cnf
==== Generar certificados para el servidor ====
Generar certificados para la Autoridad de Certificación:
source ./vars
./clean-all
./build-ca
Generar certificados para el servidor OpenVPN:
./build-key-server server
Generar certificados Diffie–Hellman:
./build-dh
copiar certificados generados al directorio /etc/openvpn para que queden disponibles para la VPN
cd /etc/openvpn/easy-rsa/keys
cp dh1024.pem ca.crt server.crt server.key /etc/openvpn
En el directorio /etc/openvpn **servidor** quedan los siguientes archivos:
* server.conf
* ca.crt
* dh1024.pem
* server.crt
* server.key
==== Crear enmascaramiento del trafico de la VPN ====
Se enmascara con la IP de la red interna todo el trafico que llega desde la VPN, para eso se configura iptables como sigue:
no se puede configurar esta línea de iptables hasta tanto no esté levantada la VPN. Por ese motivo se configura en /etc/rc.local ya que es el ultimo script en que ejecuta en el arranque
vim /etc/rc.local
iptables -t nat -A POSTROUTING -s 10.8.0.0/24 -o eth0 -j MASQUERADE
Configurar forwarding entre las interfaces de red:
vim /etc/sysctl.conf
net.ipv4.ip_forward=1
Activar el forwarding configurado:
sysctl -p
==== Habilitar openvpn en el inicio ====
Para que inicie OpenVPN descomentar la variable AUTOSTART:
vim /etc/default/openvpn
AUTOSTART="all"
===== Cliente =====
La operación de instalación del cliente debe ser realizada para **cada** cliente que se va a conectar en la VPN.
==== Instalar ====
apt-get update
apt-get install -y openvpn openssl
==== Configurar OpenVPN Client ====
Tomar la configuración de ejemplo que viene con el paquete:
cp /usr/share/doc/openvpn/examples/sample-config-files/client.conf /etc/openvpn/
Editar la configuración y cambiarle las líneas indicadas (están comentadas con punto y coma)
cd /etc/openvpn/
vim client.conf
remote IP-o-hostname-server 1194
user nobody
group nogroup
En la linea **remote** se coloca el nombre o dirección IP pública del servidor de VPN. Se especifica cómo llega el cliente al servidor para armar la VPN.
A esta dirección se debe acceder mediante puerto **1194/udp** que es la configuración por defecto de OpenVPN.
==== Generar certificados para el cliente ====
Esta operación se ejecuta en el servidor
cd /etc/openvpn/easy-rsa
source ./vars
./build-key client
copiar del servidor los archivos:
* /etc/openvpn/easy-rsa/keys/ca.crt
* /etc/openvpn/easy-rsa/keys/client.crt
* /etc/openvpn/easy-rsa/keys/client.key
y colocarlos en el cliente en la carpeta /etc/openvpn/
En el directorio /etc/openvpn **cliente** quedan los siguientes archivos:
* client.conf
* ca.crt
* client.crt
* client.key
==== Iniciar VPN ====
En el cliente se inicia el servicio de openvpn:
service openvpn start
===== Verificación =====
Una vez levantada la VPN aparece una interfaz **tun0** que presenta las IP de la VPN tanto en el servidor como el cliente.
**Servidor:** en caso de problemas verificar:
* cadena POSTROUTING de la tabla nat, con el comando 'iptables -L -n -t nat'
* archivo /proc/sys/net/ipv4/ip_forward que tiene que tener un 1
* registro del log en el archivo /var/log/daemon.log
**Cliente:** por la configuración dada, se modifica:
* archivo /etc/resol.conf agregando los DNS 8.8.8.8 y 8.8.4.4.
* se agrega a la tabla de rutas cómo llegar a la red detras de la VPN (10.0.1.0), verificar con el comando 'ip route show'
* se debe poder llegar con ping a cualquier host de la red 10.0.1.0
===== Remover cliente para acceder a la VPN =====
Si se necesita remover un cliente, para que ya no tenga acceso a la VPN, los comandos son:
cd /etc/openvpn/easy-rsa
source ./vars
./revoke-full client