Dechreuais o’r tu allan, fel y byddai defnyddiwr yn ei wneud: teipio’r enw ym mhorwr ffôn ar ddata symudol a gwylio’r cysylltiad yn hongian nes iddo amseru allan. Roedd yr enw’n datrys, felly roedd y DNS yn iawn. Roedd tudalen anfon porth y llwybrydd cartref yn fag ddihang hefyd, oherwydd roedd ei chyfeiriad WAN yn dangos 100.64.31.42, ac nid yw hwnnw’n gyfeiriad y bydd darparwr yn llwybro ataf iddo o’r rhyngrwyd. Mae’r rhif hwnnw’n egluro’r methiant cyfan: mae’r llinell y tu ôl i carrier-grade NAT, felly mae’r cyfeiriad cyhoeddus ar fy ochr i o’r twnnel yn perthyn i’r darparwr. Yr hyn sy’n dilyn yw’r llwybr y cerddais o’r tab hongian hwnnw at wasanaeth sy’n ateb.

Dechrau gyda’r cleient a gweithio i mewn

Cyn newid unrhyw reol, profwch ble mae’r gadwyn yn stopio. Ar y gliniadur rhedais dig +short files.example.net a chael cyfeiriad y VPS yn ôl, a oedd yn diystyru DNS hen ar fy nghyfrifiadur. Yna methodd curl -v --connect-timeout 5 files.example.net:5022 ag amseru allan yn hytrach na chael ei wrthod. Mae’r gwahaniaeth hwnnw’n bwysig: mae amseru allan fel arfer yn golygu bod pecynnau’n cael eu gollwng ar y ffordd, tra bod gwrthodiad yn golygu bod rhywbeth wedi ateb a dweud na.

Y naid nesaf i mewn oedd y VPS ei hun. Ni ddangosodd ss -ltnp unrhyw beth yn gwrando ar 5022, a oedd i’w ddisgwyl cyn i’r rheol DNAT fodoli. Ar yr un blwch, cadarnhaodd wg show (neu ip -br a show tun0 ar gyfer OpenVPN) fod y cymar cartref i fyny gyda chydlawediad diweddar. Os yw’r cymar i lawr, ni fydd unrhyw reol NAT yn helpu, ac nid yw’r golau gwyrdd ar dudalen VPN y llwybrydd cartref yn golygu dim.

Cadarnhau bod llinell y cartref wir y tu ôl i CGNAT

Cymharwch y cyfeiriad y mae’r llwybrydd yn ei adrodd ar ei ryngwyneb WAN â’r hyn y mae gwasanaeth allanol yn ei weld. Mae unrhyw beth yn 100.64.0.0/10, hynny yw 100.64.x.x hyd at 100.127.x.x, yn yr ystod cyfeiriadau a rennir o RFC 6598 ac ni ellir ei gyrraedd o’r rhyngrwyd. Dewch i’r un casgliad pan fydd y llwybrydd yn honni cyfeiriad preifat cyffredin ac y bydd chwiliad cyhoeddus yn dychwelyd rhywbeth digyswllt. Gall llinell CGNAT hefyd ddod â chyfeiriad cyhoeddus nad yw ond yn para tan y les nesaf, fel bod anfon porth yn ymddangos yn gweithio am awr ac yna’n marw’n dawel.

Mae rhai darparwyr yn rhoi cyfeiriad cyhoeddus go iawn, ond yn blocio pyrth 80 a 443 sy’n dod i mewn ar gyfrifon preswyl. Os yw eich gwasanaeth yn un gwe yn unig ac mae’r cyfeiriad WAN wir yn gyhoeddus, gofynnwch i’r cymorth cyn adeiladu relé. Os nad yw, mae’r dyluniad isod yn berthnasol i bob porth yn gyfartal, ac mae’n werth stopio’r arbrawf ar ochr y llwybrydd: mae’r cyfieithydd yn rhwydwaith y darparwr yn terfynu’r cysylltiad cyn iddo gyrraedd eich rhyngwyneb WAN o gwbl.

Pwyntio’r enw at gyfeiriad y VPS

Nid yw DNS yn anfon traffig ymlaen, felly rhaid i gofnod A y gwasanaeth ddal cyfeiriad cyhoeddus y VPS. Dim ond i gleientiaid sydd eisoes y tu mewn i’r VPN y mae cofnod A at 192.168.1.20 yn datrys yn ddefnyddiol; o’r rhyngrwyd mae’n datrys i gyfeiriad na all neb ei lwybro. Ar gyfer mynediad gweinyddol y VPS ei hun cadwaf enw ar wahân, fel na fyddaf byth yn drysu pa wasgfa y mae cofnod yn cyfeirio ati.

