miércoles, 15 de agosto de 2012

Raspberry Pi como Servidor NAS y VPN. Tu nube particular.

Que es Raspberry Pi
Para los que no conozcáis esta maravilla, Raspberry Pi es un ordenador de bajo coste. Tan bajo coste que en el paquete que te envían, solamente encontrarás la placa. Sin fuente de alimentación, ni carcasa ni nada. ¿Pero quien necesita más?

Las utilidades que se le estan dando son muchas; desde cliente XBMC, servidor XBM. consola de videojuegos, servidor LAMP... Practicamente cualquier cosa que se pueda hacer en un ordenador, se puede hacer con uno de estos chiquitines. La gran ventaja es su reducido consumo, su pequeño tamaño y que al no necesitar refrigeración, es totalmente silencioso.

Como podréis imaginar, tampoco es que sea un maquinón. De hecho de potencia anda más bien escaso: http://es.wikipedia.org/wiki/Raspberry_Pi#Especificaciones_t.C3.A9cnicas

Espeficaciones RaspBerry Model B
  • Procesador: ARM ARM1176JZF-S de 700Mhz.
  • Memoria: 256Mb de RAM (Compartidos con la GPU)
  • GPU: Broadcom Broadcom VideoCore IV (Puede reproducir .h264 vídeo en 1080p a 30fps)
  • Sistemas operativos soportados: Debian GNU/Linux, Fedora, Arch Linux
  • Consumo: 700 mA, (3.5 W)
  • Salida de vídeo: HDMI y RCA
















El servidor ideal "para tener en casa"

Antes de nada, hay que aclarar una cosa. .Que nadie pretenda montar un servidor empresarial que tenga que atender cientos de conexiones simultáneas, con un RaspBerry Pi.

Aclarado esto vamos allá.

Que es lo que vamos a hacer.
Es muy simple, vamos a convertir nuestro Raspberry en un disco duro de red (NAS) y además vamos a hacer que ese disco duro esté disponible desde cualquier ordenador o móvil conectado a Internet. Sería mucho más fácil configurar solamente SAMBA y abrir los puertos necesarios en el router para que sea accesible desde Internet.
(137,138,139 UDP y 445 UDP y TCP). Pero el método que propongo en esta entrada es mucho más seguro. Además podrás utilizar la VPN, para acceder a Internet desde sitios poco seguros como aeropuertos, restaurantes, bibliotecas.












Que necesitarás:
-Un Raspberry Pi (Yo he utilizado el Model B) 35$. Lo puedes comprar: http://www.element14.com/community/groups/raspberry-pi ó
http://uk.rs-online.com/web/generalDisplay.html?id=raspberrypi
El problema es que los tiempos de entrega son inaceptables. Yo opté por ebay.
-Un cargador micro USB (Cualquiera de un móvil con más de 750mA) te servirá
-Cable HDMI, o RCA conectado a tu televisor.
-Teclado. (Yo conecté un teclado inalámbrico sin problema).


-Descargar Raspbian “wheezy”  http://www.raspberrypi.org/downloads
-Descargar Win32DiskImager http://www.raspberrypi.org/downloads
-Una tarjeta SD de al menos 2GB. Yo he utilizado una de 16GB clase 10.

Una vez descargada Raspian, la pasaremos a la tarjeta SD mediante el Win32DiskImager. No creo que necesite explicación por que es muy fácil y está muy bien documentado en la página oficial de rasperry.

Ya está, ya tenemos todo listo. Metemos la tarjeta en nuestro juguetito, conectamos el teclado, el cable de red y el vídeo.... Le damos corriente y a funcionar.

No te asustes cuando se quede la pantalla en negro durante bastante tiempo. Es normal.
Cuando haya finalizado de arrancar, se ejecutará automáticamente "raspi-config" (Toma nota, porque puede que quieras volver a entrar en la configuración).

Es muy sencillo:.
  1. Configura el teclado.
  2. Cambia el password del usuario pi
  3. Cambia la variable local y el timezone
  4. En memory_split, yo le asigné el mínimo posible a la gráfica, porque no voy a arrancar en modo gráfico nunca.
  5. Activa el servidor SSH
  6. en Boot_behaviour, no actives el arranque automático en modo gráfico.
  7. Por último dale a la segunda opción "expand_rootfs"

Al finalizar, te dirá que tiene que reiniciarse para expandir la partición root. Tardará bastante.

Una vez finalizado el proceso ya tendremos nuestro raspberry listo. introduce  tu contraseña y teclea lo siguiente:
-- ifconfig (Anota la dirección ip local "inet addr:" del primer interface de red)
Si quieres, ya puedes guardar el teclado y el ratón y acceder mediante SSH.

