Lunes por la manana: doble mininfarto (XMonad + VPN)


13 de abril de 2026

Lunes. 8:47 AM. Cafe en mano. Dos infartos antes de las 9.

Infarto 1: XMonad no arranca

SDDM muestra el login. Pongo el password. Enter. La pantalla se queda negra con una X de raton. XMonad no arranca. No hay escritorio. Nada.

Que paso

El fin de semana fue productivo. Demasiado. Entre rebuilds, deploys, headscale, tailscale, retropix, y un flake update, algo se perdio: el binario compilado de XMonad.

XMonad busca su binario en ~/.cache/xmonad/xmonad-x86_64-linux. Si no lo encuentra, la sesion muere silenciosamente. SDDM te devuelve al login como si el password estuviera mal. Sin error, sin log, sin pista.

Teniamos un hook en home-manager que recompila en cada rebuild. Pero tenia un bug: comprobaba $DISPLAY antes de compilar. Si el rebuild se ejecuta desde SSH (sin X11), la compilacion no se ejecuta. Exactamente lo que paso este fin de semana.

El fix (2 minutos)

$ xmonad --recompile
XMonad recompilation process exited with success!
$ sudo systemctl restart display-manager

Hook corregido: ya no comprueba $DISPLAY. xmonad --recompile solo necesita GHC, no un display.

De mininfarto a "arreglado" en 2 minutos. Sin foros, sin probar cosas a ciegas. Diagnostico, fix, commit, nunca mas.

Infarto 2: la VPN de Vocento no resuelve DNS

9:15 AM. Abro el PR urgente de Bitbucket. bitbucket.vocento.com: Name or service not known. La VPN de Vocento (Ivanti) esta conectada pero no resuelve dominios internos. Sin esto, no puedo currar.

Que paso

El sabado montamos Headscale (servidor Tailscale self-hosted) para la mesh VPN del multiverse. Tailscale tiene una feature llamada MagicDNS que secuestra /etc/resolv.conf y redirige TODO el DNS a su propio resolver (100.100.100.100).

ANTES (funciona):
  /etc/resolv.conf → 192.168.53.12 (VM Ivanti, resuelve *.vocento.com)

DESPUES DE TAILSCALE (roto):
  /etc/resolv.conf → 100.100.100.100 (Tailscale, NO resuelve *.vocento.com)

La VM de Ivanti estaba perfecta. La VPN conectada. Pero Tailscale le habia robado el DNS sin avisar.

El fix

Dos cambios:

  1. --accept-dns=false en todos los nodos (modulo tailscale.nix). Tailscale NUNCA toca resolv.conf.
  2. magic_dns = false en el servidor Headscale. El servidor tampoco intenta gestionar DNS.
# modules/services/tailscale.nix
services.tailscale.extraUpFlags = [ "--accept-dns=false" ];

# hosts/cohete/default.nix (Headscale server)
services.headscale.settings.dns.magic_dns = false;

Commit con titulo CRITICAL. La VPN de Vocento es sagrada. Nada la toca.

Leccion aprendida

Tailscale es un gran software. Pero como todo software que "sabe lo que te conviene", a veces te jode. MagicDNS es una feature pensada para redes simples. Si tienes una VPN corporativa con DNS internos, MagicDNS te destruye el dia.

La regla: si un servicio toca /etc/resolv.conf sin que se lo pidas, desactivalo inmediatamente.

Lo que se actualiza hoy

Ademas de los fixes, el flake se actualiza con 6 dias de cambios:

Input Antes Despues Que trae
nixpkgs 01 abril 09 abril 8 dias de paquetes + security fixes
nixpkgs-master 06 abril 13 abril Ollama 0.20.2, claude-code, bleeding
nixos-hardware - 06 abril Perfiles hardware actualizados
nixos-raspberrypi 16 marzo 10 abril Device tree overlays para Pi 3

Final feliz

Rebuild OK. XMonad compila. VPN funciona. DNS blindado. Tailscale sin tocar DNS. Todo commiteado y pusheado. Cafe aun caliente (el segundo).

Dos infartos, dos fixes, todo antes de las 9. A currar.

Comparte este post:

Es tu post

Estas seguro? Esto no se puede deshacer.

Comentarios (0)

Sin comentarios todavia. Se el primero!

Deja un comentario