QGIS leest elk pad dat zijn dataproviders kunnen bereiken, dus een actieve VPN is maar de helft van de opzet. De tunnel geeft de desktop een route en een naamresolutiebeleid; het project heeft nog steeds het service-eindpunt, het protocol van de provider en de inloggegevens nodig die de service accepteert. Dat zijn drie losse velden, en de publieke listener van de VPN in een databaseveld typen is er geen van. Deze uitleg volgt één PostGIS-laag van het QGIS-formulier tot een teruggegeven rij en benoemt de grens die elke stap bewijst.

Begin bij de laag, niet bij de VPN

Elk laagtype bereikt een ander soort eindpunt. Een PostGIS-laag opent een PostgreSQL-verbinding met host, poort, database en rol. Een WMS- of WFS-laag haalt een service-URL op en parseert daarna een capaciteiten-document. Een shapefile op een netwerkshare heeft alleen een bestandspad nodig dat het besturingssysteem kan openen. Omdat dit drie verschillende mechanismen zijn, zegt een leeg project niets tot je weet welke je aan het debuggen bent.

Vraag de GIS-beheerder om het eindpunt, de poort, de vereiste identiteit en het toegangsbeleid dat voor jouw account geldt. Houd de hostnaam van de service precies zoals uitgegeven wanneer de uitrol afhangt van private DNS of van naamcontroles in het certificaat. Een hostadres hergebruiken dat uit de opgeslagen verbinding van een andere gebruiker is gekopieerd is de snelste weg naar een machine die antwoordt maar een oudere database heeft.

Routes, toegestane bronnen en naamresolutie zijn van degene die de VPN beheert. Een databronformulier kan geen route installeren die het tunnelprofiel nooit heeft gepusht, en het kan een gatewaybeleid niet verruimen. Wanneer de host resolveert en de poort antwoordt, is de netwerkkant van het probleem klaar.

Voer het private eindpunt in dat de beheerder heeft uitgegeven

Het PostgreSQL-formulier in QGIS spiegelt de velden die libpq verwacht, dus vul het in dezelfde volgorde in als een opdrachtregelverbinding zou doen. Service en host nemen de databasemachine, poort neemt de listener die de server werkelijk opent, en database neemt de specifieke catalogus in plaats van de standaard van de server. Bewaar het wachtwoord in een authenticatieconfiguratie en niet in het projectbestand, zodat een gedeeld project geen inloggegevens meedraagt.

Scheid de twee namen voordat je iets typt. De gateway-naam hoort in de VPN-client en de databasenaam in QGIS, en het zijn zelden dezelfde 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

Staat de database op een andere machine achter de gateway, dan moet de naam in het formulier die machine zijn. Private DNS door de tunnel is wat de naam laat werken, en een project dat alleen resolveert terwijl je verbonden bent, gedraagt zich correct in plaats van slecht te cachen.

Houd de TLS-modus van de database gescheiden van de tunnel

De SSL in een VPN-productnaam beschrijft de tunnel, niet de databasesessie. QGIS geeft de PostgreSQL SSL-modus door aan libpq, en die modus bepaalt of de client het servercertificaat verifieert en of hij de hostnaam daarin controleert. verify-fulldoet beide, daarom is het de modus die het waard is te behouden wanneer het certificaat de servicenaam draagt.

De modus verlagen naar disable omdat de tunnel al versleuteld is, haalt de controle weg dat de server die je bereikte de server is die je vroeg. Als de verificatie faalt, is de gebruikelijke oorzaak een naamafwijking of een ontbrekend rootcertificaat, en beide zijn te verhelpen zonder de verbinding te verzwakken. Richt sslrootcert op de CA die de beheerder publiceert en houd de hostnaam in het formulier identiek aan de naam in het certificaat.

Een tunnel met een private route en een database met een geldig certificaat kunnen alsnog falen op de rol. Applicatie-inloggegevens staan los van VPN-inloggegevens, en een account dat zich bij de gateway authenticeert heeft geen impliciete rechten in PostgreSQL.

Test elke grens op volgorde en lees de eerste fout

Werk van de client naar buiten in een vaste volgorde: naamresolutie, TCP-bereikbaarheid, TLS, authenticatie en dan de query zelf. De eerste stap die faalt is de enige die het melden waard is, en vooruit springen levert foutmeldingen van een grens die je nog niet hebt bereikt. Vier opdrachten dekken de eerste vier stappen.

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

Een leeg antwoord van getent is een resolutieprobleem, geen databaseprobleem. Een geweigerde of verlopen nc betekent dat een route of een firewallregel ontbreekt, wat een correctie aan de gatewaykant is. Een TLS-fout van psql betekent dat het certificaat of de naam onjuist is, terwijl password authentication failed betekent dat je PostgreSQL hebt bereikt en de inloggegevens het probleem zijn. Voor een WMS-laag geeft de curl aanroep de capaciteiten-XML terug die QGIS zou parsen, dus een HTML-inlogpagina in die uitvoer verklaart meteen een lege laag.

Een PostgreSQL-fout is goed nieuws vergeleken met een time-out. Hij bewijst dat de bestemming antwoordde, wat het ticket van het netwerkteam naar de database- of GIS-beheerder verplaatst. Dat onderscheid in het rapport vasthouden bespaart een ronde.

Wanneer het project opent met lege lagen

Controleer in QGIS de opgeslagen bron van de laag voordat je iets opnieuw invoert. De laageigenschappen tonen de exacte verbindingsreeks die het project opsloeg, en een dubbele verbinding met een oudere host is een veelvoorkomende rest uit een eerder kantoornetwerk. Het project opnieuw laden na het repareren van een verbinding leest de provider niet altijd opnieuw, dus verwijder de laag en voeg hem opnieuw toe vanuit de gecorrigeerde verbinding.

Bevestig daarna dat de authenticatieconfiguratie degene is die aan de laag hangt, niet alleen degene die in de lijst staat. Een laag die met een andere authenticatieconfiguratie is opgeslagen faalt stil in het browserpaneel terwijl de losse psql test slaagt.

Wanneer de laag laadt, sla het project op met relatieve paden alleen voor bestanden en houd serviceverbindingen genoemd naar hun eindpunt. De volgende persoon die het project erft kan dan zien welke host een kapotte laag verwachtte zonder een ticket te openen.

Gerelateerde artikelen