VPN psql-ийг блоклохгүй: таны клиент өөр газар холбогдож байна
psql болон GUI клиент нэг машинаас өөр өөр төгсгөлийн цэгт хандаж болно. VPN-ийг буруутгахаас өмнө host, socket, роль, TLS-ийг харьцуулна уу.
Хоёр клиент нэг зөөврийн компьютер дээр, нэг tunnеlээр явж байгаа ч зөвхөн нэг нь холбогддог. Энэ харьцуулалт VPN сонгомол гэдгийг нотолж байгаа мэт санагддаг ч илүү түгээмэл тайлбар нь хоёр клиент өөр өөр чиглэлд ханддаг явдал юм. GUI өөрийн host, port, роль, TLS тохиргоог хадгалж, шаардлагатай үед SSH дамжуулалтыг чимээгүйхэн барьдаг бол psql нь таны shell аль хэдийн тохируулсан байж болох libpq-ийн өгөгдмөл утгуудаас холболтыг угсардаг. Ажиллаж буй холболтыг дахин бий болгох нь GUI-ийн тохиргоог унших асуудал бөгөөд tunnеlийг дахин суулгах асуудал биш.
Домог: нэг ажиллаж буй клиент замыг нотолдог
Хэрэв GUI холбогдвол tunnеl трафикийг зөөнө, GUI үүнээс өөр юу ч нотолдоггүй. psql аль хаягийг шийддэг, ямар рольтой танигдах, эсвэл нээсэн socket нь машинаас гарах эсэхийг энэ нь хэлэхгүй. Зам нь нийтлэг; параметрүүд нь биш.
Локал дамжуулалт ялгааг улам өргөжүүлнэ. GUI нь SSH-ээр дамжуулсан порт дээрх 127.0.0.1 рүү холбогдож болох бөгөөд энэ сонсогч зөвхөн GUI-ийн сессийн үеэр оршино. Дамжуулалтгүйгээр localhost руу чиглэсэн psql нь VPN-тэй ямар ч холбоогүй татгалзсан холболт авдаг.
GUI-ийн бодитоор ашигладаг төгсгөлийн цэгийг уншина уу
Холболтын шинж чанарыг нээж, дөрвөн утгыг хуулна уу: host, port, мэдээллийн сан, роль. Дараа нь tunnеlийн табыг хайна уу, учир нь SSH дамжуулалт хувийн хаягийг локал порт болгон хувиргаж, psql-д хэлэх зүйлийг өөрчилдөг.
| Setting | What the GUI holds | What psql uses when the value is absent |
|---|---|---|
| Destination | A saved hostname, sometimes behind a forward | A local Unix socket, not the remote endpoint |
| Port | The direct port or a forwarded local port | 5432, or the port from a service file |
| Role and database | Stored per connection profile | Your operating-system user name |
| TLS identity | Its own CA bundle and verification mode | Whatever PGSSLMODE or the service file says |
| Startup files | Not read at all | Read unless -X is passed |
Мөр бүр өөр давхаргад бүтэлгүйтдэг бөгөөд таны хүлээн авсан мессеж тэр давхаргыг нэрлэдэг. Хадгалсан профайлын найрсаг нэрийг psql-д буулгах нь дээрх утгуудын аль нэгийг ч хүргэхгүй, үйлчилгээний нэр нь терминал хэзээ ч уншихгүй байж болох файлаар шийдэгддэг.
libpq таны shell-ээс юу өвлөдөг вэ
psql бол libpq-ийн дээрх нимгэн клиент бөгөөд libpq бүхнээс өмнө орчныг уншдаг. PGHOST, PGHOSTADDR, PGPORT, PGDATABASE, PGUSER, PGSERVICE, PGSSLMODE зэрэг хувьсагч бүр холболтын нэг хэсгийг өөр тийш чиглүүлж чадна. Тэдгээрийг бичихгүй, өвлөдөг тул таны ажиллуулсан команд дотор аль нь ч харагдахгүй. Экспортолсон PGSSLMODE нь командын мөрөнд нэг ч үг хэлэхгүйгээр клиентийн хүлээн авах зүйлийг өөрчилж чадна.
Эдгээр хувьсагчийн хоёр нь эхлээд сэжиг төрүүлдэг. PGHOSTADDR нэрийн шийдлийг давж гарах тоон чиглэлийг өгдөг бол host-ийн нэр сертификатын таних тэмдгийг тодорхойлсоор байдаг, PGSERVICE нь үйлчилгээний файлаас host, мэдээллийн сан, TLS-ийн сонголтыг татаж авдаг. Үүнийг дибаг хийхийн тулд бүх орчныг асгах нь муу дадал, учир нь тэнд нууц үг, холбоогүй токен байж болно; оронд нь өөрт чухал хувьсагчдыг сонгоорой.
host ба hostaddr хоёуланг нь орхивол сүлжээний хаяг биш Unix домэйны socket сонгогдоно. Тиймээс -h гүйгээр psql дуудлага локалд амжилттай болох эсвэл socket алдаагаар бүтэлгүйтэж болох бөгөөд GUI-ийн ашигладаг замыг огт хөндөхгүй.
Ижил параметрүүдийг гараар илгээнэ үү
GUI-ийн утгууд гарт байгаа бол тэдгээрийг тодорхой дамжуулж, дарж бичих нэмж болох эхлэх файлыг алгас. Доорх холболтын мөр нь жишээ: төгсгөлийн цэг, порт, мэдээллийн сан, ролийг администраторын баталсан утгуудаар сольж, аль хэдийн ажиллаж буй итгэлцлийн тохиргоог хэвээр үлдээгээрэй.
psql -X "host=db.internal.example port=6432 dbname=orders user=report_ro sslmode=verify-full connect_timeout=5"Тухайн команд дахь гурван дэлгэрэнгүй зориуд. -X psql-ийн эхлэх файлыг дарангуйлдаг ч libpq-ийн орчин эсвэл үйлчилгээний тодорхойлолтыг дарангуйлдаггүй. connect_timeout=5 хоосон зам терминалыг хэдэн минутын турш дүүжлэхийг сэргийлдэг. sslmode=verify-full сертификат болон host-ийн нэрийн шалгалтыг асаалттай байлгадаг бөгөөд TLS алдаа гарч ирэхэд хүмүүс яг энэ хэсгийг унтраадаг.
Хэрэв батлагдсан төгсгөлийн цэг pooler-ийн ард байвал 6432 порт ба 5432 порт нь өөр серверийн таних тэмдгээр ижил өгөгдөлд хүрч болох бөгөөд шалгалт нь мэдээллийн сангийн бус pooler-ийн нэр дээр бүтэлгүйтэж болно. Горимыг сулруулахын оронд холболтын мөр дэх нэрийг засаарай.
Дараагийн алхмыг алдааны мессеж сонгох болтугай
Бүтэлгүйтлийн текст оролдлого хэр хол явсныг хэлдэг бөгөөд энэ нь tunnеlийн талаарх ямар ч таамаглалаас дээр. Шийдэгдэхгүй нэр socket үүсэхээс өмнө бүтэлгүйтдэг, хугацаа дуусах нь зам эсвэл firewall пакетуудыг хаясан гэсэн үг, татгалзал нь ямар нэг зүйл хариу өгөөд татгалзсан гэсэн үг, баталгаажуулалтын алдаа нь сүлжээ аль хэдийн ажиллаж байсан гэсэн үг.
psql -X -w "host=db.internal.example port=6432 dbname=orders user=report_ro sslmode=verify-full connect_timeout=5" -c '\conninfo'
env | grep -E '^PG'
psql --version\conninfo-ийн гаралтыг GUI-ийн амьд сесситэй харьцуулна уу: ижил host, ижил port, ижил роль, ижил TLS төлөв. Эдгээр дөрөв тохирвол VPN-д тайлбарлах зүйл үлдэхгүй. Тохирох хүртэл tunnеlийн нэмэлт өөрчлөлт бүр нь терминалын хэзээ ч хийгээгүй холболтын талаарх таамаглал юм.