Tailscale: VPN sin dolor y los errores de acceso que aún duelen

¿Te fue útil?

Estás de guardia. Alguien pregunta: “¿Puedes conectarte al host de la base de datos de producción? La VPN está caída otra vez.”
La mitad de las veces la “VPN” es en realidad una colección de configuraciones de cliente obsoletas, certificados caducados y una regla de firewall que nadie se atreve a tocar.
La otra mitad es un error de usuario que parece una caída de red hasta que lo miras el tiempo suficiente.

Tailscale vende el sueño: redes privadas seguras con menos piezas móviles. En general lo cumple.
Pero los bordes afilados no desaparecieron; se movieron. El control de acceso, las rutas, el DNS y la identidad son ahora donde la gente se corta.
Vamos a configurarlo correctamente y luego a hablar de cómo falla en el mundo real—porque fallará.

Qué es realmente Tailscale (y qué no lo es)

Tailscale es una red superpuesta basada en WireGuard que vincula la conectividad a la identidad.
Obtienes un rango de IP privado (típicamente 100.64.0.0/10), los nodos se autentican mediante un proveedor de identidad,
y el plano de control coordina claves y rutas para que los dispositivos puedan comunicarse directamente cuando es posible.

El modelo mental crucial: Tailscale no es “un servidor VPN”. Es una malla distribuida con una capa de coordinación.
La mayor parte del tráfico es peer-to-peer. Si no puede serlo (NATs, firewalls, NAT simétrico, etc.), el tráfico se retransmite mediante DERP.
DERP no es “una puerta trasera”; es un relé pragmático para que tu portátil pueda alcanzar una máquina en un datacenter anticuado.

Lo que Tailscale no es: un reemplazo para la higiene básica de red. Sigues necesitando firewalls en los hosts,
enrutamiento correcto, DNS sensato y un plan para acceso privilegiado. Tailscale facilita hacer esas cosas.
No las hace por ti.

Y sí, aún puedes quedarte fuera. Tailscale solo te ayuda a lograrlo más rápido y desde más lugares.

Hechos e historia que vale la pena saber

  • WireGuard es joven según los estándares de VPN. Llegó al kernel principal de Linux en 2020, lo cual importa al compararlo con pilas IPsec de décadas de antigüedad.
  • El espacio de direcciones predeterminado de Tailscale (100.64.0.0/10) vive en el rango CGNAT, reduciendo colisiones con redes RFC1918 internas—por lo general.
  • DERP es un relé, no un concentrador de túneles. Existe para manejar casos donde el NAT traversal falla y bloquearía la conectividad.
  • “Zero trust” se volvió una partida presupuestaria después de que los modelos basados únicamente en perímetro siguieran fallando en entornos híbridos y con trabajo remoto.
  • Las VPN tradicionales normalizaron secretos compartidos y configuraciones estáticas (perfiles de cliente, PSK, certificados de larga duración). Tailscale empuja hacia autenticación ligada a identidad y de corta duración.
  • El split tunneling combate instintos antiguos. Muchas VPN corporativas forzaban “todo el tráfico por HQ”; Tailscale lo hace opcional vía nodos de salida, a propósito.
  • Las ACLs son ahora policy-as-code. Eso es excelente—hasta que alguien trata el archivo de ACL como un conjuro mágico en lugar de un límite de seguridad.
  • El enrutamiento de subredes precede a Tailscale por décadas, pero el enrutamiento de subredes en overlay tienta a “simplemente enrutar todo el datacenter”, que es cómo comienzan las auditorías.
  • Los proveedores de identidad se convirtieron en el nuevo perímetro, por eso una caída del IdP puede sentirse como una caída de red con traje.

Una configuración sensata de “VPN sin dolor”

Si quieres que Tailscale siga siendo aburrido, decide qué significa “aburrido” antes de pulsar cualquier conmutador.
Mi definición: los ingenieros pueden alcanzar lo que necesitan, el acceso es por defecto con menor privilegio,
y el modo de fallo es “no se puede conectar” en lugar de “conectado a todo”.

Comienza con una topología mínima

No empieces con rutas de subred, nodos de salida y excepciones inteligentes basadas en etiquetas en la primera semana.
Comienza con conectividad dispositivo a dispositivo entre un pequeño conjunto de estaciones de trabajo de administración y un par de hosts objetivo.
Confirma el rendimiento, confirma el flujo de identidad, confirma los registros. Luego escala.

Elige tu historia de identidad y comprométete

