QGIS чете всеки път, който доставчиците му на данни могат да достигнат, така че работещ VPN е само половината от настройката. Тунелът дава на работния плот маршрут и политика за разрешаване на имена; проектът все още се нуждае от крайната точка на услугата, протокола на доставчика и идентификационните данни, които услугата ще приеме. Това са три отделни записа и въвеждането на публичния слушател на VPN в поле за база данни не е нито един от тях. Това ръководство проследява един слой PostGIS от формуляра на QGIS до върнат ред и назовава границата, която доказва всяка стъпка.

Започнете от слоя, а не от VPN

Всеки тип слой достига до различен вид крайна точка. Слоят PostGIS отваря връзка PostgreSQL с хост, порт, база данни и роля. Слоят WMS или WFS изтегля URL на услугата и след това анализира документ за възможности. Файл shapefile в мрежов дял се нуждае само от път до файл, който операционната система може да отвори. Тъй като това са три различни механизма, празният проект не ви казва нищо, докато не разберете кой от тях отстранявате.

Попитайте GIS оператора за крайната точка, порта, изискваната идентичност и политиката за достъп, която се прилага за вашия акаунт. Пазете името на хоста на услугата точно както е издадено, когато внедряването зависи от частен DNS или от проверки на името в сертификата. Повторното използване на адрес на хост, копиран от запазена връзка на друг потребител, е най-бързият начин да стигнете до машина, която отговаря, но държи по-стара база данни.

Маршрутите, разрешените ресурси и разрешаването на имена принадлежат на този, който управлява VPN. Формулярът за източник на данни не може да инсталира маршрут, който профилът на тунела никога не е изпращал, и не може да разшири политика на шлюз. Когато хостът се разреши и портът отговори, мрежовата страна на проблема е приключена.

Въведете частната крайна точка, която операторът е издал

Формулярът PostgreSQL в QGIS отразява полетата, които libpq очаква, затова го попълнете в същия ред, в който би го направила връзка от командния ред. Услуга и хост приемат машината на базата данни, порт приема слушателя, който сървърът действително отваря, а база данни приема конкретния каталог, а не сървърното подразбиране. Съхранявайте паролата в конфигурация за удостоверяване, а не във файла на проекта, така че споделен проект да не носи идентификационни данни.

Разделете двете имена, преди да напишете нещо. Името на шлюза принадлежи на VPN клиента, а името на базата данни — на QGIS, и те рядко са един и същ хост.

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

Ако базата данни е на друга машина зад шлюза, името във формуляра трябва да е тази машина. Частният DNS през тунела е това, което кара името да работи, и проект, който се разрешава само докато сте свързани, се държи правилно, а не кешира лошо.

Пазете TLS режима на базата данни отделно от тунела

SSL в името на VPN продукт описва тунела, а не сесията на базата данни. QGIS предава SSL режима на PostgreSQL към libpq и този режим управлява дали клиентът проверява сертификата на сървъра и дали проверява името на хоста в него. verify-fullправи и двете, затова това е режимът, който си струва да се запази, когато сертификатът носи името на услугата.

Намаляването на режима до disable защото тунелът вече е криптиран, премахва проверката, че сървърът, до който сте стигнали, е сървърът, който сте поискали. Когато проверката се провали, обичайната причина е несъответствие на името или липсващ коренов сертификат и двете се поправят, без да се отслабва връзката. Насочете sslrootcert към CA, който операторът публикува, и дръжте името на хоста във формуляра идентично с името в сертификата.

Тунел с частен маршрут и база данни с валиден сертификат все още могат да се провалят на ролята. Идентификационните данни на приложението са отделни от тези на VPN и акаунт, който се удостоверява пред шлюза, няма подразбиращи се права в PostgreSQL.

Проверявайте всяка граница по ред и четете първия отказ

Работете от клиента навън в фиксиран ред: разрешаване на имена, TCP достъпност, TLS, удостоверяване, след това самата заявка. Първата стъпка, която се провали, е единствената, за която си струва да се съобщи, а прескачането напред дава съобщения за грешка от граница, до която още не сте стигнали. Четири команди покриват първите четири стъпки.

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

Празен отговор от getent е проблем с разрешаването, а не проблем с базата данни. Отказан или изтекъл nc означава, че липсва маршрут или правило на firewall, което се поправя от страната на шлюза. TLS грешка от psql означава, че сертификатът или името са грешни, докато password authentication failed означава, че сте стигнали до PostgreSQL и проблемът е в идентификационните данни. За слой WMS извикването curl връща XML с възможности, който QGIS би анализирал, така че HTML страница за вход в този изход веднага обяснява празен слой.

Грешка в PostgreSQL е добра новина в сравнение с изчакване. Тя доказва, че дестинацията е отговорила, което премества тикета от мрежовия екип към администратора на базата данни или GIS. Запазването на това разграничение в доклада спестява едно пътуване.

Когато проектът се отвори с празни слоеве

В QGIS проверете запазения източник на слоя, преди да въвеждате нещо отново. Свойствата на слоя показват точния низ за връзка, който проектът е запазил, а дублиран запис за връзка с по-стар хост е обичайна останка от предишна офис мрежа. Презареждането на проекта след поправка на връзка не винаги прочита доставчика отново, затова премахнете слоя и го добавете отново от поправената връзка.

След това потвърдете, че конфигурацията за удостоверяване е тази, прикачена към слоя, а не просто присъства в списъка. Слой, запазен с друга конфигурация за удостоверяване, се проваля тихо в панела на браузъра, докато самостоятелният psql тест минава.

Когато слоят се зареди, запазете проекта с относителни пътища само за файлове и дръжте връзките към услуги именувани по тяхната крайна точка. Следващият човек, който наследи проекта, тогава може да каже кой хост е очаквал счупен слой, без да отваря тикет.

Подобни статии