Openvpn ubuntu + redirección de internet
Justo el próximo domingo salgo de viaje, al igual que el año pasado un portátil viajará con migo, pero este año no me pasará lo que me pasó el anterior ¿Que sucedió ? Pues que la red donde me conectaba estaba totalmente capada y con ciertos sitios web restringidos, por ello me he decidido este año antes de salir de viaje a dejarme un servidor como dios manda, he instalado un proxy (squid) y el Openvpn con certificados, además del openssh-server por supuesto.
Aqui explicaré como instalar y configurar el openvpn para que nos permita “salir” a internet a través de él y así saltarnos posibles restricciones de los sitios donde estemos estas vacaciones.
Paso 1: Instalar openvpn tanto en el servidor como en el cliente
sudo apt-get update
sudo apt-get install openvpn
Paso 2: Preliminares
Para en mi caso me conectaré via ssh, cada cual como quiera … y nos copiaremos un directorio el cual nos ayudará a la creación de los certificados:
A partir de aquí todo lo que sigue es ejecutado en el servidor, y por comodidad me pasé a root de la siguiente manera:
sudo su
Luego copiamos el directorio anteriormente mencionado:
cp -ra /usr/share/doc/openvpn/examples/easy-rsa/ /etc/openvpn/
Una vez copiado entramos en el directorio y generamos los certificados tanto para el servidor como para los clientes:
cd /easy-rsa/2.0
Antes de generar los certificados podemos para nuestra posterior comodidad editar el fichero “vars” que se encuentra en el directorio actual.
vim vars
Y cambiamos las siguientes lineas:
export KEY_COUNTRY=”US”
export KEY_PROVINCE=”CA”
export KEY_CITY=”SanFrancisco”
export KEY_ORG=”Fort-Funston”
export KEY_EMAIL=”me@myhost.mydomain”
En mi caso dejaré:
export KEY_COUNTRY=”ES”
export KEY_PROVINCE=”VA”
export KEY_CITY=”Enew”
export KEY_ORG=”MiOrg”
export KEY_EMAIL=”punxos@hotmail.com”
Con ello empezamos con la generación de certificados.
Paso 3: Generación de certificados cliente y servidor
Generamos los certificados:
. vars (notar que empieza por punto y hay un espacio)
./clean-all
./build-ca
Un dato importante es No dejar en blanco el campo “Common Name” en mi caso he puesto el nombre de la maquina ironman, y como se puede ver en la siguiente imagen los campos por defecto se quedan al pulsar “intro”.

