Nid y VPN sy'n rhwystro psql: mae eich cleient yn deialu mewn man arall
Gall psql a chleient GUI ddeialu cyrchfannau gwahanol o'r un peiriant. Cymharwch westeiwr, soced, rôl a TLS cyn beio'r VPN.
Mae’r ddau glient ar yr un gliniadur, yn mynd trwy’r un twnnel, a dim ond un ohonynt yn cysylltu. Mae’r gymhariaeth honno’n teimlo fel prawf bod y VPN yn ddetholus, tra bod yr esboniad llawer mwy cyffredin yn un bod y ddau glient yn deialu cyrchfannau gwahanol. Mae GUI yn cadw ei westeiwr, porth, rôl a gosodiadau TLS ei hun ac yn adeiladu anfon SSH yn dawel pan fo angen un, tra bod psql yn crynhoi cysylltiad o ragosodiadau libpq y mae eich plisgyn efallai eisoes wedi’u gosod. Mae ailgynhyrchu’r cysylltiad sy’n gweithio yn fater o ddarllen gosodiadau’r GUI, nid o ailosod y twnnel.
Y myth: un cleient sy’n gweithio sy’n profi’r llwybr
Os yw’r GUI yn cysylltu, mae’r twnnel yn cludo traffig, a dyna’r unig beth mae’r GUI yn ei brofi. Nid yw’n dweud dim am ba gyfeiriad mae psql yn ei ddatrys, pa rôl mae’n dilysu â hi, na ph’un a yw’r soced mae’n ei agor yn gadael y peiriant o gwbl. Mae’r llwybr yn gyffredin; nid yw’r paramedrau.
Mae anfoniad lleol yn ehangu’r bwlch. Gall y GUI gysylltu â 127.0.0.1 ar borth y gwnaeth ei anfon dros SSH, ac mae’r gwrandäwr hwnnw’n bodoli dim ond cyhyd ag y bydd sesiwn y GUI. Mae psql wedi’i gyfeirio at localhost heb yr anfoniad yn cael cysylltiad a wrthodwyd nad oes ganddo ddim i’w wneud â’r VPN.
Darllenwch y cyrchfan mae’r GUI yn ei defnyddio mewn gwirionedd
Agorwch briodweddau’r cysylltiad a chopïwch bedwar gwerth: gwesteiwr, porth, cronfa ddata a rôl. Yna chwiliwch am dab twnnel, oherwydd mae anfoniad SSH yn troi cyfeiriad preifat yn borth lleol ac yn newid yr hyn y mae’n rhaid ei ddweud wrth 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 |
Mae pob rhes yn methu ar haen wahanol, ac mae’r neges a gewch yn enwi’r haen honno. Nid yw gludo enw cyfeillgar y proffil a gadwyd i psql yn cario unrhyw un o’r gwerthoedd uchod, ac mae enw gwasanaeth yn cael ei ddatrys trwy ffeil na fydd y terfynell efallai byth yn ei darllen.
Beth mae libpq yn ei etifeddu o’ch plisgyn
Mae psql yn glient tenau dros libpq, ac mae libpq yn darllen yr amgylchedd cyn darllen unrhyw beth arall. Gall newidynnau fel PGHOST, PGHOSTADDR, PGPORT, PGDATABASE, PGUSER, PGSERVICE a PGSSLMODE ailgyfeirio rhan o’r cysylltiad. Cânt eu hetifeddu yn hytrach na’u teipio, felly nid oes dim yn y gorchymyn a redwyd gennych yn eu dangos. Gall PGSSLMODE a allforiwyd hefyd newid yr hyn y mae’r cleient yn ei dderbyn heb air ar y llinell orchymyn.
Mae dau o’r newidynnau hynny’n haeddu amheuaeth yn gyntaf. Mae PGHOSTADDR yn darparu cyrchfan rifiadol sy’n diystyru datrysiad enwau tra bod yr enw gwesteiwr yn dal i lywodraethu hunaniaeth tystysgrif, ac mae PGSERVICE yn tynnu gwesteiwr, cronfa ddata a dewisiadau TLS allan o ffeil gwasanaeth. Mae dympio’r amgylchedd cyfan i ddadfygio hyn yn arferiad drwg, gan y gall gynnwys cyfrineiriau a thocynnau digyswllt; dewiswch y newidynnau sy’n bwysig i chi yn lle hynny.
Mae hepgor host a hostaddr ill dau yn dewis soced parth Unix yn hytrach na chyfeiriad rhwydwaith. Felly gall galwad psql heb -h lwyddo’n lleol, neu fethu â gwall soced, heb gyffwrdd byth â’r llwybr y mae’r GUI yn ei ddefnyddio.
Anfonwch yr un paramedrau â llaw
Gyda gwerthoedd y GUI wrth law, trowch nhw’n benodol a hepgorwch y ffeil gychwyn a allai ychwanegu trefniadau. Mae’r llinyn cysylltu isod yn ddarluniadol: disodlwch y gyrchfan, y porth, y gronfa ddata a’r rôl gyda’r gwerthoedd a gymeradwywyd gan eich gweinyddwr, a chadwch y ffurfweddiad ymddiriedaeth sy’n gweithio’n barod.
psql -X "host=db.internal.example port=6432 dbname=orders user=report_ro sslmode=verify-full connect_timeout=5"Mae tri manylyn yn y gorchymyn hwnnw’n fwriadol. Mae -X yn atal ffeil gychwyn psql, er nad yw’n atal amgylchedd libpq na diffiniad gwasanaeth. Mae connect_timeout=5 yn cadw llwybr wedi’i dagu rhag hongian y terfynell am funudau. Mae sslmode=verify-full yn cadw gwiriadau tystysgrif ac enw gwesteiwr ymlaen, sef yn union y rhan y mae pobl yn ei diffodd pan fo gwall TLS yn ymddangos.
Os yw’r gyrchfan a gymeradwywyd y tu ôl i bwll, gall porth 6432 a phorth 5432 gyrraedd yr un data trwy hunaniaethau gweinydd gwahanol, ac gall dilysu fethu ar enw’r pwll yn hytrach nag enw’r gronfa ddata. Cywirwch yr enw yn y llinyn cysylltu yn lle gwanhau’r modd.
Gadewch i’r neges gwall ddewis y cam nesaf
Mae testun y methiant yn dweud pa mor bell yr aeth yr ymgais, ac mae hynny’n well nag unrhyw ddyfaliad am y twnnel. Mae enw na fydd yn datrys yn methu cyn bod soced, mae terfyn amser yn golygu bod y llwybr neu wal dân wedi gollwng pecynnau, mae gwrthodiad yn golygu bod rhywbeth wedi ateb ac wedi gwrthod, ac mae gwall dilysu yn golygu bod y rhwydwaith eisoes wedi gweithio.
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 --versionCymharwch allbwn \conninfo â sesiwn fyw’r GUI: yr un gwesteiwr, yr un porth, yr un rôl, yr un cyflwr TLS. Pan fydd y pedwar hynny’n cytuno, nid oes gan y VPN ddim ar ôl i’w esbonio. Hyd nes iddynt gytuno, mae pob newid twnnel ychwanegol yn ddyfaliad am gysylltiad na wnaeth y terfynell erioed.