Si usas un IdP (Google Workspace, Microsoft Entra ID, Okta, etc.), aplica MFA y confianza de dispositivo cuando sea posible.
El IdP es ahora tu “inicio de sesión VPN”. Trátalo como crítico para producción.
Si tu organización es alérgica al SSO, usa claves de autenticación de Tailscale—pero entiende el ciclo de vida, la rotación y el alcance.

Decide cómo se autorizan los nodos

Para entornos de producción, prefiere un modelo donde:

  • Los usuarios no puedan añadir dispositivos al azar sin aprobación (o al menos sin visibilidad).
  • Los servidores se registren con claves de autenticación con alcance y reutilizables (o claves efímeras de una sola vez) más etiquetas.
  • La desprovisión de un usuario o dispositivo sea una única acción que realmente funcione.

Haz explícito el plan de red

Las redes superpuestas invitan a decisiones de “solo esta vez” que se vuelven permanentes.
Escribe:

  • Qué servicios deben ser accesibles (SSH, RDP, Postgres, web interna, etc.).
  • Desde qué roles (on-call, CI, DBAs, soporte).
  • Si usarás rutas de subred o requerirás instalar Tailscale en los hosts reales.
  • Si permitirás nodos de salida y para quiénes.

Broma #1: Una VPN es como una cocina compartida en la oficina—si no etiquetas las cosas, alguien beberá la leche, y será tu caída.

Identidad, ACLs, etiquetas: dónde el acceso acierta o falla

La gran ventaja de Tailscale también es su mayor trampa: el control de acceso se vuelve lo suficientemente fácil como para que la gente deje de pensar en ello.
En la tierra clásica de VPN tenías un límite de red y un montón de reglas de firewall. En el mundo Tailscale, las ACLs son tu firewall.
Si las tratas como “ese archivo de configuración que copiamos y pegamos”, introducirás fallos de seguridad.

Usa grupos para humanos, etiquetas para máquinas

Una regla práctica: los humanos pertenecen a grupos, los servidores obtienen etiquetas.
Los humanos cambian de trabajo, renuncian, toman vacaciones y traen dispositivos personales. Los servidores no deberían heredar identidad humana.
Las etiquetas son cómo expresas roles de máquina (“tag:db”, “tag:bastion”, “tag:monitoring”).

Luego escribe las ACLs como si te fueran a interrogar sobre ellas.
Menor privilegio. Puertos explícitos. Nada de políticas amplias de “permitir todo” para “hacer que funcione”.
Hacer que funcione es fácil; hacerlo seguro es el trabajo.

Evita reglas amplias “temporales”

La regla de ACL más peligrosa es la que se añade durante un incidente.
La segunda más peligrosa es la que nadie recuerda que se añadió durante un incidente.
Pónte presión de tiempo: si añades una excepción de emergencia, programa su eliminación mientras todavía recuerdas por qué existe.

Piensa en términos de radio de explosión

Si un portátil se ve comprometido, ¿a qué puede acceder?
Si una clave de autenticación se filtra, ¿qué puede registrar?
Si el IdP está mal configurado, ¿qué obtiene un atacante?
Responde estas preguntas antes de que tu auditor te las haga en una sala fría con iluminación fluorescente.

Rutas de subred y nodos de salida: poderoso y fácil de abusar

El enrutamiento de subred es cómo haces que los clientes Tailscale alcancen redes que no ejecutan el cliente Tailscale.
Los nodos de salida son cómo enrutas el tráfico por defecto de un cliente a través de un nodo Tailscale.
Ambas funciones son útiles operativamente. Ambas pueden convertirse silenciosamente en la “nueva VPN corporativa”, con todos los problemas antiguos.

Enrutadores de subred: cuándo y cómo

Usa enrutadores de subred para:

  • Redes legacy que no puedes modificar (appliances, hypervisores antiguos, equipo de laboratorio).
  • Migraciones a corto plazo donde instalar Tailscale en todas partes es poco realista.
  • Conectividad sitio-a-sitio cuando quieres acceso basado en identidad, no confianza por sitio entero.

Evita los enrutadores de subred por defecto si puedes instalar Tailscale en los hosts. Los clientes a nivel de host te dan mejor atribución,
mejor segmentación y menos sorpresas de “¿por qué todo el tráfico está haciendo hairpin a través de esa VM?”.

Nodos de salida: trátalos como infraestructura privilegiada

Los nodos de salida no son solo características de enrutamiento; son puntos de aplicación de políticas y concentradores de tráfico.
Si los permites, aplica:

  • Nodos de salida dedicados y endurecidos (no “el escritorio de alguien”).
  • ACLs restringidas: solo grupos específicos pueden usarlos.
  • Monitorización: ancho de banda, CPU, pérdida de paquetes y si los clientes usan DERP inesperadamente.

