Połączenie QGIS z PostGIS za VPN: krok po kroku
Skieruj QGIS na PostGIS lub WMS za VPN: oddziel tunel od punktu końcowego usługi, zachowaj TLS verify-full i testuj każdą granicę po kolei.
QGIS czyta każdą ścieżkę, do której docierają jego dostawcy danych, więc działający VPN to tylko połowa konfiguracji. Tunel daje pulpitowi trasę i politykę rozwiązywania nazw; projekt nadal potrzebuje punktu końcowego usługi, protokołu dostawcy i poświadczeń, które usługa przyjmie. To trzy osobne pola, a wpisanie publicznego listenera VPN w pole bazy danych nie jest żadnym z nich. Ten przewodnik śledzi jedną warstwę PostGIS od formularza QGIS do zwróconego wiersza i nazywa granicę, którą dowodzi każdy krok.
Zacznij od warstwy, nie od VPN
Każdy typ warstwy osiąga inny rodzaj punktu końcowego. Warstwa PostGIS otwiera połączenie PostgreSQL z hostem, portem, bazą danych i rolą. Warstwa WMS lub WFS pobiera URL usługi, a następnie analizuje dokument możliwości. Plik shapefile w udziale sieciowym wymaga tylko ścieżki pliku, którą system operacyjny może otworzyć. Ponieważ to trzy różne mechanizmy, pusty projekt nic nie mówi, dopóki nie wiesz, który z nich debugujesz.
Zapytaj operatora GIS o punkt końcowy, port, wymaganą tożsamość i politykę dostępu obowiązującą dla Twojego konta. Zachowaj nazwę hosta usługi dokładnie taką, jaka została wydana, gdy wdrożenie zależy od prywatnego DNS lub od kontroli nazwy w certyfikacie. Ponowne użycie adresu hosta skopiowanego z zapisanego połączenia innego użytkownika to najszybsza droga do maszyny, która odpowiada, ale ma starszą bazę danych.
Trasy, dozwolone zasoby i rozwiązywanie nazw należą do tego, kto zarządza VPN. Formularz źródła danych nie może zainstalować trasy, której profil tunelu nigdy nie wysłał, ani rozszerzyć polityki bramy. Gdy host się rozwiązuje, a port odpowiada, strona sieciowa problemu jest zakończona.
Wpisz prywatny punkt końcowy wydany przez operatora
Formularz PostgreSQL w QGIS odzwierciedla pola oczekiwane przez libpq, więc wypełnij go w tej samej kolejności, w jakiej zrobiłoby to połączenie z wiersza poleceń. Usługa i host biorą maszynę bazy danych, port bierze listener, który serwer faktycznie otwiera, a baza danych bierze konkretny katalog zamiast wartości domyślnej serwera. Przechowuj hasło w konfiguracji uwierzytelniania, a nie w pliku projektu, aby udostępniony projekt nie niósł poświadczeń.
Oddziel obie nazwy, zanim cokolwiek wpiszesz. Nazwa bramy należy do klienta VPN, a nazwa bazy danych do QGIS, i rzadko są tym samym hostem.
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
Jeśli baza danych znajduje się na innej maszynie za bramą, nazwa w formularzu musi być tą maszyną. To prywatny DNS przez tunel sprawia, że nazwa działa, a projekt, który rozwiązuje się tylko podczas połączenia, zachowuje się poprawnie, a nie źle keszuje.
Trzymaj tryb TLS bazy danych oddzielnie od tunelu
SSL w nazwie produktu VPN opisuje tunel, nie sesję bazy danych. QGIS przekazuje tryb SSL PostgreSQL do libpq, a ten tryb steruje tym, czy klient weryfikuje certyfikat serwera i czy sprawdza zawartą w nim nazwę hosta. verify-fullrobi jedno i drugie, dlatego to tryb, który warto zachować, gdy certyfikat zawiera nazwę usługi.
Obniżenie trybu do disable ponieważ tunel jest już szyfrowany usuwa sprawdzenie, że serwer, do którego dotarłeś, jest serwerem, o który prosiłeś. Gdy weryfikacja zawodzi, zwykle przyczyną jest niezgodność nazw lub brak certyfikatu głównego, a oba można naprawić bez osłabiania połączenia. Skieruj sslrootcert na CA publikowany przez operatora i zachowaj nazwę hosta w formularzu identyczną z nazwą w certyfikacie.
Tunel z prywatną trasą i baza danych z ważnym certyfikatem nadal mogą zawieść na roli. Poświadczenia aplikacji są oddzielone od poświadczeń VPN, a konto uwierzytelniane na bramie nie ma żadnych domniemanych uprawnień w PostgreSQL.
Testuj każdą granicę po kolei i czytaj pierwszy błąd
Pracuj od klienta na zewnątrz w stałej kolejności: rozwiązywanie nazw, osiągalność TCP, TLS, uwierzytelnianie, a potem samo zapytanie. Pierwszy nieudany krok to jedyny, o którym warto raportować, a przeskakiwanie naprzód daje komunikaty błędów z granicy, do której jeszcze nie dotarłeś. Cztery polecenia obejmują pierwsze cztery kroki.
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
Pusta odpowiedź z getent to problem rozwiązywania nazw, nie problem bazy danych. Odrzucony lub wygasły nc oznacza, że brakuje trasy lub reguły firewalla, co jest poprawką po stronie bramy. Błąd TLS z psql oznacza, że certyfikat lub nazwa są błędne, natomiast password authentication failed oznacza, że dotarłeś do PostgreSQL i problemem są poświadczenia. Dla warstwy WMS wywołanie curl zwraca XML możliwości, który QGIS by przeanalizował, więc strona logowania HTML w tym wyjściu od razu wyjaśnia pustą warstwę.
Błąd PostgreSQL to dobra wiadomość w porównaniu z przekroczeniem czasu. Dowodzi, że cel odpowiedział, co przenosi zgłoszenie od zespołu sieci do administratora bazy danych lub GIS. Zachowanie tego rozróżnienia w raporcie oszczędza jedną rundę.
Gdy projekt otwiera się z pustymi warstwami
W QGIS sprawdź zapisane źródło warstwy, zanim cokolwiek wprowadzisz ponownie. Właściwości warstwy pokazują dokładny ciąg połączenia zapisany przez projekt, a zduplikowany wpis połączenia ze starszym hostem to częsta pozostałość po poprzedniej sieci biurowej. Ponowne wczytanie projektu po naprawie połączenia nie zawsze odczytuje dostawcę od nowa, więc usuń warstwę i dodaj ją ponownie z poprawionego połączenia.
Następnie potwierdź, że konfiguracja uwierzytelniania to ta dołączona do warstwy, a nie tylko obecna na liście. Warstwa zapisana z inną konfiguracją uwierzytelniania zawodzi cicho w panelu przeglądarki, podczas gdy osobny test psql przechodzi.
Gdy warstwa się wczyta, zapisz projekt ze ścieżkami względnymi tylko dla plików i trzymaj połączenia usług nazwane według ich punktu końcowego. Następna osoba, która odziedziczy projekt, może wtedy powiedzieć, jakiego hosta oczekiwała zepsuta warstwa, bez otwierania zgłoszenia.