Collegare QGIS a PostGIS dietro una VPN: passo per passo
Puntate QGIS su PostGIS o WMS dietro una VPN: separate il tunnel dall’endpoint del servizio, mantenete TLS verify-full e provate ogni confine in ordine.
QGIS legge qualunque percorso i suoi provider di dati riescano a raggiungere, quindi una VPN attiva è solo metà della configurazione. Il tunnel fornisce al desktop una rotta e una politica di risoluzione dei nomi; il progetto ha ancora bisogno dell’endpoint del servizio, del protocollo del provider e delle credenziali che il servizio accetterà. Sono tre voci separate, e digitare l’ascoltatore pubblico della VPN in un campo del database non è nessuna di esse. Questa guida segue un layer PostGIS dal modulo di QGIS a una riga restituita e nomina il confine che ogni passo dimostra.
Partite dal layer, non dalla VPN
Ogni tipo di layer raggiunge un tipo diverso di endpoint. Un layer PostGIS apre una connessione PostgreSQL con host, porta, database e ruolo. Un layer WMS o WFS scarica un URL di servizio e poi analizza un documento delle capacità. Uno shapefile su una condivisione di rete richiede solo un percorso di file che il sistema operativo possa aprire. Poiché sono tre meccanismi diversi, un progetto vuoto non vi dice nulla finché non sapete quale state eseguendo il debug.
Chiedete all’operatore GIS l’endpoint, la porta, l’identità richiesta e la politica di accesso valida per il vostro account. Mantenete il nome host del servizio esattamente come è stato emesso quando la distribuzione dipende da DNS privato o da controlli sul nome nel certificato. Riusare un indirizzo host copiato dalla connessione salvata di un altro utente è il modo più rapido per raggiungere una macchina che risponde ma conserva un database più vecchio.
Rotte, risorse consentite e risoluzione dei nomi appartengono a chi gestisce la VPN. Un modulo di origine dati non può installare una rotta che il profilo del tunnel non ha mai inviato, né può ampliare una politica del gateway. Quando l’host si risolve e la porta risponde, il lato di rete del problema è finito.
Inserite l’endpoint privato emesso dall’operatore
Il modulo PostgreSQL di QGIS rispecchia i campi attesi da libpq, quindi compilatelo nello stesso ordine di una connessione da riga di comando. Servizio e host prendono la macchina del database, la porta prende l’ascoltatore che il server apre davvero, e il database prende il catalogo specifico invece del valore predefinito del server. Conservate la password in una configurazione di autenticazione e non nel file di progetto, così un progetto condiviso non trasporta una credenziale.
Separate i due nomi prima di digitare qualcosa. Il nome del gateway appartiene al client VPN e il nome del database appartiene a QGIS, e raramente sono lo stesso host.
VPN gateway: vpn.gis.lab.example (profile only, not a data source)
Database host: db.gis.lab.example:5432 (PostGIS service)
Database name: gis_prod
TLS mode: verify-full
Se il database si trova su un’altra macchina dietro il gateway, il nome nel modulo deve essere quella macchina. È il DNS privato attraverso il tunnel che fa funzionare il nome, e un progetto che si risolve solo mentre siete connessi si comporta correttamente, non che mette in cache male.
Tenete la modalità TLS del database separata dal tunnel
L’SSL nel nome di un prodotto VPN descrive il tunnel, non la sessione del database. QGIS passa la modalità SSL di PostgreSQL a libpq, e quella modalità controlla se il client verifica il certificato del server e se ne controlla il nome host. verify-fullfa entrambe le cose, per questo è la modalità da mantenere quando il certificato porta il nome del servizio.
Abbassare la modalità a disable perché il tunnel è già cifrato rimuove il controllo che il server raggiunto sia quello richiesto. Quando la verifica fallisce, la causa abituale è una discrepanza di nome o un certificato radice mancante, ed entrambe si correggono senza indebolire la connessione. Puntate sslrootcert alla CA pubblicata dall’operatore e mantenete il nome host nel modulo identico al nome nel certificato.
Un tunnel con una rotta privata e un database con un certificato valido possono comunque fallire sul ruolo. Le credenziali dell’applicazione sono separate da quelle della VPN, e un account che si autentica al gateway non ha diritti impliciti in PostgreSQL.
Provate ogni confine in ordine e leggete il primo errore
Lavorate dal client verso l’esterno in un ordine fisso: risoluzione dei nomi, raggiungibilità TCP, TLS, autenticazione e poi la query stessa. Il primo passo che fallisce è l’unico che vale la pena segnalare, e saltare avanti produce messaggi di errore da un confine che non avete ancora raggiunto. Quattro comandi coprono i primi quattro passi.
getent hosts db.gis.lab.example
nc -vz db.gis.lab.example 5432
psql "host=db.gis.lab.example port=5432 dbname=gis_prod sslmode=verify-full" -c 'select 1'
curl -sS 'https://wms.gis.lab.example/ows?service=WMS&request=GetCapabilities' | head -c 200
Una risposta vuota da getent è un problema di risoluzione, non un problema di database. Un nc rifiutato o scaduto significa che manca una rotta o una regola del firewall, che è una correzione lato gateway. Un errore TLS da psql significa che il certificato o il nome sono sbagliati, mentre password authentication failed significa che avete raggiunto PostgreSQL e il problema è la credenziale. Per un layer WMS, la chiamata curl restituisce il XML delle capacità che QGIS analizzerebbe, quindi una pagina di accesso HTML in quell’output spiega subito un layer vuoto.
Un errore PostgreSQL è una buona notizia rispetto a un timeout. Dimostra che la destinazione ha risposto, il che sposta il ticket dal team di rete all’amministratore del database o GIS. Mantenere questa distinzione nel resoconto risparmia un giro.
Quando il progetto si apre con layer vuoti
Dentro QGIS, controllate l’origine salvata del layer prima di reinserire qualcosa. Le proprietà del layer mostrano la stringa di connessione esatta che il progetto ha salvato, e una voce di connessione duplicata con un host più vecchio è un residuo comune di una precedente rete d’ufficio. Ricaricare il progetto dopo aver corretto una connessione non sempre rilegge il provider, quindi rimuovete il layer e aggiungetelo di nuovo dalla connessione corretta.
Poi confermate che la configurazione di autenticazione sia quella collegata al layer, non solo presente nell’elenco. Un layer salvato con un’altra configurazione di autenticazione fallisce in silenzio nel pannello del browser mentre il test psql autonomo riesce.
Quando il layer si carica, salvate il progetto con percorsi relativi solo per i file e mantenete le connessioni di servizio nominate secondo il loro endpoint. La prossima persona che eredita il progetto può così dire quale host si aspettava un layer rotto senza aprire un ticket.