Los nodos de salida también complican la respuesta a incidentes. Si tu IP de egreso está repentinamente “mal”, puede ser porque un cliente seleccionó un nodo de salida
(intencional o accidentalmente). Eso no es un misterio de red; es una casilla marcada.

DNS y MagicDNS: resolución de nombres como característica de fiabilidad

La mayoría de los informes de “la VPN está caída” son en realidad fallos de DNS disfrazados de red.
MagicDNS de Tailscale puede limpiar esto dando nombres estables a los nodos y manejando DNS dividido para dominios internos.
También puede crear nuevos modos de fallo si lo configuras a medias.

Decide qué significa “DNS interno”

Si ya ejecutas DNS interno (Bind, Unbound, Infoblox, zonas privadas de Route 53, etc.), decide si:

  • Los nombres de Tailscale son suficientes (node-name.tailnet), o
  • Necesitas dominios internos resueltos sobre Tailscale (split DNS), o
  • Necesitas ambos, con reglas de precedencia claras.

Luego prueba en macOS, Windows, Linux y móvil. Las pilas DNS no son consistentes; son un zoológico con papeleo.

Tailscale SSH: elimina llaves, no responsabilidad

Tailscale SSH puede reemplazar la distribución tradicional de llaves SSH ligando el acceso SSH a la identidad y política de Tailscale.
Eso es atractivo: menos llaves de larga duración, menos “quién es el dueño de esta línea en authorized_keys” y mejores registros de auditoría.
También es un cambio en la memoria operativa.

Un buen enfoque:

  • Habilita Tailscale SSH en un conjunto pequeño de hosts primero.
  • Mantén acceso de emergencia (consola, serial de cloud, out-of-band) porque eventualmente te vas a configurar mal.
  • Decide si aún permites openssh fuera de redes Tailscale. Normalmente, no.

Una cita de fiabilidad que sigue vigente: “La esperanza no es una estrategia.” — General Gordon R. Sullivan.
No es exclusivamente una cita de operaciones, pero es dolorosamente precisa cuando tu camino de acceso depende de un único plano de control frágil.

Tareas prácticas: comandos, salidas y decisiones (12+)

Estos son los comandos que ejecutas cuando alguien dice “Tailscale está roto”, además de lo que significa la salida y la decisión que tomas después.
Son intencionalmente mundanos. Lo mundano salva producción.

Task 1: Verify the node is actually connected

cr0x@server:~$ tailscale status
100.64.10.12   web-01           linux   active; direct 198.51.100.24:41641, tx 123456 rx 234567
100.64.10.20   db-01            linux   active; relay "iad", tx 45678 rx 56789
100.64.10.99   cr0x-laptop      macOS   active; direct 203.0.113.77:54012, tx 98765 rx 87654

Significado: Si no ves a tu par, no estás en el mismo tailnet o el par está desconectado. “direct” vs “relay” te dice la ruta.

Decisión: Si faltan pares, verifica login/autorización. Si está relayed inesperadamente, empieza a mirar NAT/firewall.

Task 2: Check local daemon health and login state

cr0x@server:~$ tailscale status --json | jq '.BackendState, .Self.DNSName, .Self.Online'
"Running"
"web-01.tailnet-abc.ts.net."
true

Significado: BackendState “Running” es bueno. DNSName confirma en qué tailnet estás.

Decisión: Si no está en ejecución, reinicia el servicio. Si DNSName es incorrecto, estás logueado en la organización equivocada.

Task 3: Confirm which routes and DNS settings are applied

cr0x@server:~$ tailscale netcheck
Report:
        * UDP: true
        * IPv4: yes, 198.51.100.24:41641
        * IPv6: no
        * MappingVariesByDestIP: false
        * HairPinning: true
        * Nearest DERP: iad
        * DERP latency:
                - iad: 18.2ms   (nearest)
                - ord: 35.4ms
                - lax: 72.9ms

Significado: UDP true es clave para WireGuard directo. DERP más cercano es donde retransmitirás si hace falta.

Decisión: Si UDP es false, arregla firewall/NAT. Si la latencia de DERP es enorme, espera sesiones interactivas lentas.

Task 4: See active preferences (exit node, SSH, routes)

cr0x@server:~$ tailscale prefs
{
  "ControlURL": "https://controlplane.tailscale.com",
  "RouteAll": false,
  "ExitNodeID": "",
  "CorpDNS": true,
  "RunSSH": false
}

Significado: RouteAll false significa sin nodo de salida. CorpDNS true significa que usa la configuración DNS del tailnet.

