La tua app per la stampante mostra un elenco vuoto, l’app fotocamera segnala che non è stato trovato alcun dispositivo e il pulsante di trasmissione in un’app video gira finché non si arrende. L’icona VPN è nella barra di stato, il telefono ha pieno segnale e Safari carica le pagine senza problemi, quindi nulla della connessione sembra rotto. Poi apri le impostazioni dell’app stessa e non trovi niente da attivare.

Ho sbattuto esattamente contro questo muro con una stampante per etichette su una rete domestica: all’app non era mai stato concesso l’accesso alla rete locale, e il profilo che stavo testando era un tunnel completo che inghiottiva ogni pacchetto indirizzato a 192.168.1.0/24. Due cancelli indipendenti erano chiusi, e aprirne uno non avrebbe eliminato il sintomo.

Due cancelli tra un’app e una stampante

Il primo cancello è una decisione sulla privacy che appartiene al sistema operativo e non all’app. iOS decide se un’app può inviare traffico verso indirizzi della rete locale, e chiede all’utente la prima volta che l’app ci prova. Il secondo cancello è la tabella di routing. Un pacchetto diretto a 192.168.1.50 esce dal telefono via Wi-Fi verso la stampante, oppure entra nel tunnel, e questa scelta è scritta nel profilo VPN.

I due cancelli falliscono in modi diversi, ed è questo che rende possibile la diagnosi. Un permesso negato fa fallire la chiamata socket dell’app stessa, così l’app non ha nulla da segnalare e ricade su uno stato vuoto generico. Un problema di routing sembra un timeout, perché i pacchetti hanno lasciato il telefono e sono morti da qualche parte dall’altra parte. Stessa schermata vuota, riparazione diversa.

Leggi lo stato del permesso prima di toccare la VPN

Apri Impostazioni, poi Privacy e sicurezza, poi Rete locale. Ogni app che ha richiesto l’accesso compare lì con un interruttore. Apple ha spostato e rinominato parti di questa schermata tra iOS 14 e iOS 18, quindi se la voce non è dove te la aspetti, digita Rete locale nel campo di ricerca delle Impostazioni invece di frugare nell’albero.

La parte che coglie le persone è la richiesta una tantum. iOS chiede quando un’app tocca la rete locale per la prima volta, e solo allora. Tocca Non consentire e la richiesta non torna al lancio successivo; l’interruttore è l’unica via di ritorno, e parte disattivato. Reinstallare l’app azzera la decisione, ed è per questo che alcuni thread di troubleshooting sostengono che una reinstallazione abbia risolto il rilevamento. L’ha fatto, cancellando il rifiuto.

Su un iPhone supervisionato o gestito l’interruttore a volte è in grigio. Un payload delle preferenze sulla privacy inviato da MDM può preimpostare o bloccare l’accesso alla rete locale, e un interruttore bloccato che è spento significa che la riparazione è un cambio di policy e non un cambio di telefono. Apple documenta la richiesta e l’interruttore per app qui: support.apple.com/en-us/102229.

Controlla cosa instrada davvero il tunnel

Un tunnel completo prende 0.0.0.0/0 e, con esso, ogni intervallo privato. I pacchetti per 10.x, 172.16.0.0/12 e 192.168.x.x viaggiano verso il server, che di solito li scarta o li traduce nella propria sottorete, così la stampante resta irraggiungibile anche dopo aver concesso il permesso. Un tunnel diviso fa l’opposto, ma solo per gli intervalli elencati nel profilo.

I profili IKEv2 creati con Apple Configurator o distribuiti come .mobileconfig esprimono tutto questo come un’impostazione di invio di tutto il traffico più, in modalità divisa, un elenco esplicito di reti locali da escludere. Le app client basate su NEPacketTunnelProvider esprimono la stessa decisione tramite includedRoutes. Nessuna delle due è visibile dalla barra di stato, e entrambe sovrascrivono ciò che l’app si aspetta di vedere.

Questo è il test che uso. Con la VPN connessa, apri la pagina di amministrazione del router tramite il suo indirizzo LAN in Safari. Se i siti pubblici si caricano mentre quella pagina va in timeout, il tuo intervallo privato è dentro il tunnel. Se la pagina si carica, il traffico locale esce ancora via Wi-Fi e il blocco è altrove.

Mappa il sintomo sul cancello

Due app sullo stesso telefono possono essere in disaccordo, perché il permesso è concesso per app mentre le rotte sono concesse per profilo. Confronta cosa fallisce prima di cambiare qualcosa: di solito lo schema nomina il cancello da solo.

What you seeGateNext step
Device list stays empty, Local Network switch is offPermissionEnable the switch, force-quit the app, reopen it
Switch is on, router page times out, public sites loadRoutingExclude the local range in the profile, or move to a split tunnel
Both pass, direct IP works, discovery stays emptyLink-local multicastEnter the device address by hand, or check profile discovery support
Works by IP address, never by name such as printer.localName resolutionFix mDNS reachability or use the numeric address
Everything fails with the VPN off, on hotel Wi-FiClient isolationChange network, do not change permissions

La riga mDNS merita una nota. Il traffico di rilevamento per Bonjour e per la maggior parte dei protocolli di trasmissione è multicast verso 224.0.0.251 e ff02::fb con ambito link-local, e un tunnel instradato non lo trasporta. Per questo un dispositivo può rispondere a una connessione diretta senza mai comparire in un elenco.

Prova l’operazione, non l’icona

Dopo aver spostato l’interruttore Rete locale, forza la chiusura dell’app dal selettore e riaprila. Un processo in esecuzione può conservare lo stato negato precedente alla modifica, e un’app che continua a restituire un elenco vuoto è identica sia che il permesso abbia funzionato sia che no. Poi esegui un’azione concreta, come stampare una pagina di prova o avviare un video, invece di aspettare che si popoli un elenco di dispositivi.

Tieni fisso il profilo VPN durante il confronto. Se il rilevamento inizia a funzionare solo dopo la disconnessione, hai imparato che il colpevole è il tunnel, non il permesso. Cambia una sola variabile per tentativo, altrimenti la prova successiva non ti dice nulla.

Risolvi in questo ordine

La sequenza qui sotto è quella che seguo ora, perché non lascia mai un telefono in uno stato a metà, dove il test successivo è illeggibile.

  1. Verifica che l’app sia elencata in Privacy e sicurezza, Rete locale, e che il suo interruttore sia attivo.
  2. Forza la chiusura, riapri l’app e ritenta una volta l’operazione reale.
  3. Apri la pagina del router tramite l’indirizzo LAN mentre sei connesso, per dimostrare se l’intervallo privato passa nel tunnel.
  4. Se ci passa, modifica il profilo per escludere le reti locali, o chiedi a chi possiede il profilo di farlo.
  5. Se l’interruttore è in grigio, tratta il dispositivo come gestito e inoltra la richiesta all’amministratore.

Di solito se ne applica solo una. Se nessuna cambia il risultato, i sospetti rimasti sono la rete stessa, come l’isolamento degli access point o una allowlist di client legata agli indirizzi Wi-Fi, e la tabella di corrispondenza qui sopra indica quale.

Articoli correlati