valshk

El blog que pusimos porque no alcanzamos a pagar el hosting.

Haciendo un Home Server

with 2 comments

Llevaba mucho tiempo queriendo hacer un home server. Hay una buena cantidad de tareas que se les puede asignar en el ámbito doméstico. Mi objetivo principal era reemplazar el módem ADSL/Router que Telmex distribuye con su servicio Prodigy Infinitum. Quería un router más personalizable y con más potencia para soportar, por ejemplo, servicios de streaming dentro de la LAN al mismo tiempo que el ancho de banda está ocupado por descargas. El router de Telmex que tenía antes se saturaba en ese tipo de escenarios.

El nombre del servidor es Vishnu. LT Phantom lo escogió haciendo referencia al episodio dieciséis de la sexta temporada de Los Simpsons, Bart contra Australia, en el que se ve a la deidad en el centro de la tierra ajustando distintas válvulas con sus seis brazos.

En este post explicaré de manera poco detallada el proceso que seguí para montar mi home server. He de mencionar que aún no he terminado de implementar todos los servicios que quiero, y no sé si algún día terminaré. Por esto, también menciono algunos de los planes e ideas para servicios que aún están en el horno.

Hardware

La PC que usé solía ser mi computadora principal, había cumplido su misión y no tenía nada que hacer. Le retiré dos unidades ópticas, una tarjeta de gráficos AGP y me quedé con lo siguiente:

  • AMD Athlon™ 64 Processor 3000+ a 1999.642MHz
  • Memoria: 445608 kB
  • Disco duro: 120.0 GB
Motherboard, procesador, disco duro y fuente de poder en el gabinete.

El equipo después de quitar lo que no necesitaría y antes de agregar los adaptadores de red.

Para desempeñar la tarea de router agregué un par de cosas más:

  • Tarjeta PCI Fast Ethernet. Para tener un segundo puerto ethernet. Cualquiera compatible con linux.
  • Tarjeta PCI Wi-Fi: No sólo compatible con linux, sino capaz de funcionar en modo Master.

Hay muchas cosas que considerar en cuanto a los componentes tomando en cuenta que el equipo estará encendido las veinticuatro horas. Queremos que gaste poca energía o que al menos no se queme por el uso. Cada pieza debe tener información sobre su consumo que servirá para hacer una estimación del consumo general.

Algo útil es indicarle al BIOS que queremos que arranque el equipo «a la menor provocación». Si el equipo se apaga por algún tipo de falla eléctrica, el BIOS sabrá que tiene que arrancar todo nuevamente cuando la energía se restablezca. La opción se llama «AC Back Function», «AC Power Loss Restart» o algo parecido, depende del BIOS (más información sobre las opciones del BIOS).

Diseño de la red

Aquí fue donde me encontré con mi primer problema. Si el objetivo era reemplazar el router que me dio mi ISP, mi red debería haber quedado de la siguiente manera:

Internet → Vishnu → {LAN}

Este sería el diseño ideal para la LAN.

Pero esto requería una pieza de hardware: un modem ADSL. Los hay USB y PCI; y dado que mucha gente reporta que el primero consume muchos recursos (lo cual es un poco obvio), la idea era encontrar la tarjeta. Lamentablemente es una pieza un poco rara. Encontré una por unos $200USD y había un sujeto que aseguraba conseguirme otra por $70USD. La diferencia de precios me hizo dudar que la segunda se tratara de la tarjeta que necesitaba. Además no encontré suficiente información sobre qué marcas y modelos funcionan en linux y no tendría sentido buscar una tarjeta en específico y gastar tanto dinero si la tecnología podría cambiar pronto (o eso espero).

Lo que tuve que hacer fue sí usar el router del ISP pero en modo bridge. El aparato se comporta únicamente como nodo entre la interfaz ethernet de Vishnu y el servidor ADSL de mi ISP. Eso quiere decir que la red quedaría así:

Internet → Router (Modo bridge) → Vishnu → {LAN}

Diseño de la LAN con el router del ISP en modo bridge para el enlace ADSL hacia Internet.