Decisión: Si alguien reclama “internet está lento”, revisa RouteAll/ExitNodeID primero. A menudo es auto-infligido.

Task 5: Confirm you can reach a peer over the tailnet IP

cr0x@server:~$ ping -c 2 100.64.10.20
PING 100.64.10.20 (100.64.10.20) 56(84) bytes of data.
64 bytes from 100.64.10.20: icmp_seq=1 ttl=64 time=22.4 ms
64 bytes from 100.64.10.20: icmp_seq=2 ttl=64 time=22.1 ms

--- 100.64.10.20 ping statistics ---
2 packets transmitted, 2 received, 0% packet loss, time 1002ms
rtt min/avg/max/mdev = 22.141/22.262/22.384/0.121 ms

Significado: La conectividad básica funciona.

Decisión: Si el ping falla pero el estado muestra “active”, sospecha de ACLs o firewall del host bloqueando ICMP (o ping deshabilitado).

Task 6: Test the actual service port (because ping lies)

cr0x@server:~$ nc -vz 100.64.10.20 5432
Connection to 100.64.10.20 5432 port [tcp/postgresql] succeeded!

Significado: La ruta TCP a Postgres está abierta.

Decisión: Si esto falla pero el ping funciona, es ACL o firewall del host o el servicio no escucha en la interfaz del tailnet.

Task 7: Check the service is listening on the right interfaces

cr0x@server:~$ sudo ss -lntp | grep 5432
LISTEN 0      244          127.0.0.1:5432       0.0.0.0:*    users:(("postgres",pid=1342,fd=6))

Significado: Postgres está vinculado solo a localhost. Tailscale no puede alcanzarlo remotamente.

Decisión: Vincula a la IP de Tailscale o a 0.0.0.0 (con restricciones de firewall/ACL), y vuelve a probar.

Task 8: Inspect Linux routing table for subnet route surprises

cr0x@server:~$ ip route show
default via 192.0.2.1 dev eth0
100.64.0.0/10 dev tailscale0 scope link
10.20.0.0/16 dev tailscale0 scope link

Significado: 10.20.0.0/16 se enruta vía tailscale0—probablemente una ruta de subred que aceptaste.

Decisión: Si esta ruta es inesperada, identifica el router que la anuncia y decide si deshabilitas la aceptación de rutas.

Task 9: Confirm which subnet routes are being advertised from a router node

cr0x@server:~$ tailscale status --json | jq '.Self.PrimaryRoutes, .Self.AdvertisedRoutes'
null
[
  "10.20.0.0/16"
]

Significado: Este nodo está anunciando 10.20.0.0/16 al tailnet.

Decisión: Si no pretendías eso, elimina la configuración de advertise-routes y rota cualquier automatización que la vuelva a aplicar.

Task 10: Check whether your client is using DERP (relay) unexpectedly

cr0x@server:~$ tailscale ping 100.64.10.99
pong from cr0x-laptop (100.64.10.99) via DERP(iad) in 36ms

Significado: Estás retransmitiendo por DERP, no directo.

Decisión: Si el rendimiento importa, investiga la alcanzabilidad UDP y el comportamiento NAT en ambos extremos.

Task 11: Check host firewall counters (Linux nftables example)

cr0x@server:~$ sudo nft list ruleset | sed -n '1,120p'
table inet filter {
  chain input {
    type filter hook input priority filter; policy drop;
    iif "lo" accept
    ct state established,related accept
    iif "tailscale0" tcp dport { 22, 5432 } accept
    counter packets 0 bytes 0 drop
  }
}

Significado: tailscale0 está permitido para los puertos 22 y 5432; la política es drop por defecto.

Decisión: Si los contadores muestran drops que aumentan durante tu prueba, arregla las reglas del firewall antes de culpar a Tailscale.

Task 12: Validate DNS resolution for MagicDNS names

cr0x@server:~$ dig +short web-01.tailnet-abc.ts.net
100.64.10.12

Significado: El nombre resuelve a la IP del tailnet.

Decisión: Si no resuelve, revisa la habilitación de MagicDNS y la configuración DNS del cliente; no pierdas tiempo en el enrutamiento aún.

Task 13: Inspect systemd service logs for auth and network errors

cr0x@server:~$ sudo journalctl -u tailscaled -n 50 --no-pager
Dec 27 11:02:14 web-01 tailscaled[812]: wgengine: Reconfig: configuring userspace WireGuard config (with 2 peers)
Dec 27 11:02:18 web-01 tailscaled[812]: magicsock: derp-https: connected to derp-iad
Dec 27 11:02:24 web-01 tailscaled[812]: health: state=running

Significado: Ves arranque normal, conexión a DERP y estado de ejecución saludable.

