Hace ya unos 4 años que soy el feliz usuario de un Raspberry PI 2. Debo admitir que cuando lo compré, lo hice sin ningún ánimo de armar nada, fue sólo por el hecho de que era barato (en ese momento costó menos de $300). En la compra del Raspberry PI también sumé una tarjeta de memoria MicroSD Sandisk de 32GB.

Algunos Raspberry PI Zero wifi que fui comprando y/o me regalaron

Luego de esa primer compra me dejé llevar y compré un disco rígido de notebook de 2TB y un adaptador SATA-USB porque se me ocurrió que sería una buena idea reemplazar mi vetusto servidor casero basado en un antiguo Celeron D corriendo Debian.

Cuando uno piensa en un servidor, se imagina una computadora de alto rendimiento, gran consumo energético, ruido y calor. Pero no siempre es así, pues depende del uso que le queramos dar. En mi caso el servidor es para mirar series y/o películas, reproducir música, almacenar archivos como backup, tener un nodo de VPN y no mucho más. Reemplazar el viejo Celeron por el Raspberry PI es una idea que me entusiasmó bastante ya que el ruido de la computadora me molestaba un poco durante la noche, así como también el espacio que ocupaba.

¿Que podemos hacer con un Raspberry pi?

El Raspberry PI tiene un procesador de video dedicado que puede decodificar video de buen bitrate sin problemas a través de su salida HDMI, por lo tanto puede ser un buen candidato para un reproductor de video.

Tiene un jack de audio de 3.5” como salida de línea que puede alimentar un par de parlantes amplificados, un buen candidato para un reproductor de música también.

Éste es mi servidor hogareño, un Raspberry PI 2 con un disco rígido encima

Tiene un puerto ethernet y 4 puertos USB, un procesador ARM capaz de correr Linux sin problemas y puertos GPIO programables. Puede correr varios servicios, conectarse a internet e interactuar con dispositivos USB

¿Que sistema operativo conviene utilizar?

El que convenga usar va a ser con el que más cómodo te sientas, en mi caso uso GNU/Linux para casi todo lo que tengo por lo tanto voy a mantenerme en esa línea, pero en el Raspberry PI se puede utilizar cualquier sistema operativo que funcione sobre ARM. Particularmente para este proyecto utilicé Arch Linux ARM por ser una distribución liviana, muy personalizable y moderna.

Para la instalación básica vamos a necesitar una tarjeta de memoria SD, un teclado USB, un monitor HDMI y una conexión a internet por cable ethernet. La guía de instalación la pueden ver aquí: https://archlinuxarm.org/platforms/armv6/raspberry-pi, creo que es en vano detallarlo nuevamente en el post ya que son pocos pasos.

Alcances de ésta guía

