Kết nối QGIS với PostGIS sau VPN: từng bước một
Trỏ QGIS tới PostGIS hoặc WMS sau VPN: tách đường hầm khỏi điểm cuối dịch vụ, giữ TLS verify-full và kiểm tra từng ranh giới theo thứ tự.
QGIS đọc bất kỳ đường dẫn nào mà các nhà cung cấp dữ liệu của nó chạm tới, nên một VPN đang bật chỉ là nửa phần cấu hình. Đường hầm cho máy tính để bàn một tuyến đường và một chính sách phân giải tên; dự án vẫn cần điểm cuối dịch vụ, giao thức của nhà cung cấp và thông tin đăng nhập mà dịch vụ chấp nhận. Đó là ba trường riêng biệt, và việc gõ trình lắng nghe công khai của VPN vào một trường cơ sở dữ liệu không phải là bất kỳ trường nào trong số đó. Bài viết này theo một lớp PostGIS từ biểu mẫu QGIS đến dòng được trả về và gọi tên ranh giới mà mỗi bước chứng minh.
Bắt đầu từ lớp, không phải từ VPN
Mỗi loại lớp chạm tới một kiểu điểm cuối khác nhau. Lớp PostGIS mở một kết nối PostgreSQL với máy chủ, cổng, cơ sở dữ liệu và vai trò. Lớp WMS hoặc WFS lấy một URL dịch vụ rồi phân tích tài liệu khả năng. Một shapefile trên chia sẻ mạng chỉ cần đường dẫn tệp mà hệ điều hành mở được. Vì đây là ba cơ chế khác nhau, một dự án trống không nói gì cho bạn cho đến khi bạn biết mình đang gỡ lỗi cái nào.
Hỏi người vận hành GIS về điểm cuối, cổng, danh tính bắt buộc và chính sách truy cập áp dụng cho tài khoản của bạn. Giữ nguyên tên máy chủ của dịch vụ đúng như khi được cấp khi việc triển khai phụ thuộc vào DNS riêng hoặc vào việc kiểm tra tên trong chứng chỉ. Dùng lại một địa chỉ máy chủ sao chép từ kết nối đã lưu của người khác là cách nhanh nhất để đến một máy trả lời nhưng giữ cơ sở dữ liệu cũ hơn.
Tuyến đường, tài nguyên được phép và phân giải tên thuộc về người vận hành VPN. Một biểu mẫu nguồn dữ liệu không thể cài một tuyến mà hồ sơ đường hầm chưa bao giờ đẩy xuống, và không thể mở rộng chính sách của cổng. Khi máy chủ phân giải được và cổng trả lời, phía mạng của vấn đề đã xong.
Nhập điểm cuối riêng mà người vận hành đã cấp
Biểu mẫu PostgreSQL trong QGIS phản chiếu các trường mà libpq mong đợi, nên hãy điền theo đúng thứ tự mà một kết nối dòng lệnh sẽ làm. Dịch vụ và máy chủ nhận máy cơ sở dữ liệu, cổng nhận trình lắng nghe mà máy chủ thực sự mở, và cơ sở dữ liệu nhận danh mục cụ thể thay vì mặc định của máy chủ. Lưu mật khẩu trong một cấu hình xác thực thay vì trong tệp dự án, để một dự án được chia sẻ không mang theo thông tin đăng nhập.
Tách hai tên trước khi gõ bất cứ thứ gì. Tên cổng thuộc về ứng dụng khách VPN và tên cơ sở dữ liệu thuộc về QGIS, và chúng hiếm khi là cùng một máy chủ.
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
Nếu cơ sở dữ liệu nằm trên máy khác sau cổng, tên trong biểu mẫu phải là máy đó. Chính DNS riêng qua đường hầm làm cho tên hoạt động, và một dự án chỉ phân giải được khi đang kết nối là đang hành xử đúng chứ không phải lưu đệm tồi.
Giữ chế độ TLS của cơ sở dữ liệu tách khỏi đường hầm
SSL trong tên một sản phẩm VPN mô tả đường hầm, không phải phiên cơ sở dữ liệu. QGIS chuyển chế độ SSL của PostgreSQL cho libpq, và chế độ đó kiểm soát việc ứng dụng khách có xác minh chứng chỉ máy chủ hay không và có kiểm tra tên máy chủ bên trong hay không. verify-fulllàm cả hai, vì vậy đây là chế độ đáng giữ lại khi chứng chỉ mang tên dịch vụ.
Hạ chế độ xuống disable vì đường hầm đã được mã hóa sẽ loại bỏ việc kiểm tra rằng máy chủ bạn đến là máy chủ bạn yêu cầu. Khi xác minh thất bại, nguyên nhân thường gặp là tên không khớp hoặc thiếu chứng chỉ gốc, và cả hai đều sửa được mà không làm yếu kết nối. Trỏ sslrootcert tới CA mà người vận hành công bố và giữ tên máy chủ trong biểu mẫu trùng với tên trong chứng chỉ.
Một đường hầm có tuyến riêng và một cơ sở dữ liệu có chứng chỉ hợp lệ vẫn có thể thất bại ở vai trò. Thông tin đăng nhập của ứng dụng tách biệt với thông tin đăng nhập VPN, và một tài khoản xác thực ở cổng không có quyền ngầm định nào trong PostgreSQL.
Kiểm tra từng ranh giới theo thứ tự và đọc lỗi đầu tiên
Làm việc từ ứng dụng khách ra ngoài theo một thứ tự cố định: phân giải tên, khả năng tiếp cận TCP, TLS, xác thực và sau đó chính truy vấn. Bước đầu tiên thất bại là bước duy nhất đáng báo cáo, và nhảy về phía trước tạo ra thông báo lỗi từ một ranh giới bạn chưa chạm tới. Bốn lệnh bao quát bốn bước đầu tiên.
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
Một câu trả lời rỗng từ getent là vấn đề phân giải, không phải vấn đề cơ sở dữ liệu. Một nc bị từ chối hoặc hết thời gian có nghĩa là thiếu tuyến hoặc thiếu quy tắc tường lửa, tức là sửa ở phía cổng. Lỗi TLS từ psql có nghĩa là chứng chỉ hoặc tên sai, trong khi password authentication failed có nghĩa là bạn đã đến PostgreSQL và vấn đề là thông tin đăng nhập. Với lớp WMS, lệnh gọi curl trả về XML khả năng mà QGIS sẽ phân tích, vì vậy một trang đăng nhập HTML trong đầu ra đó giải thích ngay một lớp rỗng.
Một lỗi PostgreSQL là tin tốt so với hết thời gian chờ. Nó chứng minh đích đã trả lời, điều này chuyển phiếu từ nhóm mạng sang quản trị viên cơ sở dữ liệu hoặc GIS. Giữ sự phân biệt đó trong báo cáo tiết kiệm một vòng.
Khi dự án mở với các lớp rỗng
Trong QGIS, hãy kiểm tra nguồn đã lưu của lớp trước khi nhập lại bất cứ thứ gì. Thuộc tính lớp hiển thị chuỗi kết nối chính xác mà dự án đã lưu, và một mục kết nối trùng lặp với máy chủ cũ hơn là phần sót lại thường gặp từ mạng văn phòng trước đây. Tải lại dự án sau khi sửa kết nối không phải lúc nào cũng đọc lại nhà cung cấp, nên hãy xóa lớp và thêm lại từ kết nối đã sửa.
Sau đó xác nhận rằng cấu hình xác thực là cấu hình được gắn với lớp, không chỉ là cấu hình có trong danh sách. Một lớp được lưu với cấu hình xác thực khác sẽ thất bại âm thầm trong bảng trình duyệt trong khi bài kiểm tra psql độc lập vẫn đạt.
Khi lớp tải xong, hãy lưu dự án với đường dẫn tương đối chỉ cho tệp và giữ các kết nối dịch vụ được đặt tên theo điểm cuối của chúng. Người tiếp theo kế thừa dự án có thể nói lớp hỏng đã mong đợi máy chủ nào mà không cần mở phiếu.