Decisión: Si los logs muestran fallos repetidos de autenticación, expiración de claves o “not authorized”, detente y arregla identidad/aprobación.

Task 14: Confirm client version consistency (to avoid weird edge bugs)

cr0x@server:~$ tailscale version
1.76.6
  tailscale commit: 3f2c1a7e4
  go version: go1.22.6

Significado: Sabes qué estás ejecutando.

Decisión: Si un segmento usa una versión antigua, actualiza antes de una depuración profunda. Versiones mixtas crean fantasmas que consumen tiempo.

Guion de diagnóstico rápido

Cuando la conectividad se rompe, quieres localizar la capa que está en cuellos de botella rápidamente: identidad, política, enrutamiento, transporte o el servicio mismo.
Aquí está el orden que tiende a minimizar el tiempo desperdiciado.

Primero: confirma identidad y pertenencia

  • ¿Muestra tailscale status al par?
  • ¿El nodo está logueado en el tailnet correcto (sufijo DNSName)?
  • ¿El dispositivo está aprobado/autorizado en la consola de administración (si la aprobación está activada)?

Si esta capa está mal, nada más importa. El enrutamiento puede ser perfecto; aún así no estás invitado a la fiesta.

Segundo: confirma la política (ACLs, etiquetas, política SSH)

  • ¿Puedes hacer ping a la IP del tailnet?
  • ¿Puedes conectar al puerto real con nc -vz?
  • Si usas Tailscale SSH, ¿está habilitado y permitido para esta identidad?

La mayoría de las fallas en producción son desajustes de política: una etiqueta no se aplicó, una regla era demasiado amplia (y se ajustó), o un grupo cambió.

Tercero: confirma transporte (directo vs DERP, alcance UDP)

  • Ejecuta tailscale netcheck y mira UDP.
  • Ejecuta tailscale ping y ve si es directo o DERP.

Si es DERP y lento, no estás “caído”, solo estás pagando el impuesto NAT.
Arreglar NAT/firewall puede convertir un shell remoto lento en uno normal.

Cuarto: confirma enrutamiento (rutas de subred, nodos de salida)

  • Revisa ip route por rutas inesperadas vía tailscale0.
  • Comprueba si un nodo de salida está habilitado (tailscale prefs).

Los problemas de enrutamiento a menudo parecen “un servicio interno aleatorio está roto”. No es aleatorio; es determinista y no documentado.

Quinto: confirma el servicio y el firewall del host

  • ¿El servicio está escuchando en la interfaz correcta (ss -lntp)?
  • ¿El firewall permite el tráfico de tailscale0 (nftables/iptables)?

Si Tailscale está bien pero el servicio se liga a 127.0.0.1, tu red superpuesta es irrelevante. Esta es la parte aburrida. Hazla de todos modos.

Errores comunes: síntomas → causa raíz → solución

1) “Veo el nodo, pero SSH agota el tiempo”

Síntomas: El nodo aparece en tailscale status. El ping puede funcionar. SSH/RDP/puerto de la app agota el tiempo.

Causa raíz: El firewall del host bloquea tailscale0, o el servicio solo escucha en localhost, o la ACL bloquea el puerto.

Solución: Revisa nc -vz, luego ss -lntp, luego nftables/iptables. Asegura que la ACL permita explícitamente el puerto destino y que el daemon se ligue a la interfaz accesible.

2) “Todo está lento hoy”

Síntomas: Sesiones interactivas con lag; transferencias de archivos lentas; retrasos intermitentes.

Causa raíz: El tráfico se retransmite vía DERP por UDP bloqueado o NAT simétrico; a veces un nodo de salida forzado añade latencia.

Solución: Ejecuta tailscale ping para confirmar DERP vs directo y tailscale netcheck para UDP. Permite UDP saliente/41641 en el firewall y evita nodos de salida para flujos sensibles a latencia salvo que sean necesarios.

3) “Habilitamos una ruta de subred y ahora pasan cosas raras”

Síntomas: Algunas IP internas se enrutan diferente; servicios se vuelven accesibles desde lugares que no deberían; tickets mencionan “split tunnel roto”.

Causa raíz: Clientes aceptaron una ruta de subred que solapa con rutas existentes, o se anunció una ruta demasiado amplia (como /16) cuando /24 bastaría.

Solución: Audita rutas con ip route y el tailscale status --json del router. Reduce los prefijos anunciados. Deshabilita la aceptación automática de rutas donde corresponda y aplica restricciones ACL para los destinos de la subred.

4) “Un contratista aún puede alcanzar prod tras el offboarding”

