Archive for the ‘OpenVPN’ Category.

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.