Mae osgoi cgroup yn nftables hefyd angen trwsio'r cyfeiriad ffynhonnell
Mae marcio un cgroup yn ei anfon i dabl arall, ac mae'r socket yn cadw'r cyfeiriad oedd ganddo'n barod. Dosbarthu, llwybro a chyfieithu fel tri cham ar wahân.
Marcio traffig o un cgroup yw'r rhan hawdd. Rhaid i dri phenderfyniad ar wahân alinio cyn i un cymhwysiad adael drwy'r rhyngwyneb ffisegol tra bo popeth arall yn aros yn y twnnel: pa socket sy'n perthyn i'r eithriad, pa chwiliad llwybro y mae'r marc yn ei sbarduno, a pha gyfeiriad ffynhonnell y mae'r pecyn yn ei gario pan ddaw allan. Mae'r rhan fwyaf o'r ymdrechion aflwyddiannus yn cael yr un cyntaf yn iawn, yn cael yr ail yn hanner, ac yn peidio byth ag edrych ar y trydydd.
Tri phenderfyniad, nid un
Mae dosbarthu'n ateb pwy sy'n cael ei eithrio. Mae llwybro'n ateb i ble mae'r pecyn wedi'i farcio'n mynd yn lle hynny. Mae dewis ffynhonnell yn ateb beth fydd y pen draw yn ei weld a ble dylai'r ateb ddychwelyd.
Mae'r rhain yn methu'n annibynnol. Gall pecyn gael ei ddosbarthu, ei ail-lwybro i'r rhyngwyneb ffisegol, a dal i gario cyfeiriad preifat na all unrhyw lwybrydd lanaf ddychwelyd, sy'n cynhyrchu amser i fyny sy'n edrych yn union fel bloc mur tân. Nid oes unrhyw beth yng ngham y dosbarthu yn eich rhybuddio am hynny. Nid oes dim yng ngham y llwybro chwaith.
Mae'r drefn yn bwysig hefyd. Mae dosbarthu'n digwydd pan gynhyrchir y pecyn, mae llwybro'n digwydd ar ôl hynny, ac mae cyfieithu'n digwydd ar y pwynt allanfa.
Os na allwch enwi pa un o'r tri cham sydd wedi torri, nid ydych yn dadfygio, rydych yn aildrefnu rheolau ac yn gobeithio.
Parwch cgroup a fydd yn dal i fodoli yfory
Gall nftables brofi aelodaeth socket o cgroup v2, sy'n wirioneddol ddefnyddiol oherwydd ei fod yn dilyn y broses yn hytrach na'r gyrchfan. Y fagl yw'r dynodwr. Mae cymhwysiad pen-desg a lansiwyd o ddewislen yn aml yn byw mewn scope dros dro y mae ei enw'n newid ar y lansiad nesaf.
nft list ruleset
systemctl status session.slice 2>/dev/null
cat /proc/self/cgroupMae copïo enw scope o un sesiwn a'i galedgodio yn cynhyrchu rheol sy'n gweithio heddiw ac yn peidio â chyfateb yn dawel yfory. Rhowch y cymhwysiad mewn cyd-destun gweithredu bwriadol, sefydlog yn lle hynny, fel scope neu unit penodol rydych yn ei reoli, a pharwch â hwnnw. Yna mae'r rheol yn goroesi ailgychwynni ac uwchraddiadau pecynnau. Mae hefyd yn dod yn rhywbeth y gall cydweithiwr resymu amdano heb eich hanes sesiynau.
Byddwch yn fanwl hefyd ynghylch pa fecanwaith rydych yn ei ddefnyddio. Mae dosbarthu net_cls cgroup v1 a pharu socket cgroup v2 yn bethau gwahanol, ac nid yw maes ag enw tebyg mewn dogfennaeth yn eu gwneud yn gyfnewidiol.
Cadwyn o fath route sy'n sbarduno'r ail chwiliad
Ar gyfer traffig a gynhyrchir yn lleol, math y gadwyn sy'n penderfynu a oes unrhyw beth yn digwydd ar ôl gosod y marc. Gall cadwyn allanfa o fath filter farcio pecyn a bydd y cnewyllyn yn parhau i ddefnyddio'r llwybr a ddewisodd yn barod. Cadwyn o fath route yw'r mecanwaith sy'n gofyn am chwiliad newydd.
table inet bypass {
chain mark {
type route hook output priority mangle; policy accept;
socket cgroupv2 level 2 "app.slice" meta mark set 0x1 comment "app bypass"
}
}
ip rule add fwmark 0x1 lookup 200
ip route add default via 203.0.113.1 dev wlan0 table 200Yna mae angen rheol polisi sy'n ei hanfon i dabl ar y marc, ac mae angen i'r tabl hwnnw fod yn gyflawn: llwybr diofyn, unrhyw gyrchfannau lleol y mae'r cymhwysiad yn dal i'w hangen, a phorth lanaf sy'n ateb go iawn.
Dewiswch werth y marc yn fwriadol. Mae WireGuard yn defnyddio ei fwmark ei hun ar gyfer traffig cludiant allanol, a gall glanio ar yr un rhif ar ddamwain ymyrryd ag eithriad llwybro'r twnnel ei hun mewn ffyrdd sy'n boenus i'w diagnosio.
Nid yw'r cyfeiriad ffynhonnell yn dilyn y llwybr
Mae socket sydd eisoes wedi dewis cyfeiriad ffynhonnell ar gyfer llwybr y twnnel yn cadw'r cyfeiriad hwnnw ar ôl yr ail-lwybro. Nid oes unrhyw beth yn y newid llwybro yn ei ailysgrifennu, a dyna pam mae'r pecyn yn gadael y rhyngwyneb ffisegol â ffynhonnell breifat na all y rhwydwaith lanaf ei dychwelyd.
Y symptom gweladwy yw cymhwysiad sy'n ymddangos fel petai'n anfon data ac na fydd byth yn derbyn ateb, a chofnod mur tân nad yw'n dangos dim oherwydd na ddaeth y pecyn yn ôl byth.
Y cywiriad cul yw rheol cyfieithu ffynhonnell wedi'i chyfyngu i farc y cymhwysiad hwnnw a'i wir ryngwyneb allanfa, wedi'i integreiddio â pha bynnag NAT sy'n bodoli'n barod yn hytrach na'i ddisodli:
table inet bypass {
chain postrouting {
type nat hook postrouting priority srcnat; policy accept;
meta mark 0x1 oifname "wlan0" masquerade
}
}Cyfieithwch yr eithriad a dim byd arall. Mae rheol masquerade gyffredinol yn trwsio'r symptom ac yn dinistrio'ch gallu i ddweud pa draffig a gymerodd pa lwybr. Parwch ar y marc, y gwir ryngwyneb allanfa ac, os gallwch, gyfeiriad y cymhwysiad ei hun. Mae rheolau eang yn hawdd eu hysgrifennu ac yn bron yn amhosibl eu harchwilio'n ddiweddarach.
Beth sy'n dal i ddianc rhag yr eithriad
Gall datrys enwau ddod o broses resolver ar wahân mewn cgroup gwahanol, felly nid yw dosbarthu socket y porwr yn dosbarthu ei chwiliadau. Os yw ymholiadau'r resolver yn aros yn y twnnel tra bo'r cysylltiad yn gadael y tu allan iddo, gall atebion split-horizon beidio â chyfateb â'r llwybr. Mae'r annghydweddiad hwnnw'n cynhyrchu methiannau sy'n edrych fel bygiau DNS ac nad ydynt.
Mae prosesau plentyn yn etifeddu'r cgroup yn y rhan fwyaf o osodiadau, ond nid yw helper sy'n symud ei hun i'w scope ei hun yn gwneud hynny. Gwiriwch yn hytrach na thybio, yn enwedig ar gyfer unrhyw beth sy'n ail-weithredu ei hun.
Yn olaf, penderfynwch beth ddylai ddigwydd pan fydd y twnnel i lawr. Mae eithriad sy'n troi'n dawel yn osgoi llwyr yn agwedd diogelwch wahanol i un sy'n methu ar gau, a dim ond un ohonynt yw'r hyn a olygech.