Síntomas: Un usuario se elimina del grupo del IdP, pero su dispositivo aún se conecta o aún tiene acceso a algo.

Causa raíz: El dispositivo permanece autorizado; las ACLs son basadas en etiquetas demasiado amplias; o una clave de autenticación de larga duración registró un nodo no ligado a la identidad del contratista.

Solución: Exige aprobación/expiración de dispositivos, poda dispositivos regularmente y prefiere identidad ligada al usuario para acceso humano. Para claves de máquina, acótalas y rótalas. Haz que “offboarding incluye dispositivos Tailscale” sea obligatorio.

5) “MagicDNS no funciona en mi laptop, pero sí en servidores”

Síntomas: dig falla para nombres tailnet; el acceso por IP funciona; el comportamiento difiere por OS.

Causa raíz: La configuración DNS del cliente está sobreescrita por otra VPN, un resolvedor local, portal cautivo o peculiaridades de prioridad DNS del SO.

Solución: Verifica con dig e inspecciona la configuración DNS del SO. Deshabilita DNS de VPN conflictiva y estandariza la política de configuración cliente. Si dependes de split DNS, pruébalo en todas las plataformas que soportas.

6) “No podemos alcanzar la subred del datacenter desde Tailscale”

Síntomas: Los nodos del tailnet pueden hablar entre sí, pero no a 10.x/192.168.x detrás de un enrutador de subred.

Causa raíz: El enrutador de subred no está reenviando (IP forwarding desactivado), firewall bloquea, o rutas no aprobadas en la UI de administración.

Solución: Habilita IP forwarding en el nodo router, permite el reenvío en el firewall y confirma que las rutas anunciadas están aprobadas y los clientes las aceptan. Luego prueba con traceroute y nc.

7) “Nodo de salida habilitado y ahora inicios de sesión SaaS parecen sospechosos”

Síntomas: Alertas basadas en geolocalización; cierres de sesión repetidos; sitios muestran otra región; picos de ancho de banda en un nodo.

Causa raíz: Usuarios enrutan todo su tráfico por un nodo de salida sin saberlo, cambiando la IP de egreso y la ubicación.

Solución: Restringe el uso de nodos de salida a grupos específicos. Educa a los usuarios sobre cuándo usarlos. Monitoriza los nodos de salida. Considera nodos de egreso dedicados por región si el cumplimiento lo requiere.

Tres micro-historias corporativas desde el frente

Micro-historia 1: El incidente causado por una suposición equivocada

Una compañía SaaS mediana desplegó Tailscale para reemplazar un IPsec viejo. El plan era limpio: los ingenieros se conectan desde laptops,
alcanzan un bastión y luego acceden a servicios internos. Alguien añadió un enrutador de subred para hacer accesible una red legacy de monitorización.

La suposición equivocada fue sutil: asumieron que “anunciar una ruta de subred” significaba “solo unas pocas personas pueden usarla”.
En realidad, cada cliente aceptó rutas por defecto, y las ACLs se escribieron de forma amplia (“engineering puede alcanzar interno”)
porque eso coincidía con la cultura de la VPN anterior.

Una semana después, un ingeniero en un dispositivo personal se unió al tailnet, instaló una herramienta de depuración y escaneó accidentalmente la subred de monitorización.
Nada malicioso. Pero las alertas parecían reconocimiento. Seguridad despertó. Dirección despertó. Todos despertaron de mal humor.

La solución no fue dramática: apretar ACLs a destinos y puertos específicos, requerir aprobación de dispositivo para nuevos nodos,
y hacer explícita la aceptación de rutas de subred solo para los roles que la necesitan. La lección real fue que el enrutamiento overlay cambia quién puede “ver” redes.
Si no lo haces explícito, lo descubrirás durante una revisión de incidentes.

Micro-historia 2: La optimización que salió mal

Un equipo de TI empresarial decidió estandarizar el acceso remoto enviando todo el tráfico de internet por nodos de salida “para monitorización de seguridad”.
Desplegaron un par de nodos por región y obligaron a los usuarios a activarlos. En papel, esto daba visibilidad central y egreso consistente.

El problema se presentó en tres actos. Primero, aumentaron los costes de ancho de banda y los nodos de salida se convirtieron en puntos calientes. Segundo, el trabajo interactivo se volvió más lento para
los ingenieros que ahora hacían hairpin a un nodo de salida y luego salían a servicios cloud en otra región. Tercero, una actualización rutinaria de kernel
más una peculiaridad del driver de la NIC causaron pérdida de paquetes en un nodo de salida, que se convirtió en un evento de “internet caído” para toda la empresa.

