jump to navigation

Túneles OpenVPN desde portátil e iPhone 21 febrero, 2013

Posted by ubanov in Informática-Linux, seguridad, Telefonía.
trackback

Antes de nada debo reconocer que soy un poco friki… una de esas personas que quieren tener acceso a sus ordenadores desde cualquier lugar y en cualquier momento. Para hacer esto utilizaba una unión de VPN (con OpenVPN) y abrir los puertos de algunos servicios.

Abría puertos para cosas que quería tener siempre abiertas desde no podía establecer VPN, por ejemplo del móvil (he intentado varias veces configurar VPN con el móvil y no he conseguido hasta ahora).

Recientemente la gente de OpenVPN han sacado su cliente de VPN para iOS (iPhone/iPad), con esto he conseguido tener por fin mi VPN como yo la quería.

Aprovechando que escribo la entrada para el tema del iPhone voy a describir mi configuración de VPN con mis portátiles también.

Yo tengo un ordenador con Debian que es el que se encarga de tener diferentes servidores, entre ellos el servidor de OpenVPN.

Sobre este servidor para instalar los paquetes de openvpn hay que ejecutar los siguientes dos comandos:

apt-get install openvpn
apt-get install bridge-utils

Esto nos instala los programas y ahora hay que configurarlos. Bridge-utils en realidad es para poder hacer tuneles de nivel 2 (bridging).

Vamos a empezar configurando todo el tema de certificados que OpenVPN necesita. Empezamos copiando la configuración de ejemplo para crear un CA y certificados.

cp -R /usr/share/doc/openvpn/examples/easy-rsa /etc/openvpn

Sobre dicha configuración editamos el fichero vars, y ponemos nuestros datos:

cd /etc/openvpn/easy-rsa/2.0
# editar vars
cat >>/etc/openvpn/easy-rsa/2.0/vars <<EOF
export KEY_COUNTRY=”ES”
export KEY_PROVINCE=”BI”
export KEY_CITY=”Bilbao”
export KEY_ORG=”ubanov”
export KEY_EMAIL=”myemail@mydomain.com”
EOF

Creamos los certificados del CA (Certificate Authority):

source ./vars
./clean-all
./build-ca

Y el certificado del servidor:

./build-key-server server

Creamos los ficheros DH:

./build-dh

Y ya tendríamos lo básico. Ahora nos restaría ir creando certificados para cada uno de los dispositivos que se van a conectar a la VPN. A priori dos clientes NO pueden compartir certificado.

./build-key client1
./build-key client2

En lugar de clientX podemos poner algo más descriptivo (MacBookAir, iPhone4S, MacBookRetina, iPad…)

OpenVPN permite hacer dos tipos de túneles, los túneles a nivel 2 (es decir el dispositivo remoto es como si estuviese en la misma red de nuestro servidor de túneles), y los túneles a nivel 3 (se crea una nueva red que hay que routar). Normalmente yo utilizo tuneles L2 para conectar los ordenadores/portátiles por que me simplifica mucho el uso (ves los servidores de red como si estuvieses en dicha red…). Desafortunadamente el cliente de iphone sólo permite túneles de Layer 3.

La configuración de mi servidor de OpenVPN para el tunel de nivel 2 es la siguiente:

cat >/etc/openvpn/server-l2.conf <<EOF

dev tap0
tls-server
dh easy-rsa/2.0/keys/dh1024.pem
ca easy-rsa/2.0/keys/ca.crt
cert easy-rsa/2.0/keys/server.crt
key easy-rsa/2.0/keys/server.key
log /var/log/openvpn.log
comp-lzo
script-security 2
route-up “/sbin/ifconfig tap0 up”
port 1197
proto udp
keepalive 30 120
cipher AES-256-CBC
server-bridge 192.168.4.199 255.255.255.0 192.168.4.3 192.168.4.49
client-to-client
push “route 192.168.4.0 255.255.255.0”
#push “route 0.0.0.0 0.0.0.0”
EOF

Hacer constar que la dirección de mi servidor debian es la 192.168.4.199… que mi red es la 192.168.4.0, y que en mi servidor DHCP las direcciones de la 3 a la 49 están libres (de forma que los clientes que se conecten recibirán una dirección de este rango, según lo indicado en la línea server-bridge).

La configuración del túnel de capa 3 es la siguiente:

cat >/etc/openvpn/server-l3.conf <<EOF
dev tun0
tls-server
dh easy-rsa/2.0/keys/dh1024.pem
ca easy-rsa/2.0/keys/ca.crt
cert easy-rsa/2.0/keys/server.crt
key easy-rsa/2.0/keys/server.key
log /var/log/openvpn.log
comp-lzo
script-security 2
route-up “/sbin/ifconfig tun0 up”
port 1198
proto udp
keepalive 30 120
cipher AES-256-CBC
server 192.168.5.0 255.255.255.0
client-to-client
push “route 192.168.4.0 255.255.255.0”
#push “route 0.0.0.0 0.0.0.0”
EOF

