Ap lleol, rheol VPN: pam nad yw eich cadwyn FORWARD byth yn tanio
Mae proses ar y peiriant yn defnyddio OUTPUT, nid FORWARD. Dewiswch y bachyn yn y namespace cywir, yna penderfynwch a yw marc neu lwybr plaen yn ddigon.
Rydych yn ychwanegu rheol ar gyfer traffig VPN yng nghadwyn FORWARD, yn rhedeg y cais o’r un blwch Linux, ac mae’r rhifydd yn aros ar sero. Mae’r rheol yn ôl pob tebyg yn gywir. Ni chymerodd y pecyn y llwybr hwnnw erioed, oherwydd nid yw cais a grëir ar y peiriant ei hun yn cael ei anfon ymlaen ganddo. Mae olrhain bywyd y pecyn o’r soced i’r wifren yn egluro pam, ac i ble y mae’r rheol yn perthyn yn lle hynny.
Darganfyddwch ble ganwyd y pecyn
Mae trefn bachyn Netfilter yn gwahanu tri achos, a dim ond un ohonynt yn cynnwys FORWARD:
| Origin | Path | Hook that sees it |
|---|---|---|
| Local process | OUTPUT then POSTROUTING | OUTPUT, POSTROUTING |
| Addressed to a local service | PREROUTING then INPUT | PREROUTING, INPUT |
| Received for another host | PREROUTING, FORWARD, POSTROUTING | FORWARD |
Mae ap lleol yn dechrau yn llwybr OUTPUT, oherwydd mae’r cnewyllyn eisoes wedi sefydlu bod y pecyn yn tarddu yma ac nad yw byth yn ymgeisydd i’w anfon ymlaen. Nid yw creu twnnel yn newid y dosbarthiad hwnnw; dyfais yw’r twnnel y gall y pecyn adael drwyddi, nid cam sy’n troi allbwn lleol yn draenid.
Dau becyn, un stori
Unwaith y bydd y twnnel i fyny, mae pecyn mewnol yr ap a’r pecyn allanol wedi’i amgryptio’n wrthrychau gwahanol. Mae’r pecyn mewnol yn cario’r cyrchfan a’r llwyth a ddewisodd yr ap. Mae’r pecyn allanol yn cario cryptograff i gyfeiriad a phorth y cymar, a hwnnw yw’r un sy’n croesi’r rhyngwyneb ffisegol mewn gwirionedd.
Mae eich polisi yn ymwneud ag un ohonynt, ac mae dewis yr un anghywir yn rheswm cyffredin pam y mae rheol yn ymddangos fel pe bai’n gwneud dim. Mae rheol sy’n cyfateb i gyfeiriad allanol y cymar yn gweld pob pecyn twnnel yn gyfartal, beth bynnag y mae’r ap y tu mewn yn ei wneud. Mae rheol sy’n cyfateb i gyrchfan fewnol yn gweld y traffig sy’n bwysig i chi, a dim ond os yw’r pecyn hwnnw’n cyrraedd y bachyn y gosodwyd y rheol arno y bydd yn tanio.
Mae namespace yn symud y ffin
Mae cynhwysydd yn gwneud hyn yn anoddach heb newid yr egwyddor. Allbwn lleol tu mewn i namespace rhwydwaith y cynhwysydd yw cais yr ap. Mae’r gwesteiwr yn derbyn y traffig hwnnw ar ryngwyneb Ethernet rhithwir ac yn gallu ei anfon ymlaen, felly gall rheol FORWARD ar y gwesteiwr fod yn ystyrlon er nad yw’r broses a greodd y cais erioed wedi cyffwrdd cadwyn OUTPUT y gwesteiwr.
Cyn dewis bachyn, sefydlwch ble y mae’r set rheolau a’r twnnel yn byw mewn gwirionedd. Twnnel y tu mewn i’r cynhwysydd, twnnel ar y gwesteiwr gyda’r cynhwysydd wedi’i lwybro drwyddo, a thwnnel mewn namespace ar wahân yw tair topoleg wahanol gyda thri lleoliad rheol gwahanol. Darllenwch y rheolau y tu mewn i’r namespace sy’n berchen ar y ddyfais, nid yn y rhai diofyn yn unig.
Gofynnwch a oes angen marc arnoch o gwbl
Os mai’r nod yw anfon un rhagddodiad cyrchfan trwy’r twnnel, efallai y bydd llwybr ar gyfer y rhagddodiad hwnnw’n ddigon. Edrychwch ar y llwybrau effeithiol yn gyntaf, gan gynnwys unrhyw beth a wthiodd y gweinydd: mae llwybr diofyn wedi’i ailgyfeirio’n anfon llawer mwy o draffig trwy’r VPN na’r polisi cul a oedd gennych mewn golwg, ac ni fydd unrhyw faint o farcio’n gwneud y canlyniad yn cyfateb i’r bwriad.
Mae dosbarthu’n angenrheidiol pan fydd y penderfyniad yn dibynnu ar rywbeth na all llwybr ei fynegi, fel y ffynhonnell, y defnyddiwr neu’r broses. Ar gyfer traffig a dderbynnir, mae marcio yn PREROUTING yn gweithio. Ar gyfer traffig lleol, rhaid i’r marcio ddigwydd mewn cam allbwn a all sbarduno chwiliad llwybr newydd ar ôl i’r marc gael ei osod. Gyda nftables cadwyn o fath route ar y bachyn allbwn yw hynny; bydd cadwyn hidlo allbwn arferol yn gosod y gwerth ac yn gadael y llwybr heb ei newid.
Gyda iptables, mae’r cyfateb yn byw yn nhrefniant mangle OUTPUT, ac mae’r un gofyniad yn berthnasol: rhaid ailystyried y penderfyniad llwybro ar ôl i’r marc fodoli. Yna rhaid i reol bolisi ddefnyddio’r marc a phwyntio at dabl sy’n cynnwys llwybr defnyddiadwy. Mae gosod marc conntrack yn drydydd weithrediad, ar wahân; mae’n storio gwerth ar y llif ac nid yw ynddo’i hun yn rhoi’r gwerth hwnnw ar y pecyn cyfredol i lwybro ei ddarllen.
Gwiriwch y chwiliad a’r rhifydd gyda’i gilydd
nft list ruleset
ip route get 198.51.100.25
ip route get 198.51.100.25 mark 0x1
Mae’r cyfeiriad a’r marc yn ddarluniadol, ac mae’r ddau ymholiad llwybr yn ateb cwestiynau gwahanol. Mae’r ail yn gofyn beth fyddai’r cnewyllyn yn ei wneud pe bai pecyn yn cario’r marc hwnnw; nid yw’n dangos bod eich set rheolau yn pennu un. Triniwch ef fel prawf rhagdybiaeth, nid fel tystiolaeth bod y polisi’n gweithio.
Yna rhedwch gais diniwed a gwylio dwy beth ar unwaith: y rhifydd ar y bachyn a ddewisoch, a’r allanfa a gymerodd y pecyn mewn gwirionedd. Os yw’r rhifydd yn symud ac mae’r pecyn yn gadael yn rhywle arall, mae’r marc neu’r tabl yn anghywir. Os nad yw’r un ohonynt yn symud, nid yw’r pecyn yn cyrraedd y bachyn hwnnw o gwbl, a’r namespace neu’r llwybr yw’r cwestiwn nesaf.
Yn olaf, cwmpaswch y prawf i’r hyn y gall y mecanwaith ei fynegi. Nid yw un llwybr ar gyfer un cyfeiriad yn dod yn bolisi parhaol ar gyfer gwasanaeth y mae ei gyfeiriadau’n cylchdroi. Penderfynwch gwmpas y pecynnau yn gyntaf, yna gwiriwch a all y dyluniad llwybro a marcio ddal y cwmpas hwnnw ar ôl ailgysylltu.