Ahora generaremos el certificado del servidor :
./build-key-server server
Como antes dejamos todo por defecto excepto “Common Name” en mi caso le puse “server”.
Luego generamos tantos certificados clientes como queramos, en este caso generamos para el usuario “client1″:
./build-key client
Como antes todos los camos por defecto excepto “Common Name” que ponemos “client1″. En mi caso solo necesito un cliente.
Los parámetros DH se generarán así:
./build-dh
Hasta aquí tenemos todo generado, ahora toca colocar cada cosa en su sitio.
Paso 4: Colocacion de ficheros tanto en servidor como en cliente
En el servidor tenos que tener:
- ca.crt
- ca.key
- server.key
- server.crt
- dh1024.pem
Para ello los copiaremos así:
cp /etc/openvpn/easy-rsa/2.0/keys/ca.crt /etc/openvpn/
cp /etc/openvpn/easy-rsa/2.0/keys/ca.key /etc/openvpn/
cp /etc/openvpn/easy-rsa/2.0/keys/server.key /etc/openvpn/
cp /etc/openvpn/easy-rsa/2.0/keys/server.crt /etc/openvpn/
cp /etc/openvpn/easy-rsa/2.0/keys/dh1024.pem /etc/openvpn/
Ahora en los clientes tenemos 2 maneras o copiar los ficheros y llevarlos físicamente a los clientes, ssh, etc., no re comienda usar canales no seguros tipo telnet, ftp, etc.,
Los ficheros en el cliente serán:
ca.crt
client1.key
client1.crt
Más adelante describiré donde poner los fichero, ya que lógicamente varia si el cliente es Windows o GNU/Linux.
Paso 5: Generación del fichero de configuración del servidor Openvpn
Crearemos el fichero /etc/openvpn/server.conf :
Cuyo contenido será:
port 1194
proto udp
dev tun
ca /etc/openvpn/ca.crt
cert /etc/openvpn/server.crt
key /etc/openvpn/server.key
dh /etc/openvpn/dh1024.pem
server 10.8.0.0 255.255.255.0
ifconfig-pool-persist ipp.txt
keepalive 10 120
comp-lzo
user nobody
group nobody
persist-key
persist-tun
status openvpn-status.log
verb 4
Paso 6 : Prueba servidor Openvpn
Hasta este punto ya podemos iniciar el Openvpn, para ello ejecutamos:
/etc/init.d/openvpn restart
y obube:
* Starting virtual private network daemon.
* server (FAILED)
Despues de mirar logs llegé a la conclusion que no existia el grupo nobody, por ello crearemos el grupo nobody, editando el fichero /etc/group y le añadiremos nobody::65534.
Ahora intentamos de nuevo iniciar el demonio con:
/etc/init.d/openvpn restart
* Starting virtual private network daemon.
* server (OK) [ OK ]
Ahora si! Ya tenemos el servidor Openvpn trabajando.
Paso 7: Cliente Linux
Recordamos que necesitamos tener en /etc/openvpn
ca.crt
client1.key
client1.crt
Luego crearemos el fichero de configuración /etc/openvpn/server.conf, aunque se podria poner /etc/openvpn/client.conf en mi caso para que me funcionase a la hora de iniciar el cliente tengo que especificar que es client.conf (openvpn –config /etc/openvpn/client.conf) pero si le dejo el nombre de server.conf puedo iniciar más tarde el ciente sin necesidad de parámetros.
Por ello el fichero en el cliente /etc/openvpn/server.conf quedará:
client
dev tun
proto udp
remote DireccionIP 1194
resolv-retry infinite
nobind
#Las dos siguientes opciones no van en windows
user nobody
group nobody
redirect-gateway def1
persist-key
persist-tun
ca /etc/openvpn/ca.crt
cert /etc/openvpn/client1.crt
key /etc/openvpn/client1.key
comp-lzo
verb 4
Del cual “client” dice que es cliente i no un servidor, “DireccionIP” es la ip del servidor openvpn y 1194 es el puerto.
Y sobretodo la linea “redirect-gateway def1″ es la encaregada de hacer pasar todo nuestro tráfico por la vpn, osea crea una entrada en nuestra tabla de rutas.
OJO !! En este caso también es necesario crear el grupo nobody, editando como antes el fichero /etc/group y introduciendo:
nobody::65534
Con esto tendríamos que poder conectarnos al server de la siguiente manera:
/etc/init.d/openvpn restart
Ahora al hacer ifconfig aparecerá tun0 con ip 10.8.0.6, como se puede observar en la siguiente imagen:

Si hacemos un ping a la 10.8.0.1 que es la ip privada virtual del servidor nos reponde como esperabamos.
Pero aún no tenemos salida a internet esto lo explico en el paso 9.
Paso 8: Cliente Windows
La instalación del cliente windows es muy sencilla, simplemente descargamos el cliente de http://openvpn.se/download.html yo descargé esta openvpn-2.0.9-gui-1.0.3-install.exe y la instalamos con opciones por defecto, asegurarse de instalar el TAP-Win32 si no estuviera por defecto.
Luego en el directorio c:\Archivos del programa\openvpn\config\ creamos el fichero server.ovpn con contenido:
client
dev tun
proto udp
remote DireccionIP 1194
resolv-retry infinite
nobind
redirect-gateway def1
persist-key
persist-tun
ca ca.crt
cert client1.crt
key client1.key
comp-lzo
verb 4
Fijarse que no es exactamente igual que en clientes linux, y que además los 3 ficheros de claves que son ca.crt, client1.key, client1.crt se pondrán en c:\program files\openvpn\config\
Para conectar con el servidor es muy sencillo, al lado del reloj de windows, veremos un icono del Openvpn, si le damos con el botón derecho nos aparecen las opciones para poder conectar.
Paso 9: Ultimas reglas en el servidor
Para que podamos acceder a internet a través de la VPN ejecutaremos lo siguiente en el servidor:
echo 1 > /proc/sys/net/ipv4/ip_forward
iptables -t nat -A POSTROUTING -s 10.8.0.0/24 -o eth0 -j MASQUERADE
Lógicamente si intentas acceder al rango local del servidor VPN no habrá ningún problema a no ser que el rango VPN del servidor coincida con el de tu red local.
Es decir, el cliente podrá acceder a la LAN remota, si dicha LAN tiene el rango de IP’s distinto a la LAN del cliente, se podría hacer un arreglo aunque tampoco es el objetivo de este manual y es un concepto de redes básico.
Por otro lado el acceso a internet se realizaría sin ningún problema.
Finalmente comentar que para conectarnos desde el exterior tenemos que abrir el puerto 1194 UDP de nuestro router y redirigirlo a al servidor donde esté el Openvpn.
Podeis pasar a preguntar cualquier cosa al foro http://www.punxos.com/foro.html
Un saludo a todos y a disfrutar del verano !