Instalación de servidor OpenVPN

Después de leer las últimas noticias sobre CarrierIQ me he decidido a rootear mi teléfono Android e instalar CyanogenMod 7.1 para quitarme la ROM del operador y poder tunelizar las conexiones por VPN. No me voy a explayar en el proceso de rooteado del teléfono (un HTC Desire) ya que hay muchas guías que lo explican y con unrevoked es muy sencillo.

Voy a explicar cómo configurar un servidor VPN para poder usarlo desde el teléfono.

Primero instalamos el servidor:

# yum install openvpn

OpenVPN funciona con una infraestructura de claves públicas, generando un CA y emitiendo certificados para los clientes. Hay una serie de scripts que nos ayudan en esta tarea. Están en el directorio /usr/share/openvpn/easy-rsa/2.0

Edito el fichero vars , donde se encuentras las variables de configuración, los campos que he modificado son:

export KEY_CONFIG=/usr/share/openvpn/easy-rsa/2.0/openssl-1.0.0.cnf
export KEY_SIZE=2048
# These are the default values for fields
# which will be placed in the certificate.
# Don't leave any of these fields blank.
export KEY_COUNTRY="ES"
export KEY_PROVINCE="Provincia"
export KEY_CITY="Ciudad"
export KEY_ORG="Org"
export KEY_EMAIL="email@ejemplo.com"
#export KEY_EMAIL=mail@host.domain
export KEY_CN=vpn.ejemplo.com
export KEY_NAME=ejemploVPN
export KEY_OU=IT
export PKCS11_MODULE_PATH="dummy"
export PKCS11_PIN="dummy"

Primero creamos la CA y el certificado del servidor:

# source ./vars
# ./clean-all
# ./build-dh
# ./pkitool --initca
# ./pkitool --server myserver

Antes de crear el certificado del cliente, editamos el fichero vars y cambiamos el valor de KEY_CN

# source ./vars
# ./pkitool myHTC

Todas las claves se guardan en el directorio /usr/share/openvpn/easy-rsa/2.0/keys Hay que tener en cuenta que las que tienen extensión .key son claves privadas, por lo que mucho cuidado con ellas.

Ahora procedemos a configurar el servidor. He copiado el fichero de configuración de ejemplo y he creado un directorio para las claves:

# cp /usr/share/doc/openvpn-2.2.1/sample-config-file/server.conf /etc/openvpn/
# mkdir -p /etc/openvpn/keys
# cp /usr/share/openvpn/easy-rsa/2.0/keys/ca.crt /etc/openvpn/keys
# cp /usr/share/openvpn/easy-rsa/2.0/keys/myserver.crt /etc/openvpn/keys
# cp /usr/share/openvpn/easy-rsa/2.0/keys/myserver.key /etc/openvpn/keys
# cp /usr/share/openvpn/easy-rsa/2.0/keys/dh2048.pem /etc/openvpn/keys
# chmod 0600 /etc/openvpn/keys/*.key

Edito server.conf , Las opciones que he dejado son:

port 1194
proto udp
dev tun
ca /etc/openvpn/keys/ca.crt
cert /etc/openvpn/keys/myserver.crt
key /etc/openvpn/keys/myserver.key  # This file should be kept secret
dh /etc/openvpn/keys/dh2048.pem
server 10.32.41.0 255.255.255.0
ifconfig-pool-persist ipp.txt
push "redirect-gateway def1 bypass-dhcp"
push "dhcp-option DNS 8.8.8.8"
push "dhcp-option DNS 8.8.4.4"
keepalive 10 120
comp-lzo
user nobody
group nobody
persist-key
persist-tun
status openvpn-status.log
verb 3

Con la opción de redirect-gateway hacemos que la puerta de enlace predeterminada de los dispositivos que se conecten sea nuestro servidor VPN, para que todo el tráfico vaya encriptado. Para que esto funcione hay que hacer NAT de la dirección origen y abrir el puerto del servidor:

# iptables -A INPUT -p udp -m udp --dport 1194 -j ACCEPT
# iptables -t nat -A POSTROUTING -s 10.32.41.0/24 -o venet0 -J SNAT --to-source <IP Pública>
# echo 1 > /proc/sys/net/ipv4/ip_forward
# service iptables save

Añado a /etc/sysctl.conf

net.ipv4.ip_forward = 1

Habilito el servicio y lo arranco:

# chkconfig openvpn on
# service openvpn start

La parte del servidor ya está configurada. Ahora debemos pasar los certificados necesarios al teléfono, para ello primero tenemos que transformar el certificado del cliente (acordaros de ponerle contraseña):

# openssl pkcs12 -export -in myHTC.crt -inkey myHTC.key -certfile ca.crt -name myHTC -out myHTC.p12

Copiamos ca.crt y myHTC.p12 al directorio raíz de la tarjeta SD del teléfono. y en Ajustes, Seguridad importamos los dos certificados. Seguramente tendremos que darle una contraseña al almacén de certificados.

Con esto hecho, ya podemos configurar la VPN, en Ajustes de red, Conexiones VPN creamos una nueva del tipo OpenVPN. Metemos el nombre, dirección del servidor, seleccionamos los certificados y le damos al menú para entrar en las opciones avanzadas, donde hay que habilitar la compresión LZO y el enrutamiento de todo el tráfico por la VPN.

Ya solo queda darle a conectar y comprobar que todo funciona correctamente. Podemos usar alguna página como What’s my IP para comprobar que estamos saliendo con la IP del servidor.

Con esta configuración ya podemos usar sin miedo redes wifi públicas. A ver si en un futuro Google incluye alguna de estas características en la versión de fábrica de Android. ¡Feliz navegación!

Advertisements

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s