Cada equipo de la LAN se conectaría a vishnu a través de ethernet o wi-fi, y lo ideal sería que fuese directamente. Una solución sería usar un switch con entradas ethernet y antena wifi pero muchos de estos aparatos son en realidad routers que ya incluyen cosas como servidor DHCP y no existe (o al menos no encontré) uno que sólo fuera sólo switch.

Así que, para los equipos que se conectarían vía ethernet, tuve que agregar un Fast Ethernet Switch. El switch necesita alimentación para funcionar. Pero esos enormes enchufes no hacen otra cosa más que convertir corriente continua en corriente directa y ya hay un componente en una PC que hace eso, la fuente de poder.

Así que hice un convertidor molex de cuatro pines a plug redondo AC para alimentar el switch con los 5v que necesita directamente de la fuente de poder de Vishnu. Así se evita conectar ese cable tan molesto.

Adaptador de molex de cuatro pines a plug redondo AC.

Convertidor Molex de cuatro pines a plug redondo AC que conecta al switch con la fuente de poder y así evitar manejar más cables.

Sin embargo, había ahora otro nodo en la red. Para los equipos conectados vía ethernet, la arquitectura sería la siguiente:

Internet → Router (Modo bridge) → Vishnu → Switch → {LAN (Ethernet)}

Fue necesario agregar un Switch para los equipos que se conectarían vía Ethernet.

Vishnu tenía que ser también un punto de acceso Wi-Fi. Eso quiere decir que tenía que tener un adaptador inalámbrico que no sólo fuera compatible con linux sino que también funcionara en modo master. El sitio linuxwireless.org tiene una lista de las tarjetas y drivers y el estado de su compatibilidad con linux.

Lo importante es fijarse en el chipset. Por ejemlo; yo escogí la Lynksys WMP54G que tenía varias versiones. La que escogí, la 4.1, viene con el chipset Ralink RT61 que, hasta hace poco, es posible usar en modo master. Si no recuerdo mal, las versiones 3 y menores no pueden usarse en modo master; el chipset es distinto y su driver no soporta la función. Así que es importante investigar antes de hacer una compra.

Un adaptador Fast Ethernet y uno Wi-Fi.

Coloqué una tarjeta Ethernet que va a un switch y una tarjeta Wi-Fi que funciona como access point.

El diseño final de mi LAN quedó de la siguiente manera:

Internet → Router (Modo bridge) → Vishnu → Switch / Antena WiFi → {Equipos finales}

Diseño final para la LAN.

No es el diseño que quería, pero es el mejor dado que pretendía gastar poco y usar lo mejor posible el equipo que tenía a la mano.

Software

Decidir qué SO tendría Vishnu me tomó mucho tiempo. Existen cientos de distribuciones Linux o BSD para gateways. Yo estaba buscando algo familiar; apt, por ejemplo. Así que hice un poco de investigación e intenté probar las más populares.

Untangle

Untangle es una compañía que ofrece un gateway para pequeños negocios, entidades educativas y organizaciones sin ánimo de lucro. Su modelo se basa en vender licencias para módulos que se agregan sobre el servidor (que por si solo es gratuito); como un antivirus de red, compartir impresoras y cosas así.

… no lo usé porque:

No me agradó tener que instalar todo a través de la interfaz web; lo que a su vez limitaba la gama de programas a instalar. Funciona muy bien para lugares donde se necesita tener el programa funcionando sin importar cuál sea exactamente.

Zentyal

Zentyal, basado en Ubuntu, es un paquete de aplicaciones de red. Su configuración permite montar diversos tipos de servidores. Por ejemplo; se puede montar un gateway Zentyal que sirva Internet a dos redes locales ajenas, en una de ellas puede haber otro servidor Zentyal que comparta impresoras, tenga el servidor de correo y el servidor web mientras que en la otra red, un tercer servidor Zentyal se encargue de VoIP. Es muy potente.

… no lo usé porque:

Toda esa potencia tiene un precio. En mi equipo se ejecutaba terriblemente lento. Al igual que Untangle, uno se ve obligado a instalar módulos enteros que instalan algunos paquetes que posiblemente nunca sean usados.

Ubuntu Server

