Traducido con IA. Este artículo se escribió originalmente en francés y lo tradujo Claude, la IA de Anthropic. El original en francés sigue siendo la versión de referencia.
En el mundo del gaming moderno, los juegos son cada vez más pesados, igual que sus actualizaciones. Cada descarga puede saturar rápidamente una conexión a Internet, sobre todo cuando varios dispositivos comparten el mismo ancho de banda.
Pienso en juegos mainstream y AAA que superan sin problema los 100 GB.
La factura se dispara si, como yo :), multiplicas los dispositivos dedicados directa o indirectamente a los videojuegos. Yo cuento cuatro: mi PC de sobremesa, la «consola» del salón con Bazzite OS, la Steam Deck y, más recientemente, un mini PC para el juego en remoto.
Como ya comenté en la serie Open-Source Odyssey, elegí Steam como plataforma de juegos porque ofrece compatibilidad con Linux desde hace mucho tiempo, sobre todo gracias a la capa de compatibilidad Proton.
Con las descargas incesantes y las actualizaciones diarias, se me ocurrió «racionalizar» las cosas, sabiendo que descargo lo mismo varias veces en dispositivos distintos.
Así, tras algunas búsquedas, di con el servicio autoalojado LanCache (https://lancache.net/).
Enseguida me di cuenta de que el servicio es muy apreciado en las LAN parties (¡qué nostalgia!) para aguantar 100 PC descargando el mismo juego con un ancho de banda de Internet, al fin y al cabo, limitado.
En este artículo vamos a ver cómo poner en marcha LanCache, que no solo acelera la descarga de juegos en tus dispositivos, sino que también ahorra un ancho de banda de Internet muy valioso.
Objetivo del proyecto: ¿por qué instalar un servidor LanCache?
LanCache se basa en una idea sencilla: almacenar localmente los datos que se descargan con frecuencia, como juegos y actualizaciones. Cuando un dispositivo descarga un juego, se guarda una copia en el servidor. Después, si otro dispositivo, o el mismo, quiere volver a descargarlo, los datos se recuperan localmente del servidor en lugar de volver a descargarse de Internet.
Lógicamente, la velocidad de descarga pasa de ser la de tu conexión a Internet a la de tu red local.
Yo todavía no he dado el salto a 10 GbE; estoy en 2,5 GbE y los resultados ya son impresionantes.

Las ventajas:
Ahorro de ancho de banda: reduces el uso de tu conexión a Internet al evitar descargas repetidas.
Descargas más rápidas: la caché local es mucho más rápida que los servidores remotos, lo que reduce la espera en instalaciones y actualizaciones.
Centralización: todas tus máquinas (PC, consolas, etc.) pueden conectarse al mismo servidor, lo que simplifica la gestión.
El proyecto es especialmente interesante si tienes varios dispositivos de juego en casa o si quieres compartir una caché con amigos en LAN parties.

La arquitectura del proyecto: un montaje sencillo con Proxmox y TrueNAS
Mirándolo de cerca, la solución no tiene requisitos especialmente exóticos. Todo puede funcionar de forma nativa en Linux o en contenedores Docker.
Lo único que hay que prever es el espacio de almacenamiento para los datos en caché.
Pero antes de entrar en materia, veamos en dos minutos cómo funciona LanCache.

LanCache: proxy y DNS
LanCache no es en sí una tecnología revolucionaria, sino un simple servidor proxy con función de caché. En el caso de LanCache, es nginx quien cumple ese papel de proxy/caché.
¿Y cómo se conecta el servidor de proxy/caché con tu cliente de Steam (por ejemplo)? Mediante una simple redirección DNS, que envía todas las peticiones de descarga de Steam al servidor LanCache.
LanCache se divide en varios subservicios:
LanCache server, o «monolithic», que almacena tus juegos y datos guardados.
LanCache-DNS, que se encarga de la resolución local de nombres de tus servicios de juego (Steam, Origin, etc.)
LanCache-SNI, que, en el caso de Origin por ejemplo, puede gestionar las llamadas HTTPS del cliente al servidor LanCache
En cuanto al DNS, hay que preguntarse: ¿tienes ya un servidor DNS privado capaz de gestionar «overrides», es decir, resoluciones de nombres «forzadas» por el administrador del servidor DNS?
Si ya tienes Pi-hole, Unbound, AdGuard u otro similar, no hace falta añadir el servicio LanCache-DNS. Puedes gestionarlo todo desde la sección «Override».
Si no tienes un servidor DNS local,
…tienes varias opciones:
Editar localmente tu archivo hosts para asociar el nombre del CDN de Steam con la dirección privada de tu servidor LanCache.
Usar el servidor DNS de LanCache para todos tus dispositivos y, por tanto, modificar tus ajustes de DHCP para que todos reciban la dirección de tu servidor LanCache-DNS
En mi opinión, si te tienta la segunda opción, te aconsejo considerar Pi-hole para disfrutar de una solución más reconocida y, de paso, del bloqueo de publicidad.
Y si quieres montar una solución DNS local, no puedo dejar de recomendarte mi artículo sobre el tema :)
Alojamiento del servidor LanCache
Usé un contenedor en mi nodo Proxmox para alojar LanCache.
Basta con un simple contenedor LXC ejecutando el comando docker adecuado:
docker run \
--restart unless-stopped \
--name lancache \
-v /cache/data:/data/cache \
-v /cache/logs:/data/logs \
-p 80:80 \
-p 443:443 \
lancachenet/monolithic:latest
El proceso de instalación se detalla aquí.
Si usas tu propio servidor DNS, te aconsejo indicar el upstream en el comando docker run para no crear un bucle con tu propio servidor DNS 😊
-e UPSTREAM_DNS="8.8.8.8"
Almacenamiento en TrueNAS mediante iSCSI
Para almacenar la caché de juegos y actualizaciones, conecté el contenedor LanCache a mi servidor TrueNAS mediante un montaje iSCSI. Así dispongo de un almacenamiento rápido y ampliable dedicado a LanCache, sin saturar el disco principal del contenedor.
iSCSI también ofrece muy buen rendimiento y evita los problemas de permisos que tuve con montajes SMB o NFS.
¿Por qué no una caché local en Proxmox? Sencillamente porque no tengo suficiente espacio en disco para los pocos terabytes de juegos que quiero tener en caché.
Y además, como decía en mi artículo sobre el desacoplamiento: cada servidor a lo suyo. TrueNAS se encarga del almacenamiento, así que…
Encontré un vídeo bastante interesante sobre cómo integrar un disco remoto iSCSI en Proxmox.
https://www.youtube.com/watch?v=g5fhCiAETSU&t=605s
En el futuro, eso sí, estudiaré la posibilidad de llevar el servicio LanCache Monolithic directamente a Docker en TrueNAS. Así evitaría consumir ancho de banda innecesario entre Proxmox y el montaje iSCSI.
Automatizar la precarga con steam-lancache-prefill
Otro elemento clave de mi arquitectura es un segundo contenedor que ejecuta steam-lancache-prefill. Está diseñado para automatizar la precarga de juegos y actualizaciones en la caché. En lugar de esperar a que los dispositivos pidan los juegos, SteamPrefill descarga y actualiza automáticamente los que necesites, preferiblemente en horas valle (por ejemplo, de noche). Así la caché siempre está actualizada y lista para usar.

