Escludere un nome host è qualcosa che un tunnel non può fare. Una rotta, però, può indirizzare un solo indirizzo oltre il tunnel e fuori attraverso il gateway di casa, e di solito basta per un sito. Il problema è che tutto ciò che sta a valle della rotta deve essere d'accordo: il firewall deve lasciar uscire il pacchetto, il DNS deve restituire l'indirizzo che hai instradato e il sito deve continuare a usare quell'indirizzo. Quando uno dei tre deriva, l'eccezione smette di funzionare senza annunciarsi.

Leggi l'indirizzo di destinazione prima di toccare il tunnel

Carica il sito una volta con il tunnel attivo, poi guarda l'indirizzo del peer a cui il browser si è realmente connesso. Su Linux, ss -tunp elenca l'indirizzo remoto di ogni socket aperto, e dig +short sullo stesso nome mostra cosa ha restituito il resolver. Tieni entrambi i numeri davanti a te.

Le due risposte spesso non coincidono, e quella discrepanza è tutto il problema. I siti grandi mettono una rete di contenuti davanti alla propria origine, quindi l'indirizzo che il tuo resolver restituisce ora potrebbe non essere quello che il browser ha usato un minuto fa. Instrada ciò che hai osservato sul socket, non ciò che elenca una guida più vecchia. Se le risposte continuano a ruotare tra le regioni, un'eccezione di indirizzo è lo strumento sbagliato per quel sito specifico.

Esegui la ricerca una seconda volta da un'altra rete e annota la risposta IPv6 insieme a quella IPv4. Un tunnel che trasporta entrambe le famiglie ha bisogno di un'eccezione in entrambe, altrimenti il browser ripiega silenziosamente sul percorso IPv6 che non hai mai toccato. Scrivi gli indirizzi e la data da qualche parte dove tornerai a guardare.

Metti una rotta host sul client

Supponiamo che l'interfaccia si chiami home-wg e che il router LAN sia su 192.168.1.1. NetworkManager prende una rotta il cui gateway è quel router e la cui lunghezza di prefisso copre tutti i 32 bit, e il kernel la preferisce perché vince il prefisso più lungo.

nmcli connection modify home-wg +ipv4.routes "198.51.100.20/32 192.168.1.1"
nmcli connection up home-wg
ip route get 198.51.100.20

Il gateway deve essere raggiungibile senza il tunnel; puntare il salto successivo all'indirizzo del tunnel vanifica lo scopo, perché il pacchetto rientrerebbe nell'interfaccia che stai cercando di evitare. Dopo che la connessione è tornata su, ip route get per l'eccezione dovrebbe stampare il gateway LAN, e lo stesso comando per un resolver pubblico dovrebbe ancora stampare il dispositivo del tunnel.

Un profilo wg-quick non ha un campo rotte, quindi la stessa eccezione vive in una riga PostUp che aggiunge la rotta host alla tabella principale con l'interfaccia LAN come suo dispositivo. Abbassa e rialza l'interfaccia dopo la modifica, perché un'interfaccia in esecuzione non rilegge mai il suo file. Le regole fwmark che wg-quick installa guidano solo i propri pacchetti incapsulati, quindi il traffico normale del browser segue ancora la tabella principale e trova il tuo /32.

Il kill switch è la cosa successiva che lo blocca

Una politica del firewall che ammette traffico solo sull'interfaccia del tunnel scarterà l'eccezione anche quando la rotta è perfettamente corretta. Leggi le regole dietro l'interruttore invece di fidarti dell'interruttore, perché quelle che implementano un kill switch sono di solito limitate a un nome di interfaccia.

Quello che vuoi è un permesso ristretto per l'interfaccia fisica e quella singola destinazione, collocato prima dello scarto, mentre la politica predefinita resta intatta. Mettere in pausa del tutto il kill switch dimostra il punto, ma lascia anche la macchina esposta finché ti dimentichi di riaccenderlo.

Prova le due direzioni separatamente. Una richiesta all'indirizzo dell'eccezione dovrebbe riuscire mentre una richiesta a un sito non correlato esce ancora dal tunnel. Se entrambe riescono ma la seconda riporta l'indirizzo di casa, è l'ordine delle regole del firewall a essere sbagliato, non la rotta.

Il DNS decide a quale indirizzo il browser si collega

Quando il nome viene risolto dentro il tunnel, il resolver del provider può rispondere con un indirizzo diverso da quello dato dal resolver locale. La tua rotta si applica allora a un indirizzo che il browser non contatta mai, e la pagina si carica attraverso il tunnel come se nulla fosse cambiato. Questo guasto sembra un'eccezione rotta anche quando la tabella di routing è corretta.

Invia le query di quel nome anche attraverso il resolver locale, oppure salta del tutto i nomi e prova l'indirizzo direttamente. Separare l'indirizzo lasciando il DNS dentro il tunnel è la versione a metà più comune di questa configurazione, ed è anche la più difficile da notare, perché il sito continua a funzionare, solo non come volevi.

La stessa eccezione sul router, una volta, per ogni dispositivo

Con il tunnel in esecuzione sul router, la rotta host appartiene alla tabella di routing per policy del router e punta al gateway WAN invece che a quello LAN. Ogni dispositivo dietro ne eredita l'eccezione, cosa che conta per un box di streaming o un portatile da lavoro di cui non puoi cambiare le impostazioni di rete.

Lascia il tunnel come uscita predefinita per tutti gli altri client, poi verifica da una macchina client invece che dalla console del router. Carica il sito dell'eccezione e un secondo sito nella stessa sessione del browser e confronta gli indirizzi di uscita; se il secondo mostra ancora il tunnel, la tabella delle policy sta facendo quello che hai chiesto.

Annota l'indirizzo, la data e il motivo nelle note del router. Un'eccezione costruita intorno a un indirizzo che in seguito si sposta diventa un guasto che nessuno saprà spiegare tra un anno, e la correzione sembra sempre un mistero finché qualcuno non trova la vecchia nota.

Articoli correlati