La versión para servidores de la popular distribución linux. Esto ya se parecía mucho a lo que estaba buscando. Hay que configurar a mano todo lo que Zentyal y Untangle hacen por uno. Si uno está familiarizado con esta distribución, se le puede sacar mucho a los repositorios de Canonical.

… no lo usé porque:

Me gusta tener todo actualizado. Suponiendo que sólo instale versiones LTS, tendría que reinstalar el sistema cada dos años. Eso quiere decir que tendría que volver a configurar todo en cada reinstalación o tener bien planeadas las particiones. Realmente no es mucho problema, pero preferí evitarlo.

Archlinux

La distribución bajo la filosofía KISS; esencialmente: los asistentes, GUIs y cualquier agregado sólo complican todo. Para implementar cualquier cosa hay que editar directamente los archivos de configuración. Además no se liberan versiones sino que hay una sola rama y simplemente van actualizando los paquetes. Después de una instalación, no debería tener que reinstalarse el sistema a menos que se trate de alguna falla o pérdida mayor.

¡… el ganador! :

Arch es una distribución que me gusta mucho y tal vez debí decidirme por ella desde un principio. La única desventaja que podría verle sería que es un poco más complicado de manejar que otras distros. Sin embargo, la documentación es muy buena y – principalmente – nada se compara a tener control total sobre cada aspecto.

Instalando Archlinux.

Instalando Archlinux.

El wiki de arch tiene un artículo especificamente para montar un Router que fue el que seguí. Incluso hice algunas aportaciones una vez que terminé.

Servicios

No voy a explicar cómo se implementa cada servicio, ya que para eso está la documentación de Arch. Sólo explicaré un poco qué es cada uno y el motivo por el que lo incluí, aunque sí pongo un link a la documentación.

Hay que mencionar algo muy importante. Técnicamente, no hay nada que impida que un equipo que pueda funcionar como router también proporcione otros servicios ajenos al encaminamiento de red, como servidor de impresoras, por ejemplo. Sin embargo no es recomendable por motivos de seguridad, por ejemplo; Digamos que se tiene un firewall impenetrable, y se agrega una página web. Podría ser que el servidor HTTP tenga un agujero de seguridad que permita a un atacante tomar control del sistema. En tal caso no importó que tan perfecto era el firewall, el sistema quedó comprometido.

Con lo anterior quiero decir que lo que hice con Vishnu tiene un nivel de riesgo considerable a pesar de que procuro no abrir muchos servicios hacia el exterior y cifro todos los que pueda dentro de un túnel SSH. La seguridad de una red es un tema enorme y complejo; no basta con saber instalar las cosas – eso es trivial – también es necesario entender como funciona todo lo que existe detrás para tener una idea de qué hay que proteger y cómo diagnosticar problemas.

Router

Un Router es en realidad un conjunto de varios servicios, típicamente: DHCP, Firewall, DNS.

Un servidor DHCP administra los integrantes de una red. Al conectar un router con un equipo, el servidor DHCP le hace llegar todos los datos para que pueda formar parte de la red y le asigna una IP con la que él y el resto de los miembros pueden identificar dicho equipo.

Un servidor DNS es un componente muy importante en Internet. Esencialmente se encargan de recordar que IP tiene cierto nombre de dominio. En el caso del router, se encarga de que los equipos de la LAN puedan ser identificados con un nombre. Es más sencillo recordar milaptop que 192.168.250.31 para identificar una laptop en la LAN.

El Firewall es un concepto muy conocido. Internet es una jungla llena de todo tipo de terribles peligros, pero para eso existe el Firewall, que se encarga de mantenerlos fuera de nuestra LAN y dejar pasar sólo lo que queremos.

Punto de acceso Wi-Fi, el término es bastante claro. Para permitir a equipos unirse a la LAN vía Wi-Fi se deben configurar cosas como, el tipo de clave/cifrado, protocolos de comunicación e intercambio de llaves… Hoy en día todos tenemos al menos un equipo con la posibilidad de conectarse vía Wi-Fi.

Hacer un Router era mi objetivo principal y estos son los servicios básicos que debería de tener para cumplir las necesidades básicas.

Servidor de Impresoras

