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:
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
<WRAP center round important 60%> En el directorio /etc/openvpn servidor quedan los siguientes archivos:
- server.conf
- ca.crt
- dh1024.pem
- server.crt
- server.key
</WRAP>
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:
<WRAP center round tip 60%> 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</WRAP>
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
<WRAP center round info 60%> 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. </WRAP>
Generar certificados para el cliente
<wrap em>Esta operación se ejecuta en el servidor</wrap>
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/
<WRAP center round important 60%> En el directorio /etc/openvpn cliente quedan los siguientes archivos:
- client.conf
- ca.crt
- client.crt
- client.key
</WRAP>
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