Oggi una vittoria piccola, di quelle che valgono doppio: lo Scar sotto la VPN aziendale, e da lì collegato al GX10 con VS Code Remote come se fossi in salotto. Per mesi le due cose sono state incompatibili.
GlobalProtect ti si mangia la casa
Quando lavoro, il portatile sta sotto GlobalProtect. La VPN si prende la rotta di default, si prende il DNS, e nella configurazione che mi è toccata in sorte aggiunge pure il piacere di ammutolire la LAN: l’IP locale del GX10 smette di esistere nell’istante in cui alzi lo scudo. Da un punto di vista di sicurezza aziendale ha un senso. Da quello di uno che vuole aprire VS Code e lavorare sul mini server in salotto, è un problema.
La toppa vecchia: il reverse SSH tunnel
Per mesi ho campato con un reverse tunnel SSH. Il GX10 apre un canale in uscita verso una macchina raggiungibile da internet, e quando mi serve mi riporta indietro la porta 22.
Funziona, non dico di no. Ma vuol dire un demone da tenere vivo, una porta pubblica esposta, l’ansia quando cambia l’IP, e la certezza matematica che il tunnel sarà caduto proprio mentre ti serve adesso. Ogni volta i suoi rituali di resurrezione. Ero arrivato a odiare quel tunnel.
Tailscale: l’IP 100.x non muore mai
La soluzione la rimandavo da tempo ed era Tailscale.
GX10 e Scar nella stessa tailnet, il mini server prende il suo indirizzo
100.x.y.z e quello resta lì per sempre. Non è un IP che cambia, non è una
porta da forwardare, non c’è un demone da pregare: è l’indirizzo della macchina.
Su VS Code basta una entry nelle Remote-SSH settings:
Host gx10
HostName 100.x.y.z
User ale
E il Remote si attacca come se il GX10 fosse accanto al portatile.
Il bello: funziona anche sotto VPN, grazie al DERP
La domanda vera era un’altra: sotto GlobalProtect, che la LAN l’ha appena
spenta, il 100.x regge? Regge. Ed è qui la parte che vale il post.
Tailscale prova sempre la via diretta WireGuard (UDP 41641), che è la più veloce. Le VPN aziendali cattive l’UDP in uscita lo strozzano, figurarsi. Il fallback di Tailscale si chiama DERP: un relay che incapsula i pacchetti WireGuard dentro HTTPS su TCP 443. E l’HTTPS su 443, anche la VPN più paranoica deve lasciarlo passare, perché altrimenti non ti fa più lavorare.
Tradotto: alzo GlobalProtect, la LAN di casa muore, il 100.x del GX10
risponde lo stesso. I pacchetti fanno il giro (laptop, relay, GX10) e in chiaro
c’è solo ciphertext WireGuard end-to-end. Il relay non legge niente, fa da
postino.
La verifica sono due comandi:
tailscale status # sotto VPN vedrai "relay <region>" invece di "direct ..."
tailscale ping gx10 # pong ... via DERP(fra) in ...
Se invece vuoi costringere Tailscale a non sperare più nella rotta diretta e saltare subito il relay (utile quando l’UDP muore a connessione aperta e il fallback temporeggia), gli togli l’UDP da sotto i piedi:
sudo iptables -A OUTPUT -p udp --dport 41641 -j DROP
Niente UDP, niente direct: il client va dritto in DERP su 443. Quando ammaini la VPN togli la regola e torni sulla rotta diretta senza accorgertene.
Il costo del relay è onesto: più latenza e banda non eccelsa, è un relay di terzi non un canale dedicato. Per aprire un terminale, editare file e lanciare job sul GX10 basta e avanza. I trasferimenti ponderali aspetto di farli a casa, sotto la mia di rete.
Tre filosofie a confronto
Il reverse tunnel, che lo preghi. La VPN aziendale, che blocca tutto e poi si meraviglia di te. E un relay che prende il traffico più controllato di internet, l’HTTPS, e lo usa come canale preferenziale. Ha vinto il postino.