El incidente fue brutal porque parecía cualquier cosa: DNS, outages de SaaS, “problemas de Wi‑Fi”, lo que quieras.
El problema principal fue que reintrodujeron un punto de estrangulamiento central—exactamente lo que Tailscale suele ayudar a evitar.

Se recuperaron haciendo opcional el uso de nodos de salida, restringiéndolos a escenarios específicos (Wi‑Fi público, recursos geo-restringidos, pruebas de cumplimiento).
También añadieron monitorización y margen de capacidad para los nodos de salida que quedaron. La “optimización” fue en realidad un cambio de topología, y los cambios de topología tienen consecuencias.

Micro-historia 3: La práctica aburrida pero correcta que salvó el día

Una fintech ejecutaba Tailscale en la nube y on‑prem. Tenían una regla estricta: cada cambio de acceso a producción requería una pequeña solicitud de cambio,
y cada cambio de ACL requería revisión por pares, incluso si era “solo abrir el puerto 443 a un servicio nuevo”.

Durante un incidente, un ingeniero on‑call necesitó acceso urgente a un nodo de almacenamiento para recoger logs. El camino más rápido habría sido
añadir una excepción amplia de ACL para el grupo on‑call que alcanzara toda la subred de almacenamiento. Eso habría funcionado en minutos.

Pero el equipo siguió la práctica aburrida: una regla ACL estrecha con alcance a una sola etiqueta de host y un solo puerto, más una comprobación de postura del dispositivo de corta duración.
También lo documentaron en las notas del incidente y programaron su eliminación. El acceso funcionó, el incidente avanzó y nada “extra” quedó abierto.

Semanas después, un portátil de un contratista comprometido impactó el tailnet. El alcance del atacante fue limitado.
La flota de almacenamiento no estaba en alcance, porque las ACLs eran precisas y revisadas. El equipo no celebró.
Simplemente siguió adelante. Así es como se ve lo “correcto” en operaciones: casi decepcionantemente sin incidentes.

Listas de verificación / plan paso a paso

Paso a paso: desplegar Tailscale con mentalidad de producción

  1. Define objetivos de acceso. Lista servicios y puertos que deben ser alcanzables, por rol. Si no puedes listarlo, no puedes asegurararlo.
  2. Elige identidad y aplica MFA. Si hay SSO disponible, úsalo y exige MFA. Si no, trata las claves de autenticación como secretos con gestión de ciclo de vida.
  3. Habilita visibilidad y aprobaciones de dispositivos. Decide si los nuevos dispositivos se aprueban automáticamente. Para producción, por defecto exige aprobación.
  4. Establece nombres y etiquetas. Humanos en grupos. Servidores en etiquetas. Sin excepciones “porque es más fácil”.
  5. Comienza instalando Tailscale en hosts cuando sea posible. Las rutas de subred son un puente, no un estilo de vida.
  6. Escribe ACLs mínimas. Comienza con una regla “admin → bastion:22” y expande con cuidado.
  7. Activa MagicDNS intencionalmente. Prueba en todos los SO que soportes. Documenta cómo funciona el split DNS si lo usas.
  8. Decide sobre nodos de salida. Si se permiten, crea nodos de salida dedicados y restringe su uso. Si no, desactiva la función o bloquéala por política.
  9. Mantén acceso de emergencia. Acceso por consola, serial en la nube, iLO/iDRAC o equivalente. Un día lo necesitarás.
  10. Instrumenta y alerta. Vigila cambios en uso de DERP, carga de nodos de salida y logs de tailscaled en nodos críticos.
  11. Forma on‑call en el guion de diagnóstico. Asegura que la gente distinga fallo de ACL de fallo de DNS de problemas de binding del servicio.
  12. Haz higiene de acceso trimestral. Poda dispositivos antiguos, rota claves, revisa ACLs y audita rutas de subred.

Checklist: antes de habilitar enrutamiento de subred

  • Confirma que la subred no solapa con rutas existentes usadas por los clientes.
  • Confirma que el nodo router tiene IP forwarding habilitado y reglas de firewall de reenvío en su lugar.
  • Anuncia el prefijo más pequeño que funcione (evita /16 si /24 es suficiente).
  • Restringe el acceso a la subred usando ACLs (no confíes en “solo algunas personas la usarán”).
  • Decide qué clientes aceptan rutas y hazlo explícito.

Checklist: antes de habilitar nodos de salida

  • Usa nodos de salida dedicados con parches y monitorización.
  • Restringe quién puede usarlos (solo grupos).
  • Valida rendimiento y ruta MTU, especialmente para videollamadas y descargas grandes.
  • Planifica selección de región y consistencia de IP de egreso si el cumplimiento lo requiere.

