QGIS, veri sağlayıcılarının ulaşabildiği her yolu okur; bu yüzden açık bir VPN kurulumun yalnızca yarısıdır. Tünel masaüstüne bir rota ve ad çözümleme ilkesi verir; projede hâlâ hizmetin uç noktası, sağlayıcının protokolü ve hizmetin kabul edeceği kimlik bilgileri gerekir. Bunlar üç ayrı alandır ve VPN'in genel dinleyicisini bir veritabanı alanına yazmak hiçbiri değildir. Bu yazı bir PostGIS katmanını QGIS formundan dönen satıra kadar izler ve her adımın kanıtladığı sınırı adlandırır.

VPN'den değil, katmandan başlayın

Her katman türü farklı türde bir uç noktaya ulaşır. PostGIS katmanı ana bilgisayar, bağlantı noktası, veritabanı ve rol ile bir PostgreSQL bağlantısı açar. WMS veya WFS katmanı bir hizmet URL'si alır ve ardından bir yetenekler belgesini çözümler. Ağ paylaşımındaki bir shapefile yalnızca işletim sisteminin açabildiği bir dosya yolu ister. Bunlar üç farklı mekanizma olduğundan boş bir proje, hangisini ayıkladığınızı bilene kadar size bir şey söylemez.

GIS operatörüne uç noktayı, bağlantı noktasını, gereken kimliği ve hesabınıza uygulanan erişim ilkesini sorun. Dağıtım özel DNS'e veya sertifikadaki ad denetimlerine bağlıysa hizmetin ana bilgisayar adını verildiği gibi tutun. Başka bir kullanıcının kayıtlı bağlantısından kopyalanan ana bilgisayar adresini yeniden kullanmak, yanıt veren ama daha eski bir veritabanı tutan makineye ulaşmanın en hızlı yoludur.

Yollar, izin verilen kaynaklar ve ad çözümleme VPN'i işletenin sorumluluğundadır. Bir veri kaynağı formu tünel profilinin hiç göndermediği bir rotayı kuramaz ve ağ geçidi ilkesini genişletemez. Ana bilgisayar çözümlenip bağlantı noktası yanıt verdiğinde sorunun ağ tarafı bitmiştir.

Operatörün verdiği özel uç noktayı girin

QGIS'teki PostgreSQL formu libpq'nun beklediği alanları yansıtır; bu yüzden komut satırı bağlantısının izlediği sırayla doldurun. Hizmet ve ana bilgisayar veritabanı makinesini alır, bağlantı noktası sunucunun gerçekten açtığı dinleyiciyi alır, veritabanı ise sunucu varsayılanı yerine belirli kataloğu alır. Parolayı proje dosyasında değil bir kimlik doğrulama yapılandırmasında saklayın, böylece paylaşılan proje kimlik bilgisi taşımaz.

Bir şey yazmadan önce iki adı ayırın. Ağ geçidi adı VPN istemcisinde, veritabanı adı QGIS'te yer alır ve bunlar nadiren aynı ana bilgisayardır.

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

Veritabanı ağ geçidinin arkasındaki başka bir makinedeyse formdaki ad o makine olmalıdır. Tünelden geçen özel DNS, adı çalıştıran şeydir ve yalnızca bağlıyken çözümlenen bir proje kötü önbellekleme değil, doğru davranış gösteriyor demektir.

Veritabanının TLS kipini tünelden ayrı tutun

Bir VPN ürün adındaki SSL tüneli tanımlar, veritabanı oturumunu değil. QGIS PostgreSQL SSL kipini libpq'ya aktarır ve bu kip, istemcinin sunucu sertifikasını doğrulayıp doğrulamadığını ve içindeki ana bilgisayar adını denetleyip denetlemediğini belirler. verify-fullikisini de yapar, bu yüzden sertifika hizmetin adını taşıdığında korumaya değer kip budur.

Tünel zaten şifreli diye kipi disable düzeyine indirmek, ulaştığınız sunucunun istediğiniz sunucu olduğu denetimini ortadan kaldırır. Doğrulama başarısız olduğunda olağan neden bir ad uyuşmazlığı ya da eksik kök sertifikadır ve ikisi de bağlantıyı zayıflatmadan düzeltilebilir. sslrootcert öğesini operatörün yayımladığı CA'ya yönlendirin ve formdaki ana bilgisayar adını sertifikadaki adla aynı tutun.

Özel rotalı bir tünel ve geçerli sertifikalı bir veritabanı yine de rolde başarısız olabilir. Uygulama kimlik bilgileri VPN'inkilerden ayrıdır ve ağ geçidinde kimlik doğrulayan bir hesabın PostgreSQL'de örtük hakkı yoktur.

Her sınırı sırayla sınayın ve ilk hatayı okuyun

İstemciden dışarıya sabit bir sırayla ilerleyin: ad çözümleme, TCP erişilebilirliği, TLS, kimlik doğrulama ve ardından sorgunun kendisi. Başarısız olan ilk adım bildirmeye değer tek adımdır ve ileri atlamak henüz ulaşmadığınız bir sınırdan hata iletileri getirir. Dört komut ilk dört adımı kapsar.

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'ten boş yanıt ad çözümleme sorunudur, veritabanı sorunu değil. Reddedilen veya zaman aşımına uğrayan nc bir rotanın ya da güvenlik duvarı kuralının eksik olduğunu gösterir, bu da ağ geçidi tarafında bir düzeltmedir. psql kaynaklı TLS hatası sertifikanın veya adın yanlış olduğunu gösterirken password authentication failed PostgreSQL'e ulaştığınızı ve sorunun kimlik bilgisinde olduğunu gösterir. WMS katmanı için curl çağrısı QGIS'in çözümleyeceği yetenekler XML'ini döndürür; bu yüzden o çıktıdaki HTML oturum açma sayfası boş bir katmanı hemen açıklar.

Zaman aşımına kıyasla PostgreSQL hatası iyi haberdir. Hedefin yanıt verdiğini kanıtlar; bu da kaydı ağ ekibinden veritabanı veya GIS yöneticisine taşır. Bu ayrımı raporda tutmak bir tur kazandırır.

Proje boş katmanlarla açıldığında

QGIS içinde bir şeyi yeniden girmeden önce katmanın kayıtlı kaynağını denetleyin. Katman özellikleri projenin kaydettiği tam bağlantı dizesini gösterir ve daha eski ana bilgisayarlı yinelenen bir bağlantı girdisi önceki ofis ağının yaygın bir kalıntısıdır. Bir bağlantı düzeltildikten sonra projeyi yeniden yüklemek sağlayıcıyı her zaman yeniden okumaz; bu yüzden katmanı kaldırın ve düzeltilmiş bağlantıdan yeniden ekleyin.

Ardından kimlik doğrulama yapılandırmasının listede bulunan değil, katmana bağlı olan olduğunu doğrulayın. Başka bir kimlik doğrulama yapılandırmasıyla kaydedilen katman tarayıcı panelinde sessizce başarısız olurken bağımsız psql testi geçer.

Katman yüklendiğinde projeyi yalnızca dosyalar için göreli yollarla kaydedin ve hizmet bağlantılarını uç noktalarının adıyla tutun. Projeyi devralan sonraki kişi bir kayıt açmadan bozuk bir katmanın hangi ana bilgisayarı beklediğini söyleyebilir.

İlgili makaleler