Tailscale

Tailscale

Notes

Tailscale systray

Sur les ordinateurs de bureau connectés au réseau mesh, il est possible d’ajouter systray

Le démon en arrière-plan (tailscaled) fonctionne généralement avec root comme utilisateur, et donc seulement rootpeut gérer le démon. Pour permettre à un autre utilisateur de gérer Tailscale, définissez l’utilisateur en tant qu’opérateur à l’aide de la commande tailscale set 

1
2
#sudo tailscale set --operator=<USERNAME>
sudo tailscale set --operator=$USER

Sous Arch Linux KDE Plasma, l’application officielle de barre d’état système de Tailscale devrait fonctionner. Elle est encore en bêta, nécessite Tailscale v1.88 ou ultérieure et doit être activée pour votre réseau Tailscale.

Vérifier version Tailscale

1
tailscale version

Version

1
2
3
4
1.102.4
  tailscale commit: 3caf7d9e7dcaba589cfc58beda596929733e4fea-dirty
  long version: 1.102.4
  go version: go1.27.0-X:nodwarf5

Démarrer le service et se connecter si besoin (activé par défaut à l’installation client tailscale)

1
2
sudo systemctl enable --now tailscaled
sudo tailscale up

Lancement application barre d’état système avec le compte utilisateur, sans sudo :

1
tailscale systray

Pourlancement automatique (Tailscale v1.96 ou +)

1
tailscale configure systray --enable-startup=freedesktop

On peut aussi utiliser un service systemd utilisateur

1
tailscale configure systray --enable-startup=systemd

Si la commande tailscale systray n’est pas disponible, mettez Tailscale à jour et vérifiez que la fonctionnalité bêta est activée pour votre réseau. Tail Tray est une autre option conçue pour KDE, mais ce n’est pas l’application officielle de Tailscale.

Tailscale et VPN Mullvad

Problème tailscale si le VPN Mullvad est actif

PV1 Archlinux: Tests pour mettre en évidence l’erreur

1
2
3
4
5
tailscale ping yiak # direct ou "via DERP(...)" ?  
ping -4 -c2 100.64.0.6 # IPv4 tailnet  
ping -6 -c2 fd7a:115c:a1e0::6 # IPv6 tailnet  
dig headscale.xoyize.xyz  
dig @100.100.100.100 headscale.xoyize.xyz
OK sans VPN

, NOK avec VPN

Ces tests confirment que Mullvad bloque le tailnet.

Insérer des règles directement dans les chaînes de Mullvad fonctionne (autoriser l’entrée et la sortie sur l’interface tailscale), mais Mullvad les efface à la reconnexion (règles non persistantes). La méthode qui survit aux reconnexions utilise une table nftables séparée qui pose sur le trafic Tailscale la marque d’exclusion de Mullvad, ct mark 0x00000f41 (source). Voici le principe, à adapter : mullvad and tailscale coexisting or hello nftables +2

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
sudo mkdir -p /etc/nftables.d
sudo tee /etc/nftables.d/mullvad-tailscale.nft <<'EOF'
table inet excludeTraffic {}
delete table inet excludeTraffic
table inet excludeTraffic {
  chain excludeOutgoing {
    type route hook output priority -100; policy accept;
    ip  daddr 100.64.0.0/10       ct mark set 0x00000f41 meta mark set 0x6d6f6c65
    ip6 daddr fd7a:115c:a1e0::/48 ct mark set 0x00000f41 meta mark set 0x6d6f6c65
  }
  chain allowIncoming {
    type filter hook input priority -100; policy accept;
    iifname "tailscale0" ct mark set 0x00000f41 meta mark set 0x6d6f6c65
  }
}
EOF

Chargez-la au démarrage avec une unité systemd ou nftables.service. La valeur 0x6c7873 vient de ma mémoire de la doc de Mullvad, alors que 0x00000f41 est confirmée par ma recherche : vérifiez les deux sur la page « split tunneling » de Mullvad, ou reprenez un des dépôts qui documentent ce montage (par exemple alessio-ds/tailscale-mullvad-linux, qui cible Arch). Après chargement, sudo nft list ruleset doit montrer la table, et tailscale ping un-pair doit répondre alors que Mullvad est connecté.

Correctif persistant

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
sudo tee /etc/systemd/system/tailscale-mullvad.service <<'EOF'
[Unit]
Description=Exclusion du tailnet du kill switch Mullvad
After=network.target

[Service]
Type=oneshot
RemainAfterExit=yes
ExecStart=/usr/bin/nft -f /etc/nftables.d/mullvad-tailscale.nft
ExecStop=/usr/bin/nft delete table inet excludeTraffic

[Install]
WantedBy=multi-user.target
EOF
sudo systemctl daemon-reload
sudo systemctl enable --now tailscale-mullvad.service
systemctl is-active tailscale-mullvad.service

Le fichier commence par table ... {} suivi de delete table, donc le service peut être relancé autant de fois que vous voulez sans erreur.

Vérifier que ça tient

1
2
mullvad disconnect && mullvad connect && sleep 5
ping -4 -c2 100.64.0.6

Ça doit aussi marcher après un redémarrage, sans action de votre part.

Vous pouvez maintenant lancer l’audit avec Mullvad actif : ./hs-audit.sh. Si un alias du CSV est en Ping=Y et que SSH est refusé alors que le ping passe, regardez le pare-feu du VPS, puisque l’IP source est celle de Mullvad.