Il tuo Mac scarica uno script di politica e poi chiede a quello script quale intermediario debba usare una richiesta, mentre il tunnel decide solo come si raggiunge il salto scelto. Entrambe le risposte finiscono sullo stesso socket, quindi una richiesta che fallisce dopo che entrambe sono riuscite sembra un guasto solo quando sono due. Separare il download dalla selezione, e la selezione dalla rotta, è la maggior parte del lavoro in questi ticket. L'ordine sotto segue ciò che macOS fa davvero, con i controlli che rendono visibile ogni fase.

Dove l'indirizzo PAC e il proxy divergono

Un indirizzo come https://config.corp.example/proxy.pac nomina un documento da scaricare, e quel documento nomina un server attraverso cui inviare il traffico. Incollare l'URL in un campo host del proxy chiede al client di aprire una connessione proxy verso un file server che non ascolta mai una connessione del genere. Dentro il file c'è una funzione che il client chiama a ogni richiesta, e il suo valore di ritorno è il salto successivo per quella singola destinazione. Questa indirezione spiega perché due macchine sullo stesso servizio di rete possono comportarsi diversamente pur avendo entrambe l'URL corretto. Spiega anche perché un cambio di politica entra in vigore senza che nessuno tocchi il proxy stesso.

Leggete lo script prima di interpretare qualcosa a valle, perché le regole al suo interno portano le eccezioni dell'organizzazione e l'ordine in cui si applicano. Un intervallo ampio iniziale può oscurare un suffisso interno successivo, e un host che dovrebbe ovviamente aggirare il proxy continua a usarlo. Quando qualcuno insiste che la politica è sbagliata, lo script è l'unico posto in cui quell'affermazione viene risolta.

Lo script deve essere recuperato prima di decidere qualsiasi cosa

Scaricare la politica richiede un nome risolto e una rotta verso ciò che serve il file, e un tunnel connesso non implica nessuna delle due. Se l'host si risolve solo tramite DNS privato, il resolver in uso in quel momento decide se il download può iniziare. Se l'host si trova su un intervallo privato, la rotta deve esistere da questa macchina e non dal portatile di un collega. Una copia in cache di una sessione precedente nasconde tutto questo finché la cache scade o la macchina si riavvia.

Eseguite i tre controlli qui sotto in ordine e fermatevi al primo fallimento, perché le fasi non condividono la causa. Insieme mostrano se la politica è configurata, se è raggiungibile e cosa restituisce.

scutil --proxy
networksetup -getautoproxyurl "Wi-Fi"
curl -sS -o /dev/null -w "%{http_code}\n" https://config.corp.example/proxy.pac

Il primo comando stampa il dizionario proxy del servizio attivo, inclusa qualsiasi URL di configurazione automatica che il sistema detiene. Il secondo riporta l'URL associato a un servizio con nome, cosa che conta su un portatile che passa tra Wi-Fi ed Ethernet. Il terzo recupera il file senza renderizzarlo, così un 404, un timeout e un errore del resolver restano distinguibili. Se quest'ultimo comando restituisce lo script mentre le applicazioni falliscono ancora, il problema ha già superato il recupero.

Cosa salta davvero una risposta DIRECT

La specifica PAC dà al client un piccolo vocabolario, e DIRECT è una delle sue parole. La parola dice al client di saltare il proxy per quella richiesta e non dice nulla su quale interfaccia userà poi il socket. Un socket diretto su un tunnel completo esce comunque dalla VPN e mostra comunque alla destinazione l'indirizzo di uscita del tunnel.

Leggere DIRECT come fuori dalla VPN è l'errore che manda le persone al pannello delle impostazioni sbagliato. L'immagine speculare è altrettanto comune, perché si può raggiungere un proxy privato tramite una rotta divisa mentre il resto della macchina resta fuori dal tunnel. Quello che la destinazione riporta allora appartiene all'uscita del proxy stesso, che può trovarsi in un altro paese. Scrivere l'aspettativa per un host interno e un host pubblico lo espone subito, perché spesso lo script risponde diversamente ai due. Una volta che sapete quale salto ha prodotto l'indirizzo, il rapporto smette di essere misterioso.

Tre guasti che si presentano come un'unica pagina di errore

La politica può non riuscire a scaricarsi, il proxy scelto può essere irraggiungibile, e una richiesta che arriva al servizio può comunque essere rifiutata lì. Tutti e tre arrivano come timeout o pagina di errore generica, e nessuno nomina la fase che si è rotta. Catturare la decisione accanto all'errore è ciò che li separa. Le due sonde qui sotto testano il salto scelto dallo script, una per ogni ramo che può restituire.

curl -v --max-time 8 http://proxy.corp.example:8080/
curl -v --max-time 8 https://intranet.corp.example/

Una connessione completata al proxy sposta la domanda sull'autenticazione o sulla politica del proxy stesso, che ha un altro proprietario. Una connessione completata all'host interno senza proxy nel percorso esclude la rotta e punta alla politica. Entrambi i comandi ignorano il dizionario proxy di macOS a meno che la shell esporti variabili proxy, quindi cancellatele prima. Nessuna delle due sonde dimostra l'altra, ed è per questo che una pagina di errore inganna così a lungo.

Cosa consegnare con il ticket

Inviate il servizio di rete attivo, l'URL del PAC, il risultato della valutazione per l'host che fallisce e la fase in cui è apparso l'errore. Quei quattro permettono alla persona successiva di riprodurre la decisione invece di indovinare quale livello fosse coinvolto. Aggiungete lo stato del tunnel al momento del test, perché un risultato catturato prima di una riconnessione è obsoleto. Conservate anche la revisione dello script, dato che il file di politica cambia senza preavviso e la risposta di ieri potrebbe non essere più attuale.

Registrate come si comporta il client quando lo script non può essere recuperato, perché le implementazioni differiscono e la decisione sul proxy non è un interruttore generale del dispositivo. Alcuni tornano a una connessione diretta e altri falliscono chiusi, e questa differenza cambia se un'interruzione sembra un proxy rotto o una politica funzionante. Confermate il comportamento per il client e la versione esatti prima di affidarvi ad esso durante un incidente.

Articoli correlati