La selección de juegos que se guardan en caché con steam-lancache-prefill
steam-lancache-prefill está disponible en GitHub y puede ejecutarse en un ordenador normal o en un servidor.
Decidí instalarlo en un servidor porque:
El servicio debe funcionar en segundo plano sin que yo tenga que pensar en ello
Las actualizaciones deben descargarse con regularidad para que la caché no quede obsoleta al cabo de unos días, lo que obligaría a descargar de nuevo desde el CDN público de Steam.
Una vez más, lo aloja un contenedor LXC de Proxmox (Debian en mi caso).
Recomiendo instalar el servicio directamente en el contenedor, sin Docker. El motivo: la programación automática de la búsqueda de actualizaciones con cron no está disponible en Docker.
Esta es la guía para instalar el servicio en Linux: https://tpill90.github.io/steam-lancache-prefill/install-guides/Linux-Setup-Guide/
Y por último, la guía para actualizar la caché con regularidad (yo compruebo cada hora): https://tpill90.github.io/steam-lancache-prefill/install-guides/Scheduled-Job/
Mi experiencia
Esta arquitectura permite una gestión centralizada del almacenamiento, un ancho de banda optimizado y, sobre todo, una mejor experiencia de usuario en todos los dispositivos de juego.
Sinceramente, una vez montado, ni pienso en ello y no requiere ningún mantenimiento.
Solo el placer de disfrutar de descargas locales rápidas y de liberar la conexión a Internet 👌