Un servidor de impresoras permite a más de un equipo hacer uso de alguna impresora conectada a él. En mi caso es un servicio importante ya que mi familia imprime bastante. Inicialmente cofiguraba mi computadora principal, que está encendida casi todo el día, como servidor de impresora; pero si me encontraba jugando (para lo cual tengo que pasarme a windows) entonces no había servicio; y más de una vez ocurrió que tuve que dejar un juego para que alguien pudiera hacer uso de la impresora. Con Vishnu como servidor de impresoras el servicio siempre está disponible.

Web Cache

Un cache web es un servicio transparente presente en la red que se encarga de guardar copias de los recursos web más solicitados desde la LAN. Teniendo una copia local de un sitio, no tendría que volver a solicitarse la información al servidor web cuando la página se visite por segunda vez. La transferencia desde el cache web al cliente que solicita la información es más rápida y no ocupa ancho de banda del enlace hacia Internet. Esto reduce la congestión un poco y reduce la latencia en general.

Incluí este servicio para agilizar un poco el tráfico web, y digo «un poco» porque no todos visitamos exactamente los mismos sitios y además cada vez son más los que usan HTTPS, y este tipo de tráfico no puede ser cacheado. Sin embargo pueden hacerse cosas más inteligentes, como por ejemplo; tener copias locales de actualizaciones de sistema que más de un equipo en la LAN necesitará instalar. Una vez descargadas por primera vez, el resto de los equipos obtendrán las actualizaciones a la velocidad de la LAN y no a la del ancho de banda del ISP; es decir, más rápido.

Gestor de Descargas

Este es más un uso obvio que un servicio.

Empecemos con BitTorrent. Muchos clientes torrent incluyen una interfaz web. Está pensada justamente para hacer administración remota de tus descargas. Transmission debe ser el cliente BitTorrent más limpio de todos, y su interfaz web funciona perfectamente.

Ahora son más comunes los gestores de descarga directa. JDownloader es el programa más popular en esta categoría, sin embargo requiere un entorno gráfico para su instalación y uso. Además, su interfaz web es aún muy austera; hace tiempo intenté ver si podría aportarle algo pero el solo hecho de ver código Java me provoca terribles arqueadas. Por fortuna me encontré con pyLoad, que me perece que tiene un diseño infinitamente superior. Su interfaz web es lo suficientemente madura para cubrir mis exigencias y soporta los servidores más populares.

NAS

Network-attached storage. Algún tipo de dispositivo de almacenamiento al cual se tenga acceso desde distintos tipos de clientes en la red. Puede ser una partición, el disco duro completo, una unidad lectora… y las aplicaciones pueden ser muy variadas — virtualmente, cualquier cosa que se nos ocurra que requiera almacenamiento –.

Otras Ideas

El principal problema de hacer un router a partir de una vieja PC es que el hardware no está pensado para esta tarea, por lo que tenemos un equipo que consume más energía y ocupa más espacio que cualquier router comercial. Me gustaría encontrarme con alguna Motherboard basada en ARM que pueda personalizar de la misma manera que hice con Vishnu. Eso seguramente me permitiría hacer un servidor más pequeño y de menor consumo. Sin embargo, parece que la tendencia es flashear routers comerciales.

Necesitaré agregar discos duros a Vishnu para empezar a formar unidades de almacenamiento en red para hacer más cómoda la transferencia de información en la LAN. Pero eso aumentará el consumo de energía. Aún estoy analizando las opciones.

De contar con más recursos, separaría las responsabilidades de Vishnu en varios servidores; algunos de ellos serían virtuales. Creo que lo ideal sería tener mi soñado equipo ARM como router y un equipo que ejecute distintos servidores virtuales para los demás servicios.

Written by sk

8 julio 2012 a 1:50 am

Publicado en linux

2 respuestas

Subscribe to comments with RSS.

  1. […] hice una actualización de mi home server y, después de reinicar, la conexión PPPoE dejó de funcionar. Al intentar levantar el servicio […]

  2. Interesante tu proyecto, actualmente mi red esta bajo la misma topologia, estare pensando en montar servidores virtuales para no comprometer la seguridad al dejar todos los servicios con uno solo.

    Fernando

    25 septiembre 2013 at 8:30 pm


Deja un comentario