Os yw’r VPS a’r blwch cartref ill dau yn gwasanaethu HTTP, rhowch ei enw ei hun i bob un a gadewch i’r VPS benderfynu pwy sy’n ateb. Plygu’r ddau yn un enw a gobeithio y bydd’r procsi yn dewis y backend cywir yw’n union sut yr ydych yn treulio prynhawn yn dadfygio’r gwesteiwr anghywir.

DNAT un porth, gadael SSH ar 22

Y dewis uniongyrchol yw NAT cyrchfan ar y VPS. Galluogwch anfon ymlaen ar gyfer y cnewyllyn sy’n rhedeg a chadwch gyfeiriad twnnel y gweinydd cartref yn y rheol, nid ei gyfeiriad LAN:

sysctl -w net.ipv4.ip_forward=1
iptables -t nat -A PREROUTING -p tcp -d 198.51.100.10 --dport 5022 -j DNAT --to-destination 10.8.0.2

Gadewch SSH at y VPS ei hun ar 22 ac anfonwch borth arall, er enghraifft 5022, at y peiriant cartref. Os anfonwch 22 at flwch sydd i lawr, collwch yr un llwybr a allai fod wedi ei drwsio. Mae’r un rhesymeg yn berthnasol i’r procsi: cadwch borth rheoli’r VPS y tu allan i reolau’r relé.

Gwnewch y rheolau’n barhaol unwaith y byddant yn gweithio. Ar Debian neu Ubuntu, mae apt install iptables-persistent ac yna netfilter-persistent save yn eu hysgrifennu i /etc/iptables/rules.v4. Ar westeiwr firewalld y cyfwerth yw porth-anfon parhaol ar y parth, sy’n gofyn am firewall-cmd --reload cyn iddo fod yn berthnasol. Mae rheolau sy’n byw yn y cof yn unig yn diflannu ar ailgychwyn cynnal cyntaf y darparwr, fel arfer ar awr wael.

Trwsio’r llwybr dychwelyd, neu osgoi bod ei angen

Dim ond y cyrchfan y mae DNAT yn ei ailysgrifennu. Mae’r gweinydd cartref yn gweld cysylltiad o gyfeiriad gwreiddiol y cleient, ac os yw ei lwybr diofyn yn pwyntio at lwybrydd y cartref, mae’r ateb yn gadael y tŷ drwy’r WAN lle mae cyfieithydd y darparwr yn ei ollwng. Yr anghymesuredd hwnnw oedd yr ail fethiant a darganfûm, ar ôl i’r rheol DNAT edrych yn gwbl gywir.

Mae dau atgyweiriad yn gweithio. Rhowch lwybr polisi i’r blwch cartref fel bod traffig o’r twnnel yn mynd yn ôl drwy’r twnnel:

ip rule add from 10.8.0.2 table 100
ip route add default dev wg0 table 100

Neu gadewch i’r VPS ailysgrifennu’r ffynhonnell fel bod gan yr ateb gyfeiriad y gall ei gyrraedd, a gadewch i conntrack ei wrthdroi ar y ffordd allan:

iptables -t nat -A POSTROUTING -d 10.8.0.2 -p tcp --dport 5022 -j SNAT --to-source 10.8.0.1

Mae fersiwn SNAT yn cuddio gwir gyfeiriad y cleient rhag y gweinydd cartref, felly mae cofnodion y rhaglen yn dangos 10.8.0.1 fel cymar. Paswch y cyfeiriad gwreiddiol ar haen y rhaglen, neu dderbyniwch golli cofnodi fesul cleient, ond penderfynwch yn fwriadol yn hytrach na darganfod hyn yn ystod digwyddiad.

Gwirio’r holl lwybr o’r tu allan

Gwiriwch o rwydwaith nad yw’r VPS na’r tŷ: ffôn ar ddata symudol, neu gragen rad rhywle arall. Dylai nc -vz files.example.net 5022 adrodd cysylltiad llwyddiannus, a dylai openssl s_client -connect files.example.net:443 -servername files.example.net ddangos y dystysgrif ar gyfer yr enw cyhoeddus. Yna gwiriwch grŵp diogelwch neu wal dân cwmwl y darparwr. Mae rheol DNAT nad yw byth yn gweld pecyn fel arfer yn cael ei blocio un haen uwchben y gwesteiwr.

Yn olaf, penderfynwch beth sy’n digwydd pan fydd y twnnel yn cwympo. Mae rheol DNAT yn parhau i dderbyn cysylltiadau ac yn eu bwydo’n dawel i dwnnel marw, sy’n edrych yn union fel gwasanaeth wedi torri. Mae gwiriad iechyd ar y VPS sy’n gwrthod y porth tra bo’r cymar i lawr yn costio ychydig linellau ac yn arbed awr o ddyfalu. Wedi hynny, stopiwch olygu rheolau a gwyliwch ef am ddiwrnod cyn ymddiried ynddo.

Erthyglau cysylltiedig