====== 212.5 OpenVPN ======
Pertenece a [[informatica:certificaciones:lpic:lpic-2:212_system_security|Topic 212: System Security]]
* **Weight**: 2
* **Description**: Candidates should be able to configure a VPN (Virtual Private Network) and create secure point-to-point or site-to-site connections.
* **Key Knowledge Areas**:
* OpenVPN
* **Terms** and **Utilities**:
* ''/etc/openvpn/''
* ''openvpn''
**OpenVPN** es un programa open source para la creación de túneles seguros (VPN, //Virtual Private Network//).
OpenVPN está disponible en Debian a través del paquete ''openvpn''
A diferencia de las VPN habituales, no se basa en IPsec sino en **SSL**.
Proporciona servicios de:
* **Autenticación**: soporta varios modos, pero los dos más comunes son la autentificación por compartición de claves y la autentificación con certificados digitales X509.
* **Confidencialidad**: la confidencialidad de las comunicaciones está garantizada por el uso de la librería OpenSSL. Para la encriptación se utiliza por defecto el algoritmo Blowfish.
* **Control de integridad**.
===== Modos de funcionamiento =====
* **point-to-point**: en el que los dos protagonistas de la VPN (Cliente y Servidor) son al mismo tiempo los extremos del túnel y los extremos de la comunicación.
* **site-to-site**: dos servidores OpenVPN proporcionan entonces un túnel, pero los extremos del tráfico son las dos redes conectadas. De este modo, los servidores OpenVPN realizan además una función de enrutamiento entre ambas redes. Este modo nos permitirá conectar máquinas de una red a máquinas de una red distinta.
* **bridge**: se conectan dos redes remotas como si se hubiera añadido un cable entre los switches. Es un modo muy poco utilizado. DHCP puede funcionar en este modo (y cualquier servicio que funciona por broadcast) para funcionar entre sedes.
===== Creación de un túnel punto a punto =====
==== Gestión de la autenticación ====
Generamos el fichero de clave en el **servidor**:
openvpn --genkey --secret
Ejemplo:
# cat archivo_clave.key
#
# 2048 bit OpenVPN static key
#
-----BEGIN OpenVPN Static key V1-----
ae11344ce37de44dcce059ecf9fa573f
a2694d5531bc7ed144a12a099c4ef8ce
(...)
1d37552cd4f29ff6b719588056a60777
579cc2aff71bf339f5293bf08f2ce4df
-----END OpenVPN Static key V1-----
Es necesario que el cliente tenga la clave creada en el servidor, así que se la pasamos:
scp archivo_clave.key root@cliente:/root
==== Archivos de configuración ====
Los archivos de configuración se encuentran por defecto en el directorio ''/etc/openvpn'' y suelen llamarse ''client.conf'' y ''server.conf'':
remote
dev tun
ifconfig
secret
route
* ''remote servidor'': en el cliente únicamente. ''servidor'' indica el nombre o la dirección IP del servidor al que se debe conectar la VPN.
* ''dev tun'': crea una encapsulación de tipo túnel, es decir, point-to-point o site-to-site (''tap'' es para conexión bridge).
* ''ifconfig IP_local IP_remota'': establece las direcciones locales y remotas de los extremos de la comunicación. Estas direcciones estarán visibles en forma de interfaz virtual en la configuración de red del host.
* ''secret archivo_clave'': indica qué archivo contiene la clave compartida, idéntica en ambas máquinas.
* ''route red_remota máscara'': parámetro del cliente: indica la dirección de red privada detrás del servidor para que el tráfico con destino esta red se enrute correctamente por la VPN.
Iniciamos el servicio (cliente / servidor):
/etc/init.d/openvpn start
Ejemplo completo:
# En el servidor
# vi /etc/openvpn/server.conf
dev tun
ifconfig 10.8.0.1 10.8.0.2
secret secret.key
# En el cliente
# vi /etc/openvpn/client.conf
remote vpn.example.com
dev tun
ifconfig 10.8.0.2 10.8.0.1
secret secret.key
route 192.168.1.0 255.255.255.0
Se puede comprobar el correcto funcionamiento con el comando ping.
OpenVPN por defecto, utiliza el puerto **1194/UDP**.
Para obtener la información de routing y la lista de clientes actualmente conectados podemos ejecutar en el servidor el comando:
/etc/init.d/openvpn status
Ejemplo de una sesión:
servidor# ifconfig tun0
tun0: error fetching interface information: Device not found
servidor# /etc/init.d/openvpn start
Starting virtual private network daemon: client.
servidor# ifconfig tun0
tun0 Link encap:UNSPEC HWaddr 00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00
inet adr:10.8.0.2 P-t-P:10.8.0.1 Mask:255.255.255.255
UP POINTOPOINT RUNNING NOARP MULTICAST MTU:1500 Metric:1
RX packets:0 errors:0 dropped:0 overruns:0 frame:0
TX packets:0 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:100
RX bytes:0 (0.0 B) TX bytes:0 (0.0 B)
servidor# ping 10.8.0.1
PING 10.8.0.1 (10.8.0.1) 56(84) bytes of data.
64 bytes from 10.8.0.1: icmp_seq=1 ttl=64 time=0.864 ms