domingo, 21 de julio de 2013

Convierte tu Raspberry Pi en un servidor VPN con OpenVPN

Este artículo es una traducción al español de "Turn your Raspberry into an OpenVPN VPN-server" del sitio Raspberry Pi Hacks

Si estás en una red pública, por ejemplo en la universidad o en un aeropuerto, tu tráfico de datos puede ser grabado y desencriptado. Para prevenir que otros hagan esto pueden enviar tu tráfico de datos a través de un tunel seguro VPN. Los túneles VPN envían tu tráfico encriptado a un servidor que procesa tus peticiones.

Requerimientos:
  • Raspberry Pi
  • Raspbian o similar
  • OpenVPN
En el siguiente tutorial aprenderás como correr un servidor OpenVPN en tu Raspberry Pi:

Paso 1
Para ser capaz de instalar la última versión del programa deberemos actualizar nuestra fuente de paquetes:
sudo apt-get update

Paso 2
Ahora instalaremos OpenVPN y OpenSSL.
sudo apt-get install openvpn openssl

Paso 3
Cambiamos al directorio de OpenVPN y pegamos un directorio que necesitaremos a continuacion.
cd /etc/openvpn 
sudo cp -r /usr/share/doc/openvpn/examples/easy-rsa/2.0 ./easy-rsa

Paso 4
Ahora abrimo el archivo easy-rsa/vars con el nano y aplicamos el siguiente cambio:
nano /easy-rsa/vars 
export EASY_RSA="`pwd`"
export EASY_RSA="/etc/openvpn/easy-rsa"

Paso 5
Cambiamo al directorio, nos logeamos como root y realizamos algunas configuraciones.
cd easy-rsa
sudo su
source vars
./clean-all
./pkitool --initca
ln -s openssl-1.0.0.cnf openssl.cnf


Paso 6
Ahora seremos capaces de generar los componentes para la encriptación de OpenVPN. Después de la primera entrada se te preguntará por la abreviación de tu pais (ES=España, MX=México, VE=Venezuela, etc.). Las siguiente entradas serán simplemente confirmadas.
./build-ca OpenVPN
./build-key-server server
./build-key client1


Paso 7
El cálculo de los últimos componentes puede durar algunos minutos.
./build-dh
exit

Paso 8
Tenemos que cambiar al directorio anterior otra vez y crea el archivo openvpn.conf con el siguiente contenido:
cd ..
sudo touch openvpn.conf
sudo nano openvpn.conf


dev tun
proto udp
port 1194
ca /etc/openvpn/easy-rsa/keys/ca.crt
cert /etc/openvpn/easy-rsa/keys/server.crt
key /etc/openvpn/easy-rsa/keys/server.key
dh /etc/openvpn/easy-rsa/keys/dh1024.pem
user nobody
group nogroup
server 10.8.0.0 255.255.255.0
persist-key
persist-tun
status /var/log/openvpn-status.log
verb 3
client-to-client
push "redirect-gateway def1"
#set the dns servers
push "dhcp-option DNS 8.8.8.8"
push "dhcp-option DNS 8.8.4.4"
log-append /var/log/openvpn
comp-lzo


Puedes cambiar si quieres la información de los DNS a unos de tu preferencia.

Paso 9
Ahora, crea la redirección de internet para los clientes CPN. Si no estás usando un cable ethernet (p.e. Wifi) deberás reemplazar  el "eth0" por el nombre de tu dispositivo de red.
sudo sh -c ‘echo 1 > /proc/sys/net/ipv4/ip_forward’
sudo iptables -t nat -A POSTROUTING -s 10.0.0.0/8 ! -d 10.0.0.0/8 -o eth0 -j MASQUERADE


Paso 10
Uno de los pasos finales será borrar el "#" delante de la línea net.ipv4.ip_forward=1 en sysctl.conf.
cd ..
sudo nano sysctl.conf


Paso 11
Una parte de la configuración anterior tiene que endosarse como un crontab para funcionar permanentemente. Inserta la siguiente línea al final del archivo crontab (reemplaza "eth0" si lo hiciste arriba). 
crontab -e
@reboot sudo iptables -t nat -A POSTROUTING -s 10.0.0.0/8 ! -d 10.0.0.0/8 -o eth0 -j MASQUERADE

Paso 12
Cambia de nuevo al usuario root y al directorio  /etc/openvpn/easy-rsa/keys en el cual crearemos el archivo  raspberrypi.ovpn y lo llenaremos con el siguiente código (en cursiva). RASPBERRY-PI-IP habrás de reemplazarlo con la ip de tu Raspberry Pi o, si estás usando un servicio tipo DynDNS, con el domino registrado en el servicio.
sudo su
cd /etc/openvpn/easy-rsa/keys
nano raspberrypi.ovpn


dev tun
client
proto udp
remote RASPBERRY-PI-IP 1194
resolv-retry infinite
nobind
persist-key
persist-tun
ca ca.crt
cert client1.crt
key client1.key
comp-lzo
verb 3


Paso 13
Ahora crea un paquete comprimido con todos los archivos necesarios para el cliente VPN, que moveremos al /home/pi y le daremos al usuario pi los derechos necesarios sobre el archivo.
tar czf openvpn-keys.tgz ca.crt ca.key client1.crt client1.csr client1.key raspberrypi.ovpn
mv openvpn-keys.tgz /home/pi
chown pi:pi /home/pi/openvpn-keys.tgz
exit


Paso 14
Reinicia el servidor OpenVPN.
sudo /etc/init.d/openvpn start

Finalizado! Ahora seremos capaces de descargar el archio openvpn-keys.tar.gz al cliente y extraer los archivos a la carpeta del cliente OpenVPN.

Un cliente OpenVPN para Windows en http://openvpn.se/
para Mac: https://code.google.com/p/tunnelblick/
Los usuarios de Linux simplemente instalan el paquete openvpn.

3 comentarios:

  1. Me ha parecido muy claro, voy a seguirlo a ver si lo consigo y comento.
    Saludos!

    ResponderEliminar
  2. No consigo pasar del paso 4. El terminal me dice "No such file or directory".

    ResponderEliminar
  3. Me pasa lo mismo que a Santi, podrias resolverlo?

    ResponderEliminar