La finalidad de esta serie de posts va a ser la de conseguir un servidor hogareño de bajo consumo y poder suficiente para realizar las tareas sin complicaciones. El resutlado final será:

  • Servidor OpenVPN: una VPN (red privada virtual) permite hacer un tunel entre nuestra computadora y el servidor (el Raspberry PI en este caso), securizando el tráfico. Ésto es útil cuando nos conectamos a redes libres de algún café o de la ciudad o de un hotel y queremos proteger los datos que viajan en plano por el wifi. De ésta manera generamos un tunel donde todo el tráfico va a terminar saliendo finalmente por nuestro servidor y será encriptado punto a punto.
  • Cliente de chat IRC: Utilizo IRC hace muchísimos años y tener una consola a la que pueda acceder para chatear mas cómodo sin tener que conectarme, o incluso para ver mensajes del board sin perderme nada me es muy cómodo. Instalaremos irssi como cliente irc para contemplar este item.
  • Servidor DNS: Muchas veces necesito entrar a la consola de administración de mi impresora, o del router, o de alguno de los access points u otros raspberry pi que tengo tirados por la casa, me es mas sencillo recordar un nombre de dominio como printer.home que la IP de la impresora en si. Un servidor DNS local utilizando Bind9 nos permite lograr eso, además de que podemos agregar algunas reglas para bloquear publicidad, haciendo que los dominios de los sitios publicitarios se bloqueen y no nos muestre ningun contenido, algo muy interesante que funciona como Adblock pero en cualquier dispositivo.
  • DNS update: Como mi conexión a internet tiene IP dinámica y no quiero depender de anotarme la IP cada vez que salgo de casa, utilizaré ddclient para poder apuntar un nombre de dominio a mi IP, y que ésta se actualice automáticamente en caso de haber una modificación.
  • Servidor web: Muchas veces necesito descargarme archivos que tengo en el Raspberry PI desde otra ubicación, siempre habando de archivos no sensibles, entonces me queda muy cómodo tener un servidor web para poder acceder a la información que necesito, Nginx es un buen candidato al ser un servidor web liviano y rápido, además de muy flexible y personalizable.
  • Estadísticas: A todos nos gustan los gráficos, collectd y CGP nos permitirán tener una consola web donde podemos ver información de la salud de nuestro servidor y nuestra red en general.
  • Reproductor de música: Utilizaré mopidy para reproducir música de Spotify y Soundcloud. Mopidy es un servidor que permite reproducir música de diferentes servicios e incluso desde el disco rígido local a través de una interfaz web donde se controla.
  • Backups y mirror: Todos mis backups importantes van a Google Drive con la ayuda de Insync, un software que permite mantener una copia de tus archivos en Google drive con relativamente poco esfuerzo. Es un daemon que corre en Linux, Windows, OSX por igual y permite elegir que sincronizar y que no.
  • Cliente de torrent: Hago abuso de los torrents, tanto para bajar como para compartir y me viene bien algo cómodo para administrarlos. Felizmente el cliente de torrents transmission posee una interfaz web de donde se puede administrar el daemon de transmission, agregar, quitar, personalizar cada torrent.

Como verán, son bastantes items. Hablando con Guille antes de empezar este post, me recomendó partirlo en series para no hacer un post extremadamente largo e imposible de llevar. Por lo tanto vamos a ir partiéndolo de forma sencilla como para que cada post sea un porcentaje del setup final de nuestro servidor.

Setup inicial del Raspberry PI

Teniendo ya instalado ArchLinux en nuestro Raspberry PI, lo primero que haremos es actualizarlo y configurarlo. Como root ejecutamos:

pacman -Syu

Actualizará los repositorios locales y actualizará los paquetes del sistema así como también el kernel de Linux. Debemos aceptar los mensajes y luego

reboot

Para arrancar con el sistema actualizado. Archlinux trae ya un usuario alarm generado, les recomiendo borrarlo y crear un usuario nuevo con el siguiente comando. Reemplacen nico con el nombre de usuario que deseen

useradd --create-home nico

Y luego asignenle una contraseña haciendo

passwd nico

También actualicen la contraseña del usuario root haciendo

passwd root

Para que no quede con la contraseña default ya que podría sugerir un riesgo importante de seguridad. También les recomiendo editar el archivo /etc/ssh/sshd_config con su editor de texto preferido, por ejemplo vi:

vi /etc/ssh/sshd_config

Busquen el texto PermitRootLogin, y dejen la línea como la siguiente:

PermitRootLogin prohibit-password

Luego reinicien el servicio

systemctl restart sshd.service

De esa manera si alguien intenta conectarse por SSH a nuestro servidor con el usuario root, por mas que sepa la contraseña, no podrá hacerlo.

Asignar una IP estática es una buena idea para no tener que lidiar con el DHCP del router, siempre que se reinicie algún aparato tanto el Raspberry PI como el router la IP permanecerá igual. Les recomiendo buscar una IP fuera del rango de DHCP, así no ocurren conflictos. Yo utilizaré 192.168.1.3, con mi mascara de subred 24 (255.255.255.0) en el dispositivo eth0.

ip address add 192.168.1.3/255.255.255.0 eth0

Si no están seguros del nombre del dispositivo de red pueden hacer un

ip a

Y les mostrará todos los dispositivos. También vamos a tener que agregar la ruta default por donde saldrá el tráfico a Internet, siendo 192.168.1.1 mi router, el comando será:

ip route add default via 192.168.1.1

Finalmente configuraremos los servidores DNS. Para ello editamos el archivo /etc/resolv.conf con nuestro editor de texto preferido y agreamos la siguiente línea:

nameserver 208.67.222.222

Por lo pronto utilizaremos uno de los DNS que provee OpenDNS. Luego lo cambiaremos para usar nuestro DNS local.

