QGIS skaito bet kurį kelią, kurį pasiekia jo duomenų tiekėjai, todėl veikiantis VPN – tik pusė sąrankos. Tunelis suteikia darbalaukiui maršrutą ir vardų sprendimo taisyklę; projektui vis dar reikia paslaugos prieigos taško, tiekėjo protokolo ir prisijungimo duomenų, kuriuos paslauga priims. Tai trys atskiri laukai, o VPN viešojo klausytojo įrašymas į duomenų bazės lauką nėra nė vienas jų. Šis vadovas seka vieną PostGIS sluoksnį nuo QGIS formos iki grąžintos eilutės ir įvardija ribą, kurią įrodo kiekvienas žingsnis.

Pradėkite nuo sluoksnio, o ne nuo VPN

Kiekvienas sluoksnio tipas pasiekia kitokį prieigos tašką. PostGIS sluoksnis atidaro PostgreSQL ryšį su hostu, prievadu, duomenų baze ir role. WMS arba WFS sluoksnis atsisiunčia paslaugos URL ir tada analizuoja galimybių dokumentą. Tinklo bendrinamoje vietoje esantis shapefile reikalauja tik failo kelio, kurį operacinė sistema gali atidaryti. Kadangi tai trys skirtingi mechanizmai, tuščias projektas nieko nepasako, kol nežinote, kurį derinate.

Paklauskite GIS operatoriaus prieigos taško, prievado, reikiamos tapatybės ir prieigos taisyklės, taikomos jūsų paskyrai. Laikykite paslaugos hosto vardą tiksliai tokį, koks buvo išduotas, kai diegimas priklauso nuo privataus DNS arba sertifikato vardo patikros. Kito naudotojo išsaugoto ryšio nukopijuoto hosto adreso naudojimas iš naujo yra greičiausias kelias į mašiną, kuri atsako, bet laiko senesnę duomenų bazę.

Maršrutai, leidžiami ištekliai ir vardų sprendimas priklauso tam, kas valdo VPN. Duomenų šaltinio forma negali įdiegti maršruto, kurio tunelio profilis niekada nesiuntė, ir negali išplėsti šliuzo taisyklės. Kai hostas išsprendžiamas ir prievadas atsako, tinklo pusė problemos baigta.

Įveskite privatų prieigos tašką, kurį išdavė operatorius

PostgreSQL forma QGIS atspindi laukus, kurių tikisi libpq, todėl užpildykite ją ta pačia tvarka, kaip tai darytų komandinės eilutės ryšys. Paslauga ir hostas ima duomenų bazės mašiną, prievadas ima klausytoją, kurį serveris iš tikrųjų atidaro, o duomenų bazė ima konkretų katalogą, o ne serverio numatytąją reikšmę. Saugokite slaptažodį autentifikavimo konfigūracijoje, o ne projekto faile, kad bendras projektas nenešiotų prisijungimo duomenų.

Atskirkite du vardus prieš ką nors įvesdami. Šliuzo vardas priklauso VPN klientui, o duomenų bazės vardas – QGIS, ir jie retai būna tas pats hostas.

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

Jei duomenų bazė yra kitoje mašinoje už šliuzo, formoje esantis vardas turi būti ta mašina. Būtent privatus DNS per tunelį leidžia vardui veikti, o projektas, kuris išsprendžiamas tik prisijungus, elgiasi teisingai, o ne blogai kašuoja.

Laikykite duomenų bazės TLS režimą atskirai nuo tunelio

SSL VPN produkto pavadinime apibūdina tunelį, o ne duomenų bazės sesiją. QGIS perduoda PostgreSQL SSL režimą libpq, ir šis režimas valdo, ar klientas tikrina serverio sertifikatą, ir ar tikrina jame esantį hosto vardą. verify-fulldaro abu, todėl tai režimas, kurį verta išlaikyti, kai sertifikatas neša paslaugos vardą.

Režimo sumažinimas iki disable dėl to, kad tunelis jau užšifruotas, pašalina patikrinimą, ar pasiektas serveris yra tas, kurio prašėte. Kai patikra nepavyksta, įprasta priežastis yra vardų neatitikimas arba trūkstamas šakninis sertifikatas, ir abu galima ištaisyti nesusilpninant ryšio. Nukreipkite sslrootcert į CA, kurią skelbia operatorius, ir laikykite formoje esantį hosto vardą identišką sertifikate esančiam vardui.

Tunelis su privačiu maršrutu ir duomenų bazė su galiojančiu sertifikatu vis tiek gali nepavykti pagal rolę. Programos prisijungimo duomenys atskirti nuo VPN duomenų, o paskyra, kuri autentifikuojasi šliuze, neturi jokių numanomų teisių PostgreSQL.

Tikrinkite kiekvieną ribą iš eilės ir skaitykite pirmąją klaidą

Dirbkite nuo kliento į išorę fiksuota tvarka: vardų sprendimas, TCP pasiekiamumas, TLS, autentifikavimas, tada pati užklausa. Pirmas nepavykęs žingsnis yra vienintelis, apie kurį verta pranešti, o šuolis į priekį duoda klaidų pranešimus iš ribos, kurios dar nepasiekėte. Keturios komandos apima pirmus keturis žingsnius.

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

Tuščias atsakymas iš getent yra vardų sprendimo problema, o ne duomenų bazės problema. Atmestas arba pasibaigęs nc reiškia, kad trūksta maršruto arba firewall taisyklės, ir tai taisoma šliuzo pusėje. TLS klaida iš psql reiškia, kad sertifikatas arba vardas neteisingi, o password authentication failed reiškia, kad pasiekėte PostgreSQL ir problema yra prisijungimo duomenyse. WMS sluoksniui curl iškvietimas grąžina galimybių XML, kurį QGIS analizuotų, todėl HTML prisijungimo puslapis toje išvestyje iš karto paaiškina tuščią sluoksnį.

PostgreSQL klaida yra gera žinia, palyginti su laiko limitu. Ji įrodo, kad paskirties vieta atsakė, o tai perkelia bilietą iš tinklo komandos duomenų bazės arba GIS administratoriui. Šio skirtumo išlaikymas ataskaitoje sutaupo vieną ratą.

Kai projektas atsidaro su tuščiais sluoksniais

QGIS viduje patikrinkite išsaugotą sluoksnio šaltinį prieš ką nors įvesdami iš naujo. Sluoksnio savybės rodo tikslią ryšio eilutę, kurią projektas išsaugojo, o dvigubas ryšio įrašas su senesniu hostu yra įprasta ankstesnio biuro tinklo liekana. Projekto perkrovimas pataisius ryšį ne visada iš naujo nuskaito tiekėją, todėl pašalinkite sluoksnį ir pridėkite jį iš naujo iš pataisyto ryšio.

Tada patvirtinkite, kad autentifikavimo konfigūracija yra ta, kuri prijungta prie sluoksnio, o ne tik esanti sąraše. Sluoksnis, išsaugotas su kita autentifikavimo konfigūracija, tyliai nepavyksta naršyklės skydelyje, o atskiras psql testas praeina.

Kai sluoksnis įkeliamas, išsaugokite projektą su santykiniais keliais tik failams ir laikykite paslaugų ryšius pavadintus pagal jų prieigos tašką. Kitas žmogus, kuris paveldi projektą, gali pasakyti, kurio hosto tikėjosi sulūžęs sluoksnis, neatidarydamas bilieto.

Susiję straipsniai