Broma #2: La forma más rápida de “mejorar la seguridad” es enrutar todo por una sola caja—hasta que esa caja se convierta en tu nueva afición.

Preguntas frecuentes

¿Tailscale es “solo WireGuard”?

Bajo el capó, usa WireGuard para el plano de datos. La diferencia es el plano de control: identidad, distribución de claves,
coordinación de NAT traversal, ACLs y funciones opcionales como MagicDNS y Tailscale SSH. Esa es la parte que reemplaza tus scripts DIY.

¿Por qué veo “relay” en tailscale status?

Significa que la conexión no pudo establecerse directamente (normalmente por NAT/firewall/UDP), así que el tráfico va por DERP.
Sigue estando cifrado de extremo a extremo, pero la latencia y el rendimiento pueden verse afectados.

¿Puedo usar Tailscale sin instalarlo en todos los servidores?

Sí: usa un enrutador de subred. Pero entiende el trade-off: pierdes identidad por host y creas una dependencia de enrutamiento.
Está bien para redes legacy y migraciones. No es mi primera opción para servidores greenfield.

¿Cuál es la diferencia entre enrutamiento de subred y un nodo de salida?

El enrutamiento de subred anuncia prefijos internos específicos (como 10.20.0.0/16) al tailnet.
Un nodo de salida enruta la ruta por defecto de un cliente (0.0.0.0/0) a través de un nodo del tailnet, afectando el tráfico general de internet.

¿Deberíamos permitir dispositivos personales en el tailnet?

Si lo haces, trátalo como una decisión de política real. Exige aprobación de dispositivo y considera comprobaciones de postura.
Los dispositivos personales no son automáticamente maliciosos, pero tienen una realidad de parcheo y control distinta a endpoints gestionados.

¿Cómo interactúan las ACLs y los firewalls de host?

Las ACLs controlan lo que Tailscale permite en la capa overlay. Los firewalls del host controlan lo que el SO permite.
Necesitas ambos. Las ACLs impiden que se establezca una conexión; los firewalls del host detienen tráfico inesperado incluso si las ACLs son demasiado permisivas.

¿Es seguro usar Tailscale SSH en producción?

Sí, si lo tratas como un sistema de acceso privilegiado: políticas estrictas, despliegue cuidadoso y acceso de emergencia.
El riesgo principal es operativo—una mala configuración que te deje fuera—no una debilidad criptográfica.

¿Cuál es la falsa alarma más común de “está caído”?

DNS. O MagicDNS no resuelve, o no se aplica split DNS, o otra VPN/cliente secuestró la configuración de resolutor.
Prueba conectando a la IP del tailnet directamente; si eso funciona, es resolución de nombres, no enrutamiento.

¿Cómo hacemos offboarding correctamente?

Elimina el usuario de los grupos del IdP, deshabilita su SSO y revisa además y elimina sus dispositivos autorizados del tailnet.
Si usas claves de autenticación para máquinas, rota claves según horario y asegúrate que estén acotadas para que no puedan registrar dispositivos al azar.

¿Usar DERP significa que Tailscale puede leer nuestro tráfico?

No. DERP retransmite paquetes cifrados; no termina el cifrado.
Tu rendimiento puede cambiar, pero el contenido del tráfico no queda expuesto por el mecanismo de relé.

Conclusión: próximos pasos que no envejecen mal

Tailscale se gana su reputación de “VPN sin dolor” cuando lo tratas como un sistema de producción: identidad explícita, políticas explícitas
y enrutamiento explícito. La mayoría de las fallas no son místicas. Son básicas: tailnet equivocado, ACL equivocada, ruta equivocada, confusión de DNS o un servicio ligado a localhost.
El truco es depurar en el orden correcto y mantener pequeño el radio de explosión.

Pasos prácticos siguientes:

  • Adopta el guion de diagnóstico rápido y enséñalo al on‑call.
  • Audita tus ACLs por menor privilegio y elimina reglas amplias “temporales”.
  • Inventaría rutas de subred y haz explícita la aceptación; reduce prefijos cuando sea posible.
  • Si usas nodos de salida, trátalos como infra crítica: hosts dedicados, monitorización y acceso estricto.
  • Ejecuta una limpieza trimestral: dispositivos, claves, etiquetas y comportamiento DNS en todas las plataformas.

Manténlo aburrido. Aburrido es cómo duermes.

← Anterior
ZFS zfs send: La forma más rápida de mover terabytes (si lo haces bien)
Siguiente →
ZFS Reemplazo de múltiples discos: el orden seguro que previene fallos

Deja un comentario