Conexión vía SSH
Como activamos el servidor SSH, podremos acceder a nuestro raspberry desde cualquier ordenador.
En Microsoft Windows (Necesitaréis descargar el famoso Putty)
En Mac o Linux (Con un terminal abierto: -- ssh pi@direccioniplocal)

Comenzamos a instalar paquetes:
-- sudo apt-get install samba samba-common-bin

Una vez instalado, vamos a configurarlo. Como norma general, yo siempre recomiendo hacer una copia de seguridad de los ficheros de configuración antes de modificarlos.

-- sudo cp /etc/samba/smb.conf /etc/samba/smb.conf.old

Ahora entramos a configurar el servidor.
-- sudo nano /etc/samba/smb.conf

Busca la línea que pone #security = user y quita la "#" de modo que quede:
security = user

Buscamos la sección llamada [HOMES]
Y cambiums read only = yes
por
read only = no
Ahora salimos pulsando Ctrl-X y cuando nos pregunte si queremos salvar el fichero pulsamos "S".

Reiniciamos el servidor Samba
-- sudo /etc/init.d/samba restart

Por defecto, el usuario pi está definido, para que sea un usuario que puede utilizar samba:
-- sudo smbpasswd -a pi

Esto te pedirá que crees un password para el usuario pi en samba. Si quieres crear otros usuarios:
-- sudo useradd pepito -m -G users
-- sudo passwd pepito

Y con esto ya está el servidor listo. Puedes probarlo conectándote a una unidad de red. Las velocidades que yo he conseguido son bastante lentas, en el mejor de los casos 6Mb/s

Si quieres aprender más sobre samba, puedes teclear:
-- man samba

Instalación del servidor VPN
El servidor VPN nos permitirá conectarnos directamente a nuestra red local usando Internet. De este modo podremos tener nuestros ordenadores y recursos disponibles y navegar usando la conexión a Internet de nuestro Raspberry. Hay que tener en cuenta que configurar en condiciones una VPN no es algo que se puede tomar a la ligera, pero en nuestro caso lo vamos a hacer del modo más sencillo y seguro posible. Usando el protocolo de autenticación PPTP. Actualmente no es el mejor ni el más seguro, pero con una buena contraseña podemos tener garantizada  la seguridad de nuestra red.
Si te preocupa la seguridad usando PPP te recomiendo que leas este artículo: http://www.elladodelmal.com/2010/07/crackear-conexiones-vpn-pptp-con-ms.html

-- sudo aptitude install pptpd
Una vez instalado modificamos el archivo de configuración
-- sudo nano/etc/pptpd.conf

Lo dejamos así.
option /etc/ppp/pptpd-options
logwtmp
localip 192.168.1.X (siendo local ip la dirección local del servidor)
remoteip 192.168.1.234-238

Pulsamos Ctrl-X y luego  S para cerrar y guardar.

Ahora modificamos este otro fichero, que es bastante más complejo
-- sudo nano/etc/ppp/pptpd-options

Y lo dejamos así:
name pptpd
require-mschap-v2
require-mppe-128
nomppe-stateful
nodefaultroute
debuglock
nobsdcomp
noipx
mtu 1490
mru 1490

Pulsamos Ctrl-X y luego  S para cerrar y guardar.

Ahora añadimos usuarios:
-- sudo nano /etc/ppp/chap-secrets
Tenemos que seguir la siguiente nomenclatura o no funcionará:
usuario(TABULADOR)*(TABULADOR)contraseña(TABULADOR)*

Ahora reiniciamos el servicio
-- sudo /etc/init.d/pptpd restart

Por último, para poder acceder a los ordenadores de la red sin problema:
-- sudo nano /etc/sysctl.conf

Descomentamos la linea:
net.ipv4.ip_forward=1
Y reiniciamos el raspberry:
-- sudo shutdown -r now

Todo listo??? No queda una cosa
Lo único que nos queda es configurar nuestro router, para que nuestro VPN esté disponible desde la ip pública en Internet. Como cada router es distinto dejo aquí lo que hay que hacer:
Entrar en el router: Casi siempre es http://192.168.1.1
Si no has cambiado la contraseña, vendrá escrita en la parte de atrás del router. Sería buen momento para cambiarla.
Bien, entra en una opción parecida a esta "Port Forwarding".
Allí basicamente lo que le decimos al router es que los paquetes que lleguen por el puerto 1723 se los enviará a nuestro raspberry.
Quedaría algo simiar a esto:
Nombre de la Regla: VPN
Puerto: 1723 (puede ser un rango de puertos, si te pide un rango pon en las dos casillas 1723)
IP destino: Ip local de nuestro raspberry.
Puerto destino: 1723

