Mae cyflwyno dyfais LAN ar un o gyfeiriadau tiwnel y porth ei hun yn cymryd un llinell o NAT. Mae’r cysylltiad yn dal i fethu, oherwydd nid oes gan y ddyfais sy’n ateb unrhyw syniad bod cyfeiriad y cleient yn gyrraeddadwy drwy’r porth hwnnw. Cerddwch y pecyn o’r cleient i mewn, yna cerddwch yr ateb yn ôl allan, a daw’r hanner sydd ar goll yn amlwg.

Dechreuwch o safbwynt y cleient

Mae’r cleient yn yr enghraifft hon yn y pwll VPN 10.62.0.0/24 ac yn cysylltu â 10.62.0.1 ar borth 8080. Mae’r cyfeiriad hwnnw’n perthyn i’r porth ei hun, felly mae’r pecyn yn cyrraedd cnewyllyn y porth yn hytrach nag edrychwr arall. Y tu ôl i’r porth, y LAN yw 172.21.4.0/24. Mae’r porth yn dal 172.21.4.10 a’r ddyfais sy’n gwasanaethu HTTP mewn gwirionedd yw 172.21.4.40.

Nid yw cyfeiriad sy’n perthyn i edrychwr VPN arall yn gyfnewidiol â chyfeiriad gwasanaeth y porth. Os yw’r cleient yn cysylltu â chyfeiriad edrychwr, nid oes unrhyw reol porth yn rhan o’r mater o gwbl, a’r cerddediad cyfan hwn yw’r un anghywir.

Cwmpaswch y cyfieithiad cyrchfan yn fwriadol

Mae’r fersiwn gul yn cyflwyno un porth ac yn ailysgrifennu’r gyrchfan yn unig. Mae’r pecyn yn cadw ei brotocol a’i ffynhonnell, a dyna sy’n gwneud gweddill y cerddediad yn ddiddorol.

iptables -t nat -A PREROUTING -i tun0 -s 10.62.0.0/24 -d 10.62.0.1 -p tcp --dport 8080 -j DNAT --to-destination 172.21.4.40:80

Mae rheol heb feini prawf protocol a phorth yn fersiwn lydan: mae’n cadw pa bynnag borth a ddewisodd y cleient tra’n newid y cyfeiriad yn unig. Mae hynny’n gyfreithlon pan fwriedir cyflwyno’r holl westeiwr, ac yn anghywir pan mai un gwasanaeth oedd y bwriad. Darllenwch y rheol yn ôl a chadarnhewch enw’r rhyngwyneb. Nid yw rheol DNAT ar y rhyngwyneb anghywir yn cyfateb i ddim, sy’n cynhyrchu’r un terfyn amser ag y mae rheol ar goll ac yn gwastraffu awr yn edrych ar y ddyfais.

Gadewch i’r ffin anfon ymlaen gytuno

Mae cyfieithu’n newid y pennawd; nid yw’n rhoi caniatâd. Gyda pholisi gollwng diofyn mae’r llif a anfonwyd ymlaen angen ei dderbyniad ei hun, ac mae’r cyfeiriad dychwelyd angen y rheol sefydledig sydd gan eich polisi yn ôl pob tebyg yn barod.

iptables -A FORWARD -i tun0 -o lan0 -d 172.21.4.40 -p tcp --dport 80 -m conntrack --ctstate NEW -j ACCEPT
iptables -A FORWARD -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT

Mae derbyniad diamod ar gyfer pob llif DNAT yn lletach na’r cynllun hwn a bydd hefyd yn caniatáu mapiadau a ychwanegir yn ddiweddarach gan rywun arall. Enwch y gyrchfan a’r porth, a gadewch y gweddill yn gaeedig. Os yw’r cyfrifwyr ar y rheol anfon ymlaen yn aros ar sero tra mae cyfrifwyr NAT yn codi, mae’r pecyn yn cael ei ollwng cyn eich rheol. Darllenwch drefn y gadwyn yn hytrach nag ychwanegu ail gopi.

Rhaid i’r ddyfais ateb rywsut

Ar ôl cyfieithu mae’r ddyfais yn gweld ffynhonnell yn 10.62.0.0/24. Mae ei hateb yn mynd i’w phorth diofyn, sef llwybrydd y LAN, nid y porth VPN, oni bai bod rhywbeth yn dweud fel arall wrthi. Mae dau drefniad yn trwsio hynny, ac nid ydynt yn gyfwerth. Mae llwybr ar y ddyfais neu ar lwybrydd y LAN yn anfon 10.62.0.0/24 i 172.21.4.10 gan gadw ffynhonnell y cleient. Mae cyfieithiad ffynhonnell cyfyngedig yn cuddio’r cleient y tu ôl i gyfeiriad LAN y porth yn lle hynny.

ip route add 10.62.0.0/24 via 172.21.4.10 dev eth1
iptables -t nat -A POSTROUTING -s 10.62.0.0/24 -d 172.21.4.40 -o lan0 -p tcp --dport 80 -j SNAT --to-source 172.21.4.10

Dewiswch yn ôl yr hyn sydd ei angen ar y gwasanaeth. Mae polisi fesul cleient a logiau ystyrlon yn dymuno’r ffurf llwybrol; mae dyfais na ellir rhoi llwybr iddi, neu wasanaeth sy’n syml bod yn rhaid iddo weld cyfeiriad LAN, yn pwyntio at y ffurf gyfieithiedig. Peidiwch â chyrraedd am reol masquerade fyd-eang i wneud i un ateb weithio. Mae’n cuddio pob cleient rhag pob cyrchfan ac yn torri’n dawel y polisïau sy’n dibynnu ar gyfeiriadau ffynhonnell.

Peidiwch â phrofi o’r porth ei hun

Mae cais a gynhyrchir ar y porth i 10.62.0.1 yn gadael drwy’r gadwyn OUTPUT, nid drwy’r PREROUTING sy’n dod i mewn. Nid yw ei fethiant na’i lwyddiant yn dweud dim am y rheol sy’n wynebu’r cleient, a dyna sut mae pobl yn dod i’r casgliad bod rheol sy’n gweithio wedi torri.

conntrack -L | grep 172.21.4.40
tcpdump -ni any 'port 8080 or port 80'

Rhedwch gais cleient go iawn a darllenwch y ddau. Mae’r cofnod conntrack yn dangos y cyfieithiad a gymhwyswyd, ac mae’r daliadau’n dangos a groesodd y cais i’r LAN ac a ddaeth ateb yn ôl tuag at y tiwnel. Defnyddiwch gysylltiad newydd ar ôl newid rheolau, oherwydd mae cyflwr presennol yn cadw ei fapiad cynharach ac yn parhau i fethu’r hen ffordd. Yna cadarnhewch y sgwrs gyfan: mae cyfeiriad y ddyfais, y caniatâd anfon ymlaen a’r llwybr ateb i gyd yn disgrifio’r un llif.

Erthyglau cysylltiedig