La stampante sulla scrivania continua a funzionare dopo che il tunnel sale, mentre un server nell’altro ufficio si risolve in silenzio verso qualcosa di locale. Entrambi i comportamenti derivano dalla stessa regola: vince la rotta più specifica, e un prefisso connesso direttamente è il più specifico possibile. Di solito è il progetto che vuoi, ed è anche così che un intervallo privato duplicato ruba un indirizzo remoto. Leggere prima la scelta del kernel trasforma un guasto misterioso in un confronto di prefissi.

Un prefisso connesso è più specifico di una rotta predefinita

Un tunnel di solito installa una rotta predefinita o un insieme di prefissi, mentre un’interfaccia locale porta un prefisso connesso più una rotta verso tutta la LAN. Tra le due decide la corrispondenza del prefisso più lungo, quindi una destinazione dentro il prefisso della LAN non raggiunge mai il tunnel. Per questo una stampante, la pagina di amministrazione di un router e un NAS locale restano raggiungibili mentre la VPN è attiva. Per questo anche una risorsa remota dentro un intervallo sovrapposto finisce sulla macchina sbagliata.

Lo spazio di indirizzamento privato non è unico, e che due sedi scelgano lo stesso prefisso è abbastanza comune da pianificarlo. Quando gli intervalli si sovrappongono, la risposta locale arriva in fretta e sembra autorevole, così il guasto si legge facilmente come un problema di accesso. La destinazione ha risposto, solo non quella che intendevi.

Leggi la scelta che farebbe il kernel

Chiedi al kernel quale rotta userebbe per la destinazione esatta invece di leggere la tabella dall’alto. Poi cerca le regole di policy che potrebbero selezionare un’altra tabella. Due comandi rispondono a entrambe le domande in pochi secondi.

ip route get 10.20.30.41
ip route show table all | grep -E '10\.|default'
ip rule show

Il primo output indica l’interfaccia, il salto successivo e l’indirizzo di origine che il kernel userebbe, ed è la risposta che conta. Un valore dev che punta al bridge locale significa che il pacchetto non entra mai nel tunnel, qualunque cosa affermi il pannello di stato del client VPN. L’elenco filtrato delle tabelle mostra se un’altra tabella contiene lo stesso prefisso, e l’elenco delle regole mostra l’ordine in cui quelle tabelle vengono consultate. Una regola di policy può inviare un prefisso attraverso una tabella specifica anche quando la tabella principale non è d’accordo, quindi quell’ordine fa parte della risposta.

L’accesso locale è un permesso a parte

Avere una rotta non è lo stesso che avere il permesso di usarla. La maggior parte dei client può bloccare la comunicazione di rete locale mentre il tunnel è attivo, e quell’impostazione è una decisione di policy, non un artefatto di routing. Quando un servizio vicino affidabile fa parte del progetto, abilita l’opzione di accesso locale supportata invece di inventare rotte. Quando il dispositivo è su un Wi-Fi pubblico, lasciala disattivata.

I due livelli falliscono in modo diverso. Un percorso locale bloccato produce un timeout anche se la rotta esiste, mentre una rotta sovrapposta produce una risposta dall’host sbagliato. Distinguerle costa una query e fa risparmiare un pomeriggio di modifiche al firewall, e la disposizione dell’inoltro è descritta in le note sul forwarding di strongSwan.

Correggi una sovrapposizione senza accumulare rotte host

Una rotta host per un indirizzo sembra correggere una sovrapposizione e fallisce nel momento in cui serve un secondo indirizzo nello stesso intervallo. Venti di queste dopo, nessuno può dire quale prefisso sia autorevole. Le soluzioni durature sono un cambio di indirizzamento, una topologia documentata che eviti l’intervallo duplicato o una traduzione a un estremo. Ognuna costa tempo di progettazione una volta invece di manutenzione per sempre.

Se una rotta host temporanea serve davvero, annota accanto il motivo, il responsabile e la data perché possa essere rimossa più avanti. Poi prova l’indirizzo e il servizio esatti più una destinazione pubblica, perché un cambio di accesso locale che esclude in silenzio applicazioni non correlate dal tunnel è peggio del guasto originale. Tieni il prefisso locale e il prefisso remoto scritti separatamente; quell’abitudine impedisce che un ping locale funzionante passi di mano come prova che l’ufficio remoto è raggiungibile.

Articoli correlati