Un tailnet où chaque appareil peut joindre tous les autres est déjà utile. Trois ajouts en font un véritable réseau plutôt qu'un simple jeu de tunnels, et tous trois partagent un même piège : le client annonce une capacité, et le serveur doit l'approuver. Une route annoncée mais non approuvée n'existe tout simplement pas, silencieusement, et le symptôme est que vous pouvez pinguer le routeur mais rien derrière lui.
Un routeur de sous-réseau — placez tout un réseau local sur le tailnet. Une machine du réseau domestique ou de bureau annonce la plage du réseau ; tous les autres appareils peuvent alors joindre les imprimantes, le NAS et les interfaces d'administration qui se trouvent derrière elle, sans rien avoir à installer là-bas. Activez d'abord le forwarding dans le noyau, sinon les paquets s'arrêtent au routeur sans le moindre message d'erreur.
# 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 nœud de sortie — faites sortir tout le trafic par le VPS. Le même mécanisme avec une route plus large : un appareil qui s'annonce comme nœud de sortie propose de porter toute la connexion internet d'un autre appareil. Sur un réseau de café ou d'hôtel non fiable, c'est exactement ce qu'il vous faut, et c'est ce qui, dans ce guide, se rapproche le plus d'un VPN personnel.
# 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 nœud de sortie n'est pas un VPN commercial et ne doit pas se vendre comme tel, même à vous-même. Son adresse est à vous seul et elle est stable, ce qui est excellent contre le Wi-Fi d'un café et inutile contre une corrélation à long terme entre plusieurs sites — le compromis est détaillé dans le guide pilier. Notez aussi que vous pouvez faire tourner le nœud de sortie sur un second VPS, moins cher, et garder le serveur de contrôle entièrement libre de tout trafic relayé.
Règles d'accès — rédigez-les avant qu'une deuxième personne ne rejoigne le réseau. La politique par défaut autorise tout, ce qui est correct pour un tailnet d'une seule personne et faux dès qu'une autre personne s'y trouve. La politique est un petit document HuJSON : des groupes d'utilisateurs, des tags pour les machines, et une liste de règles qui disent quelles sources peuvent joindre quelles destinations sur quels ports. Pointez la configuration vers le fichier, gardez le fichier sous contrôle de version, et rechargez après chaque modification.
{
"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"]
}
}
Deux remarques sur ce fichier. Le langage de politique est celui de Tailscale, et Headscale en implémente un sous-ensemble large et croissant plutôt que la totalité — consultez la documentation de votre version avant de compter sur une règle exotique. Et l'endroit où vit la politique a changé : les anciennes versions nommaient un chemin dans la configuration de premier niveau, les plus récentes la regroupent sous une section de politique avec un mode qui peut aussi garder les règles en base de données. Les deux sont documentés ; celui qui compte est celui que fournit la version que vous avez figée.
MagicDNS — des noms courts, et votre propre résolveur partout. Une fois MagicDNS activé, chaque appareil répond à un nom court à l'intérieur du suffixe que vous avez choisi à l'étape 02, si bien que ssh nas fonctionne depuis n'importe où sans fichier hosts. La seconde moitié est la plus intéressante : le serveur de contrôle pousse aussi une liste de serveurs de noms à chaque client, ce qui signifie que le résolveur que vous avez construit dans le guide du résolveur DNS privé peut servir votre téléphone en données mobiles — en filtrant, en mettant en cache et en ne journalisant rien — tout en écoutant sur une adresse du tailnet qui n'est absolument pas joignable depuis internet.
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