Condividere una connessione VPN con ogni dispositivo della LAN
Condividere un tunnel richiede inoltro, traduzione degli indirizzi e una rotta di ritorno. Confronta la condivisione dall'host, una rotta del router verso quell'host e un gateway che possiede il tunnel.
Un portatile tiene il tunnel, il resto della casa vuole lo stesso accesso, e il primo tentativo è indirizzare tutto verso la macchina collegata. Fallisce per motivi che non hanno nulla a che vedere con la VPN: l'host ricevente deve inoltrare il pacchetto, riscrivere la sua origine e assicurarsi che le risposte riescano a trovare la via di ritorno. Se manca uno dei tre, il portatile collegato continua a funzionare mentre ogni altro dispositivo va in timeout. La soluzione è un progetto di routing, non un'impostazione del client.
Perché indirizzare i dispositivi verso l'host non funziona
Un host che riceve un pacchetto destinato a una rete remota diventa un router per quel momento, che qualcuno lo abbia configurato come tale oppure no. L'inoltro è disattivato per impostazione predefinita su Linux e su Windows, a meno che una funzione non lo attivi. La traduzione degli indirizzi conta perché il lato remoto deve sapere dove inviare le risposte, e un indirizzo LAN privato non significa nulla per lui. La rotta di ritorno è il terzo pezzo, ed è quello che si dimentica quando il primo ping sembra riuscire.
Diagnostica in quest'ordine invece di attivare e disattivare impostazioni a caso. Ogni pezzo mancante produce un sintomo leggermente diverso.
Attiva inoltro e traduzione degli indirizzi sull'host
Due modifiche sull'host collegato coprono i primi due pezzi: attivare l'inoltro IPv4 e tradurre il traffico LAN sull'interfaccia del tunnel.
sysctl -w net.ipv4.ip_forward=1
iptables -t nat -A POSTROUTING -o tun0 -j MASQUERADERendi persistente il valore sysctl in un file sotto /etc/sysctl.d e ricontrolla la regola di masquerade dopo un riavvio, dato che le interfacce dei firewall possono svuotare le catene personalizzate. Su Windows la funzione di condivisione esegue entrambi i passaggi, ma riassegna anche l'adattatore LAN a una sottorete fissa e cancella il suo gateway, il che rompe l'indirizzamento statico e il port forwarding. Ripristina il percorso del router verso l'host al suo nuovo indirizzo prima di concludere che la condivisione è fallita. Poi osserva i contatori della regola aumentare mentre un secondo dispositivo invia traffico.
Dai alla LAN un percorso che sopravviva ai riavvii
Gli altri dispositivi hanno bisogno di una rotta verso il prefisso remoto, e i due modi di fornirla differiscono per raggio d'azione.
ip route add 10.8.0.0/24 via 192.168.1.20 dev eth0Indirizzare il gateway predefinito di un client verso l'host manda tutto il suo traffico attraverso l'host, comprese stampa locale e condivisione di file, così le cose non correlate si fermano quando l'host va in sospensione. Aggiungere una rotta specifica sul router per il prefisso remoto è più mirato: solo le destinazioni dietro il tunnel vanno alla macchina collegata, e il resto della LAN continua a funzionare. Le sottoreti qui sopra sono esempi, quindi sostituiscile con i tuoi intervalli LAN e del tunnel. In entrambi i casi, prova da un secondo dispositivo con il tunnel attivo e poi spento.
Controlla l'MTU prima di dare la colpa al tunnel
I tunnel riducono la dimensione utile dei pacchetti, e il secondo dispositivo non ne ha idea. Trasferimenti grandi e handshake TLS si bloccano mentre le richieste piccole riescono.
ping -M do -s 1400 10.8.0.5Una risposta dimostra che quella dimensione attraversa il percorso senza frammentazione; un timeout significa che il sovraccarico di incapsulamento ha spinto il pacchetto oltre l'MTU del tunnel. Abbassa l'MTU sull'interfaccia di condivisione o limita la dimensione massima del segmento sul dispositivo che inoltra, poi ripeti la stessa prova. Prova prima la stessa dimensione dal lato LAN, perché un fallimento locale indica la LAN e non il tunnel. Annota la dimensione funzionante, dato che un successivo cambio di provider o di tunnel può spostarla.
Per un solo dispositivo in più, la condivisione dall'host basta. Per una famiglia, metti la rotta sul router. Quando l'accesso deve sopravvivere al fatto che il portatile parta con te, il tunnel stesso appartiene a un gateway dedicato.