Mullvad 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
, 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.