Ya hemos terminado??? No queda un pequeño detalle.
Actualmente nuestro Raspberry está configurado para utilizar la dirección ip que el router le asigne mediante DHCP. Esto quiere decir que cuando lo apaguemos ya no tenemos garantías de que cuando se encienda, el servidor DHCP le asigne la misma dirección ip local que teníamos antes. Eso significa que nuestra configuración de VPN no funcionará.

Podemos hacer dos cosas.
La primera es configurar el router, para que asigne siempre la misma dirección ip en función de la MAC del dispositivo y ya que estamos dentro de la configuración del router, vamos a buscar una opción que nos permita reservar direcciones ip. Suele estar con las opciones del DHCP. Si no lo encuentras, es posible que tu router no permita hacerlo.

Opción 2. Configurar el raspberry para que siempre arranque con la misma dirección ip. El problema de esta opción es que si tienes otros dispositivos que ya la están usando, no se conectará a la red.
Entramos en la configuración de los interfaces de red.
-- sudo nano /etc/network/interfaces

encontraremos lo siguiente:
iface eth0 inet dhcp

Comentamos la línea anterior y tecleamos lo siguiente:
iface eth0 inet static
address 192.168.1.X (Dirección que queremos reservar)
netmask 255.255.255.0
gateway 192.168.1.1

Pulsamos Ctrl-X y luego  S para cerrar y guardar.

Ahora editamos los servidores DNS:
-- sudo nano /etc/resolv.conf

Comentamos lo que tengamos y ponemos
nameserver 192.168.1.1
nameserver 8.8.8.8

Ya está todo listo...
Servidor VPN OK.
Servidor SAMBA OK
IP LOCAL FIJA OK
IP PÚBLICA FIJA .... Je je. que más quisiéramos.

Está claro que para acceder a nuestra VPN, necesitamos saber nuestra dirección ip pública, pero a no ser que tengamos contratada una ip fija, esta ip cambiará cada vez que apaguemos el router ADSL o Cable modem.

En la próxima entrada, motraré como hacer para que nuestro raspberry nos envíe un mensajes a nuestra cuenta de twitter con su dirección IP pública.

Ahora vamos a probar nuestra conexión VPN y nuestro servidor SAMBA desde otro lugar
Os dejo cómo se hace en MAC, pero en PC en IOS y Android, es similar.

1. En opciones de red, creo una nueva conexión.

2. Seleccionamos PPTP
3. Y por último la configuramos. Ten en cuenta esto solamente tiene sentido si estás saliendo a Internet con otra conexión diferente a la del Raspberry pi.


Una vez conectados, vamos a conectarnos a nuestro disco de red, porque gracias a la VPN, ya está en nuestra red local.

1. En el Finder, Ir ->> Conectarse al servidor.
2. Introducimos la dirección local del servidor SAMBA
Te pedirá usuario y contraseña. Con nuestro tutoríal sería:
usuario: pi
contraseña: la que pusiste al configurar SAMBA.

Ya lo tienemos todo, ya podemos acceder a nuestros ficheros, desde cualquier parte, como si fuese nuestro DropBox particular.

8 comentarios:

  1. Muy buena entrada. Gracias

    ResponderEliminar
  2. buenisimo tutorial y facilisimo de montar :D

    una pregunta: si el direccionamiento de la red remota coincide con el de la local, (es decir, en la red de mi casa tengo un server en 192.168.1.100 y en la red en la que me encuentro hay un equipo con la misma ip) no tiene problemas por duplicidad? a cual de los dos equipos intentaria conectarse? :S

    gracias de antemano

    ResponderEliminar
    Respuestas
    1. Si accedes en remoto, es decir fuera de tu red local, no puedes utilizar direcciones locales. 192.168.x.x.x. Tienes que configurar el router para que redireccione las peticiones de un puerto al servidor/ordenador que tu quieras.

      No se si he respondido a tu pregunta. :/

      Eliminar
  3. tengo una duda.

    Si quiero hacer algo como tener conectada la raspberry a la tele y conectada mediante un USB WIFI a mi router, ¿puedo acceder desde la raspberry a mis ficheros de mi ordenador MAC para reproducirlos en la tele?

    ¿Para eso sólo necesito crear el servidor SAMBA que describes?

    Un saludo y gracias

    ResponderEliminar
    Respuestas
    1. Si, es precisamente para eso. Puedes acceder incluso desde la Xbox y la Play.

      Eliminar
  4. Una errata (creo).
    En la sección "Conexion via ssh", donde pone el comando
    ssh ip@direccioniplocal
    debería decir
    ssh pi@direccioniplocal
    ¿Verdad?

    ResponderEliminar
    Respuestas
    1. Este comentario ha sido eliminado por el autor.

      Eliminar