اتصال QGIS به PostGIS پشت VPN: گام به گام
QGIS را به PostGIS یا WMS پشت VPN وصل کنید: تونل را از نقطه پایانی سرویس جدا کنید، TLS با حالت verify-full را نگه دارید و هر مرز را به ترتیب بیازمایید.
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 مستقل موفق میشود.
وقتی لایه بارگذاری شد، پروژه را فقط برای فایلها با مسیرهای نسبی ذخیره کنید و اتصالهای سرویس را به نام نقطه پایانیشان نگه دارید. نفر بعدی که پروژه را به ارث میبرد میتواند بدون باز کردن تیکت بگوید یک لایه خراب انتظار کدام میزبان را داشت.