Mae porwr yn gofyn am https://203.0.113.10:8443, mae’r dirprwy yn derbyn y cysylltiad, ac nid yw’r gwasanaeth ar y peer WireGuard byth yn ateb. Mae rheol DNAT yn gwneud ei gwaith; yr ateb yw’r rhan sy’n methu. Dilynwch y pecyn drwy’r ddau gyfieithiad a daw’r rheol sydd ar goll yn amlwg. Un gosodiad NAT arall yn y bachyn cywir yw’r ateb, nid twnnel newydd.

Dilynwch un cais o’r dechrau i’r diwedd

Mae’r cais yn cyrraedd rhyngwyneb cyhoeddus y dirprwy gyda chyfeiriad cyhoeddus y cleient fel ffynhonnell a chyfeiriad y dirprwy fel cyrchfan. Yn nat PREROUTING, mae’r rheol DNAT yn ailysgrifennu’r gyrchfan i gyfeiriad twnnel y peer, 10.90.0.2. Yna mae’r penderfyniad llwybro yn anfon y pecyn allan drwy wg0, ac mae’r llwybr anfon ymlaen yn gyflawn.

Ar y peer, mae’r pecyn bellach yn cario’r cyfeiriad ffynhonnell cyhoeddus gwreiddiol, oherwydd nid oes dim wedi’i ailysgrifennu. Mae’r gwasanaeth yn derbyn y cysylltiad ac yn anfon ei ateb i’w giât porth diofyn ei hun, sef y llwybrydd cartref o flaen y peer. Nid oes gan y llwybrydd hwnnw unrhyw gyflwr ar gyfer llif na welodd erioed, ac mae naill ai’n gollwng y pecyn neu’n ei gyfieithu i’w gyfeiriad cyhoeddus ei hun, na fydd y cleient yn ei dderbyn.

Yr anghymesuredd yw’r broblem gyfan: mae’r cais yn mynd drwy’r dirprwy, ac mae’r ateb yn ceisio mynd yn syth. Dim ond os yw’r ateb yn dychwelyd drwy’r dirprwy y mae olrhain cysylltiadau’r dirprwy yn helpu, ac ni all ddychwelyd yno tra bo’r cyfeiriad ffynhonnell yn dal i bwyntio at y cleient gwreiddiol.

Ychwanegwch y cyfieithiad dychwelyd

Ailysgrifennwch ffynhonnell y llif a anfonir ymlaen i gyfeiriad twnnel y dirprwy cyn iddo adael at y peer. Yna mae’r gwasanaeth yn ateb 10.90.0.1, mae’r dirprwy yn ei dderbyn, ac mae olrhain cysylltiadau yn gwrthdroi’r ddau gyfieithiad cyn i’r pecyn ddychwelyd at y cleient.

iptables -t nat -A PREROUTING -p tcp -m multiport --dports 8080,8443 -j DNAT --to-destination 10.90.0.2
iptables -t nat -A POSTROUTING -d 10.90.0.2 -o wg0 -p tcp -m multiport --dports 8080,8443 -j SNAT --to-source 10.90.0.1

Mae’r rheol POSTROUTING yn fwriadol gul: mae’n cyfateb i’r gyrchfan a gyfieithwyd ac i ryngwyneb y twnnel, felly nid yw’n ailysgrifennu traffig di-gysylltiedig sy’n digwydd gadael drwy wg0. Rheol masquerade eang hefyd yn cuddio cyfeiriad y cleient, ond byddai’n gwneud hynny ar gyfer pob llif ac yn gwneud y tabl NAT yn anoddach i’w archwilio.

Rhowch y rheolau lle mae’r twnnel yn bodoli

Rhaid i reolau sy’n cyfeirio at gyfeiriad neu ryngwyneb y twnnel redeg ar ôl i wg-quick ei ffurfweddu. Mae’r rhyngwyneb yn cael ei greu cyn PreUp, ond mae cyfeiriadau, MTU, DNS a llwybrau yn cael eu cymhwyso wedyn, ac mae PostUp yn rhedeg pan fydd popeth hynny yn ei le. Rhowch yr ychwanegiadau yn PostUp a’r dileadau yn PreDown.

