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:
Estos son los pasos para dejar funcionando el servidor OpenVPN, utilizando los scripts que vienen con easy-rsa para generar los certificados.
apt-get update apt-get install -y openvpn openssl
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
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 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:
</WRAP>
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
Para que inicie OpenVPN descomentar la variable AUTOSTART:
vim /etc/default/openvpn AUTOSTART="all"
La operación de instalación del cliente debe ser realizada para cada cliente que se va a conectar en la VPN.
apt-get update apt-get install -y openvpn openssl
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>
<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:
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:
</WRAP>
En el cliente se inicia el servicio de openvpn:
service openvpn start
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:
Cliente: por la configuración dada, se modifica:
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