OpenVPN: establecer túnel como servicio (rápido y sucio)
No tengo mucho que decir sobre OpenVPN, es actualmente la niña bonita en lo que a tecnologías VPN se refiere, sobre todo por la flexibilidad frente a soluciones mas estructuradas tales como IPSec.
Vamos a lo concreto, el objetivo de este corto post es que una PC/Server (con GNU/Linux) actuando como cliente se mantenga conectado todo el tiempo a otro servidor remoto con OpenVPN por supuesto.
Tampoco voy a explicar cómo poner en producción un servidor principal, internet tiene ya bastantes tutoriales al respecto.
Asi que teniendo en cuenta que ya tenemos en nuestro cliente los siguientes archivos necesarios para conectarnos los cuales “generalmente” son:
- ca.crt
- forest.key
- forest.crt
- server.conf
Los 3 primeros se generan en el servidor remoto y se envían mediante un canal seguro a cada cliente para que con ellos se pueda establecer el túnel, el archivo /etc/openvpn/server.conf (puede tener cualquier otro nombre) es el que se usará de forma automática por el script de arranque (en /etc/init.d/openvpn).
Al existir entonces un /etc/openvpn/server.conf con un simple:
1 | lupin:~# /etc/init.d/openvpn restart |
lupin:~# /etc/init.d/openvpn restart
es suficiente para establecer el túnel.
Agrego un server.conf de ejemplo que utilizo:
12
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
| lupin:~# cat /etc/openvpn/server.conf client dev tun proto udp remote remoteserver.dnsalias.com 1194 resolv-retry infinite nobind persist-key persist-tun ca /etc/openvpn/ca.crt cert /etc/openvpn/forest.crt key /etc/openvpn/forest.key ns-cert-type server comp-lzo verb 4 mute 20 keepalive 10 60 status openvpn-status.log log /var/log/openvpn.log log-append /var/log/openvpn.log |
lupin:~# cat /etc/openvpn/server.conf client dev tun proto udp remote remoteserver.dnsalias.com 1194 resolv-retry infinite nobind persist-key persist-tun ca /etc/openvpn/ca.crt cert /etc/openvpn/forest.crt key /etc/openvpn/forest.key ns-cert-type server comp-lzo verb 4 mute 20 keepalive 10 60 status openvpn-status.log log /var/log/openvpn.log log-append /var/log/openvpn.log
Y listo, revisando /var/log/openvpn.log (para asegurarnos)
12
3
4
5
6
7
8
9
10
11
| lupin:~# tail -f /var/log/openvpn.log Tue May 25 10:20:28 2010 us=740030 OPTIONS IMPORT: --ifconfig/up options modified Tue May 25 10:20:28 2010 us=740083 OPTIONS IMPORT: route options modified Tue May 25 10:20:28 2010 us=740121 OPTIONS IMPORT: --ip-win32 and/or --dhcp-option options modified Tue May 25 10:20:28 2010 us=740507 ROUTE default_gateway=x.x.x.x Tue May 25 10:20:28 2010 us=750255 TUN/TAP device tun0 opened Tue May 25 10:20:28 2010 us=750385 TUN/TAP TX queue length set to 100 Tue May 25 10:20:28 2010 us=750483 /sbin/ifconfig tun0 10.8.0.2 pointopoint 10.8.0.1 mtu 1500 Tue May 25 10:20:28 2010 us=754493 /sbin/route add -net 192.168.0.0 netmask 255.255.255.0 gw 10.8.0.1 Tue May 25 10:20:28 2010 us=756558 /sbin/route add -net 10.8.0.0 netmask 255.255.255.224 gw 10.8.0.1 Tue May 25 10:20:28 2010 us=758375 Initialization Sequence Completed |
lupin:~# tail -f /var/log/openvpn.log Tue May 25 10:20:28 2010 us=740030 OPTIONS IMPORT: --ifconfig/up options modified Tue May 25 10:20:28 2010 us=740083 OPTIONS IMPORT: route options modified Tue May 25 10:20:28 2010 us=740121 OPTIONS IMPORT: --ip-win32 and/or --dhcp-option options modified Tue May 25 10:20:28 2010 us=740507 ROUTE default_gateway=x.x.x.x Tue May 25 10:20:28 2010 us=750255 TUN/TAP device tun0 opened Tue May 25 10:20:28 2010 us=750385 TUN/TAP TX queue length set to 100 Tue May 25 10:20:28 2010 us=750483 /sbin/ifconfig tun0 10.8.0.2 pointopoint 10.8.0.1 mtu 1500 Tue May 25 10:20:28 2010 us=754493 /sbin/route add -net 192.168.0.0 netmask 255.255.255.0 gw 10.8.0.1 Tue May 25 10:20:28 2010 us=756558 /sbin/route add -net 10.8.0.0 netmask 255.255.255.224 gw 10.8.0.1 Tue May 25 10:20:28 2010 us=758375 Initialization Sequence Completed
El “Initialization Sequence Completed” es sinónimo de una conexión exitosa, resta por supuesto verificar que pueden llegar al/los hosts remotos con ICMP (ping para los amigos) u otro protocolo.