PostUp = iptables -t nat -A PREROUTING -p tcp -m multiport --dports 8080,8443 -j DNAT --to-destination 10.90.0.2
PostUp = iptables -t nat -A POSTROUTING -d 10.90.0.2 -o wg0 -p tcp -m multiport --dports 8080,8443 -j SNAT --to-source 10.90.0.1
PreDown = iptables -t nat -D PREROUTING -p tcp -m multiport --dports 8080,8443 -j DNAT --to-destination 10.90.0.2
PreDown = iptables -t nat -D POSTROUTING -d 10.90.0.2 -o wg0 -p tcp -m multiport --dports 8080,8443 -j SNAT --to-source 10.90.0.1

Rhaid i’r dileadau gyfateb i’r ychwanegiadau token wrth token, gan gynnwys y cyfatebiadau multiport a rhyngwyneb. Nid yw dilead sy’n gwahaniaethu mewn un cyfatebiad yn tynnu dim, ac mae’r ailgysylltiad nesaf yn ychwanegu ail gopi o’r rheol. Ar ôl ychydig o ailgysylltiadau mae’r tabl yn cynnwys dyblygiadau sy’n anodd eu priodoli i linell ffurfweddu.

Gwiriwch y canlyniad gyda iptables -t nat -S ar ôl ailgysylltu. Os yw’r un rheol yn ymddangos ddwywaith, nid yw’r llinell PreDown yn cyfateb ac mae’r glanhau yn methu’n dawel.

Anfon ymlaen, hidlo a’r NAT arall

Galluogwch anfon IPv4 ymlaen yn barhaus, yna caniathewch y llif a anfonir ymlaen yn y tabl hidlo. Mae DNAT yn digwydd cyn y gadwyn FORWARD, felly mae’r rheol hidlo yn cyfateb i’r gyrchfan a gyfieithwyd yn hytrach na’r cyfeiriad cyhoeddus. Os UFW sy’n rheoli’r wal dân, mynegwch y caniatâd fel rheol llwybr; nid yw rheol gwesteiwr syml yn cwmpasu traffig a anfonir ymlaen.

Gall dwy haen NAT arall dorri’r llwybr o hyd, hyd yn oed pan fydd rheolau’r dirprwy yn gywir. Ar gysylltiad cartref, mae’r cyfeiriad cyhoeddus yn perthyn i’r llwybrydd, ac nid yw agor y porth yn ei wal dân yr un peth ag creu cofnod anfon porth ymlaen sy’n anfon y porth hwnnw at y dirprwy. Mae porth sy’n edrych yn agored o’r tu allan tra nad oes dim yn ateb yn aml yn colli’r mapio hwnnw’n union.

Ar VPS NAT, mae’r darparwr yn mapio porth cyhoeddus i gyfeiriad preifat. Rhaid i’r mapio gytuno â’r porth yr hysbysebwch, ac mae anghysondeb yn edrych yn union fel twnnel wedi torri. Cadarnhewch fapio’r darparwr cyn newid ffurfweddiad WireGuard.

Gwiriwch y llwybr dychwelyd a derbyniwch y gost

Cysylltwch o rwydwaith nad yw’n LAN y dirprwy, yna archwiliwch y pâr cyfieithu tra bo’r cysylltiad ar agor:

conntrack -L -p tcp --dport 8080
tcpdump -ni any tcp port 8080

Dylai’r cofnod conntrack ddangos y tuple gwreiddiol, y tuple a gyfieithwyd a chyfeiriad yr ateb. Os yw’r ateb ar goll, nid yw’r peer yn anfon drwy’r twnnel, sy’n golygu fel arfer na chymhwyswyd y rheol SNAT neu fod wal dân y peer ei hun wedi gollwng y llif.

Ailgychwynnwch unwaith i brofi bod PostUp yn ailgymhwyso’r rheolau, yna stopiwch y twnnel a chadarnhewch fod PreDown wedi’u tynnu. Rheolau marw sy’n goroesi datgysylltiad yw’r rheswm y mae newid diweddarach yn ymddwyn yn annisgwyl.

Yn olaf, derbyniwch beth mae SNAT yn ei gostio. Mae’r gwasanaeth yn gweld pob cais fel un yn dod o’r dirprwy, felly nid yw logiau mynediad, terfynau cyfradd fesul cleient a rhestrau cyfeiriadau a ganiateir yn gwahaniaethu defnyddwyr mwyach. Mae’r achos hairpin angen ei gyfieithiad ffynhonnell ei hun ar gyfer cleientiaid ar LAN y dirprwy. Os oes angen cyfeiriadau cleient go iawn ar y peer, y dewis arall yw llwybr dychwelyd i rwydwaith y cleient, sy’n fwy o waith ond yn cadw’r wybodaeth.

Erthyglau cysylltiedig