Conclusión

Hasta ahora hemos instalado GNU/Linux en nuestro pequeño (pero poderoso) Raspbery PI, así como también hemos configurado las bases para poder trabajar sobre un entorno actualizado, seguro y estable. Es tal vez un poco aburrido al principio porque no se tocan temas muy interesantes, pero tener todo esto configurado suma de mucha ayuda a que de aquí en más el resto de los pasos sean satisfactorios.

En la próxima entrega de ésta guía veremos como instalar y configurar un servidor OpenVPN para tunelizar todo nuestro tráfico a través desde el Raspberry PI. Muy útil para cuando estamos conectados a una red wifi sin encriptar, o en las que dudamos de la privacidad de las mismas.

Imagen de portada: Ashley Basil

14 COMENTARIOS

  1. Nico H

    Buen articulo, otra buena manera de sacarle jugo es usando Docker Container y poder instanciar varias aplicaciones en un solo nodo.

    Abrazo.

  2. Claudio Lio

    Me gusta la iniciativa de los tutos para la raspberry pi, tengo una Pi 1 y una Pi 3, la primera la use de router conectado a una wifi.

    La segunda la quería usar de Media Center conectada a la tele y reemplazar la Play 3 para usar Netflix pero no tuve éxito.

    • Gracias! La verdad nunca experimenté con Netflix, pero podría probar para comentarles como me fue!

  3. JaNCo

    Pinta muy bien esta serie de artículos, los seguiré muy atento.

    Gracias Nico.

  4. Mauricio

    Interesante este post, esperando la segunda parte.

    Yo tengo una laptop vieja, haciendo de servidor, pero me falta implementar en bind9, eso de acceder al router de una forma facil, que sea bloqueador de ads, y demas llervas. Es algo que aun me come un poco el caco, eso de las zonas en bind9.

    Estoy casi seguro que cuando hagas el otro post, voy a captar algo que quizas no veo bien.

    A modo de curiosidad, me parecio ver un post con una rasperipi de ese mismo estilo, y el usuario hablaba de lo mismo que comentas tu, acaso seras tu??

    Saludos.

    • Gracias! Si lo viste en reddit, puede ser. Subí la misma foto que acá en /r/unixporn hace un tiempo

  5. Juan Cruz

    Excelente nota.

    Tengo una raspberry pi 3b y me parecio interesante el articulo.

    Tal vez agregaría un VNC Viewer, para tener un entorno grafico remoto.

    Actualmente la utilizo en una lapdock cuando quiero trastear.

    Y como MediaCenter con Kodi en la tele.

    • Yo creo que el vnc server funcionaría bien! Aunque mi raspberry PI no tiene las X corriendo todo el tiempo, solo se ejecutan cuando abro omxplayer o similar

  6. El Polaco

    gracias por el tuto, me paso como un usuario mas arriba tengo la 3 y no hay forma de correr Netflix, igual hace rato que no googleo a ver si alguien pudo hacerlo, si alguien realmente lo hizo y quiere compartirlo, bienvenido

  7. Andresblue

    Que bueno, muy interesante, estaria genial que agreguen articulos de electronica , arduino, etc

  8. Zorro1

    Esto es hermoso, es factible que lo adapte a mi Dual Core de escritorio, que como lo tengo escondido en otra pieza, tranquilamente puede hacer todo el ruido que quiera, que no me molesta, mientras transmita via PLEX dentro de casa, no hay drama. gracias!

  9. Diego Dominguez

    Habra posibilidades de hacer con Arduino una maquina para streaming de audio? la idea seria que tenga una entrada de audio de nivel de linea y usarlo para stremear (permitanme escribirlo asi) a un servicio de streaming via Shoutcast o Icecast, con algun software que corra sobre linux.

    Lo pienso como reemplazo a una notebook que uso para este fin en transmisiones desde exteriores.

    • Hola, no creo que puedas lograrlo con un Arduino, pero si con un Raspberry PI.

      • Diego Dominguez

        Perdon, quise decir con Raspberry, se me cruzo un cable.
        Buenisimo, si decis que hay posibilidades me voy a poner a investigarlo, gracias Nicolas

Dejá una respuesta

Por favor ingrese su comentario!
Por favor ingrese su nombre aquí