Con esto crearemos una nueva red (la 192.168.5.x) para los dispositivos que se conecten por esta VPN.

Para hacer la configuración de capa 2 es necesario hacer unos pequeños cambios en la configuración de la red. Para ello es necesario habilitar el briging. Aquí hago la configuración básica del bridge añadiendo como único interface el ethernet (eth0)

cat >/etc/network/interfaces <<EOF
auto br0
iface br0 inet static
bridge_ports eth0
bridge_stp no
address 192.168.4.199
netmask 255.255.255.0
network 192.168.4.0
broadcast 192.168.4.255
gateway 192.168.4.1
EOF

Para acabar la configuración vamos a impedir que el OpenVPN arranque automáticamente, y vamos a poner su arranque desde el fichero rc.local. Desde donde, para la capa 3 habilitaremos el ip_forwaring (el routing de paquetes) y para el tunel de capa 2 crearemos el interface virtual…

Los comandos para hacerlo son los siguientes:

rm /etc/rc2.d/S16openvpn

cat >/etc/rc.local <<EOF
#!/bin/sh -e
# IVAN: habilitar ip forward (para layer 3)
echo 1 >/proc/sys/net/ipv4/ip_forward
# crear tunel tap (para layer 2)
/usr/sbin/openvpn –mktun –dev tap0
/usr/sbin/brctl addif br0 tap0
/sbin/ifconfig tap0 0.0.0.0 promisc up
/sbin/ifconfig eth0 0.0.0.0 promisc up
# arrancar openvpn
/etc/init.d/openvpn start
exit 0
EOF

Para acabar necesitaremos configurar en el router una ruta estática, que para llegar a la red 192.168.5.x (las direcciones del túnel L3) se haga a través de la dirección 192.168.4.199. Y configurar el NAT para que los puertos UDP 1197 y 1198 vayan contra nuestro servidor de túneles.

Con esto ya tendríamos toda la parte del servidor/central. Nos falta la configuración de los clientes.

La configuración va a constar siempre de 4 ficheros. El fichero ca.crt y los ficheros clientX.crt y clientX.key (todos ellos sacados del directorio de /etc/openvpn/easy-rsa/2.0/keys). El cuarto fichero de configuración dependerá de que tipo de tunel necesitemos.

Para el Tunel L2 se necesitaría el siguiente fichero client.ovpn:

client
dev tap
tls-client
remote direccion_server.dyndns.org
port 1197
proto udp
ca ca.crt
cert MacBookRetina.crt
key MacBookRetina.key
comp-lzo
cipher AES-256-CBC
pull

Para el Tunel L3 (por ejemplo el iPhone) la configuración sería:

client
dev tun
tls-client
remote direccion_server.dyndns.org
port 1198
proto udp
ca ca.crt
cert iPhone4S.crt
key iPhone4S.key
comp-lzo
cipher AES-256-CBC
pull

Por acabar falta comentar cómo poder subir los ficheros de configuración al OpenVPN del iPhone/iPad.

Para hacerlo una forma sencilla de hacerlo es utilizando iTunes. Seleccionamos el dispositivo, vamos a aplicaciones, seleccionamos OpenVPN y arrastramos los ficheros.

configuracion openvpn desde iphone

Una vez sincronizado desde la aplicación  tendremos que ir al móvil a la aplicación OpenVPN y pulsar en el “+” verde para incorporar el perfil:

2013-02-20 23.59.13 2013-02-21 00.06.35

Una vez de importado, para conectar hay que marcar el switch de debajo de “Disconected”… esto nos conectará:

2013-02-21 00.07.24

Todos los comandos de creación de ficheros los he hecho como ejemplo, ejecutarlos con cuidado que yo no me responsabilizo de lo que puedas romper😛

Comentarios»

1. pedro - 3 mayo, 2013

Gracias por tu artículo.

He hecho el tunel entre el iphone y mi servidor.

Solo hay un problema ¿sabes algo de si Airprint te funciona en este esquema?

Lo digo porque sospecho que necesita “tap” y ese dispositivo creo que no lo soporta el cliente opnvpn del iphone.

2. Fox - 21 abril, 2014

Puedes ayudarme con la configuración en Windows , te lo agradecería mucho . Asia como tu también busco conexión en todos mis dispositivos . Desde ya muchas gracias


Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s

A %d blogueros les gusta esto: