Un tailnet en el que cualquier dispositivo alcanza a cualquier otro ya es útil de por sí. Tres añadidos lo convierten en una red y no en un simple conjunto de túneles, y los tres comparten una característica con la que la gente tropieza: el cliente anuncia una capacidad, y el servidor debe aprobarla. Una ruta anunciada pero no aprobada, sencillamente, no existe — en silencio — y el síntoma es que se puede hacer ping al enrutador pero no a nada de lo que hay detrás.
Un enrutador de subred — ponga toda una LAN dentro del tailnet. Una máquina en una red doméstica o de oficina anuncia el rango de esa red; después, cualquier otro dispositivo llega a las impresoras, el NAS y las interfaces de administración que hay detrás sin necesidad de instalar nada más ahí. Active primero el reenvío en el kernel, o los paquetes se quedarán en el enrutador sin ningún mensaje de error.
# On the machine that sits inside the LAN:
echo 'net.ipv4.ip_forward = 1' | sudo tee /etc/sysctl.d/99-ts.conf
echo 'net.ipv6.conf.all.forwarding = 1' | sudo tee -a /etc/sysctl.d/99-ts.conf
sudo sysctl -p /etc/sysctl.d/99-ts.conf
sudo tailscale up --login-server https://vpn.example.com \
--advertise-routes=192.168.1.0/24 --accept-routes
# On the control server — approve it, or it does not exist.
# The subcommand moved between releases; check `hs nodes --help` first.
hs nodes list
hs nodes approve-routes --identifier 3 --routes 192.168.1.0/24
Un nodo de salida — envíe todo el tráfico a través del VPS. El mismo mecanismo con una ruta más amplia: un dispositivo que se anuncia como nodo de salida se ofrece a cargar con toda la conexión a internet de otro dispositivo. En una red de cafetería u hotel no confiable, eso es exactamente lo que se necesita, y es lo más parecido a una VPN personal que hay en esta guía.
# On the VPS that will do the exiting (forwarding must be on, as above):
sudo tailscale up --login-server https://vpn.example.com --advertise-exit-node
# Approve it on the control server, then on the laptop:
tailscale set --exit-node=100.64.0.1 --exit-node-allow-lan-access
tailscale set --exit-node= # turn it off again
Un nodo de salida no es una VPN comercial, y no debería venderse a sí mismo la idea de que lo es. Su dirección es solo suya y es estable, lo cual es excelente contra el Wi-Fi de la cafetería e inútil contra la correlación a largo plazo entre sitios — el equilibrio se explica en la guía principal. Tenga en cuenta también que puede ejecutar el nodo de salida en un segundo VPS más barato, y mantener el servidor de control completamente libre de tráfico retransmitido.
Reglas de acceso — escríbalas antes de que se una la segunda persona. La política por defecto es permitir todo, lo cual es correcto para un tailnet de una sola persona y deja de serlo en cuanto hay alguien más en él. La política es un pequeño documento HuJSON: grupos de usuarios, etiquetas para las máquinas, y una lista de reglas que dicen qué orígenes pueden llegar a qué destinos y por qué puertos. Apunte la configuración hacia el archivo, mantenga el archivo bajo control de versiones, y recargue después de cada edición.
{
"groups": {
"group:admin": ["alice"],
"group:contractor":["bob"]
},
"tagOwners": {
"tag:server": ["group:admin"],
"tag:exit": ["group:admin"]
},
"acls": [
// Admins reach everything.
{ "action": "accept", "src": ["group:admin"], "dst": ["*:*"] },
// The contractor reaches one machine, on two ports, and nothing else.
{ "action": "accept", "src": ["group:contractor"],
"dst": ["tag:server:22,443"] }
],
"autoApprovers": {
"routes": { "192.168.1.0/24": ["tag:server"] },
"exitNode": ["tag:exit"]
}
}
Dos notas sobre ese archivo. El lenguaje de políticas es el de Tailscale, y Headscale implementa un subconjunto amplio y creciente de él, no todo — consulte la documentación de su versión antes de confiar en una regla poco habitual. Y dónde vive la política también se ha movido: las versiones más antiguas indicaban una ruta en la configuración de nivel superior; las más recientes la agrupan bajo una sección de política con un modo que también puede mantener las reglas en la base de datos. Ambas están documentadas; la que importa es la que trae la versión que ha fijado.
MagicDNS — nombres cortos, y su propio resolver en todas partes. Con MagicDNS activado, cada dispositivo responde a un nombre corto dentro del sufijo que eligió en el paso 02, así que ssh nas funciona desde cualquier lugar sin necesidad de un archivo hosts. La segunda mitad es la interesante: el servidor de control también envía una lista de servidores de nombres a cada cliente, lo que significa que el resolver que construyó en la guía del resolver DNS privado puede servir a su teléfono con datos móviles — filtrando, cacheando y sin registrar nada — mientras escucha en una dirección del tailnet que no es alcanzable desde internet en absoluto.
dns:
magic_dns: true
base_domain: ts.example.com
override_local_dns: true # beat whatever DHCP handed the device
nameservers:
global:
- 100.64.0.5 # your resolver, on the tailnet