Síṣàmì ìrìnàjò láti cgroup kan ni apá tí ó rọrùn. Ìpinnu mẹ́ta ọ̀tọ̀ọ̀tọ̀ gbọ́dọ̀ bára wọn mu kí ohun èlò kan lè jáde nípasẹ̀ ojú-ọ̀nà ti ara nígbà tí gbogbo ohun mìíràn wà ní inú ọ̀nà àbẹ́wọ̀: socket wo ni ó wà nínú àyọkùrò, ìwádìí ipa wo ni àmì náà ń dá sílẹ̀, àti àdírẹ́sì orísun wo ni pákẹ́tì ń gbé nígbà tí ó jáde. Ọ̀pọ̀ àwọn ìgbìyànjú tí kùnà máa ń ṣe èkíní dáadáa, ìdajì èkejì, wọn kìí sì wo ẹ̀kẹta rárá.

Ìpinnu mẹ́ta, kì í ṣe ọ̀kan

Ìpín ń dáhùn ẹni tí a yọ kúrò. Ìtọ́sọ́nà ń dáhùn ibi tí pákẹ́tì tí a sàmì ń lọ dípò. Yíyàn orísun ń dáhùn ohun tí ẹ̀gbẹ́ jínjìn yóò rí àti ibi tí ìdáhùn gbọ́dọ̀ padà sí.

Àwọn wọ̀nyí ń kùnà lọ́tọ̀ọ̀tọ̀. Pákẹ́tì lè jẹ́ kí a pín, kí a tún ọ̀nà rẹ̀ darí sí ojú-ọ̀nà ti ara, kí ó sì ṣì gbé àdírẹ́sì aládàáni tí kò sí olùtọ́sọ́nà òkè tí ó lè padà rán, èyí tí ń mú àkókò tí ó lè tán tí ó dà bí ìdídì ògiri iná. Kò sí ohun kan nínú ìgbésẹ̀ ìpín tí ń kìlọ̀ fún ọ nípa èyí. Kò sí ohun kan nínú ìgbésẹ̀ ìtọ́sọ́nà pẹ̀lú.

Ìtẹ̀lé ọ̀nà náà ṣe pàtàkì pẹ̀lú. Ìpín ń ṣẹlẹ̀ nígbà tí a bá ṣẹ̀dá pákẹ́tì, ìtọ́sọ́nà ń ṣẹlẹ̀ lẹ́yìn náà, ìtumọ̀ sì ń ṣẹlẹ̀ ní ibi ìjáde.

Bí o kò bá lè dárúkọ èwo nínú àwọn ìpele mẹ́ta náà tí ó ti bàjẹ́, ìwọ kò ń ṣàtúnṣe àṣìṣe, ìwọ ń tún àwọn òfin ṣe àti ní ìrètí.

Bá cgroup tí yóò ṣì wà lọ́la mu

nftables lè yẹ̀wò ìkópa cgroup v2 ti socket kan, èyí tí ó wúlò gan-an nítorí pé ó ń tẹ̀lé ìlànà dípò ibi tí ó ń lọ. Ìdẹkùn náà ni ìdánimọ̀. Ohun èlò desktop tí a ṣí láti akojọ yoo máa gbé nínú scope ìgbà díẹ̀ tí orúkọ rẹ̀ ń yí padà ní ìgbà ìbẹ̀rẹ̀ tójọ.

nft list ruleset
systemctl status session.slice 2>/dev/null
cat /proc/self/cgroup

Dídàákọ orúkọ scope láti ìpàdé kan àti kíkọ ọ́ lọ́nà tí ó le ń ṣẹ̀dá òfin tí ó ń ṣiṣẹ́ lónìí tí yóò sì dákẹ́ kò bá mu mọ́ lọ́la. Dípò bẹ́ẹ̀, fi ohun èlò náà sínú àyíká ìṣiṣẹ́ tí ó dúró ṣinṣin tí a mọ̀ọ́mọ̀ yàn, bí scope tàbí unit pàtàkì tí ìwọ ń ṣàkóso, kí o sì bá a mu. Nígbà náà òfin náà yóò ye àtúnbẹ̀rẹ̀ àti àtúnṣe àwọn àkójọ. Yóò sì di ohun tí ẹlẹgbẹ́ lè ronú lé lórí láìsí ìtàn ìpàdé rẹ.

Jẹ́ kí ó ṣe kedere pẹ̀lú irú ọ̀nà tí ìwọ ń lò. Ìpín net_cls ti cgroup v1 àti ìbámu socket ti cgroup v2 jẹ́ ohun ọ̀tọ̀ọ̀tọ̀, pápá tí ó ní orúkọ kan náà nínú àwọn ìwé kò sì mú wọn di ohun tí a lè pààrọ̀.

Ẹ̀wọ̀n route ni ó ń dá ìwádìí kejì sílẹ̀

Fún ìrìnàjò tí a dá ní àdúgbò, irú ẹ̀wọ̀n ni ó ń pinnu bóyá ohun kan yóò ṣẹlẹ̀ lẹ́yìn tí a ti fi àmì sílẹ̀. Ẹ̀wọ̀n output irú filter lè sàmì pákẹ́tì, kẹ̀nẹ́lì yóò sì ń lò ipa tí ó ti yàn tẹ́lẹ̀. Ẹ̀wọ̀n irú route ni ọ̀nà tí ń béèrè ìwádìí tuntun.

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 200

Lẹ́yìn náà àmì náà nílò òfin ìlànà tí ń rán an sí tábìlì, tábìlì náà sì gbọ́dọ̀ pé: ipa àìlórúkọ, àwọn ibi àdúgbò tí ohun èlò ṣì nílò, àti ẹnubodè òkè tí ó ń dáhùn gan-an.

Yan iye àmì náà pẹ̀lú ìmọ̀. WireGuard ń lo fwmark tirẹ̀ fún ìrìnàjò gbígbé jáde, bí a bá sì ṣe àṣìṣe kí a de orí nọ́mbà kan náà lè dí ìyọkùrò ìtọ́sọ́nà ti ọ̀nà àbẹ́wọ̀ fúnra rẹ̀ lọ́nà tí ó ṣòro láti yẹ̀wò.

Àdírẹ́sì orísun kò tẹ̀lé ipa

Socket tí ó ti yan àdírẹ́sì orísun fún ọ̀nà àbẹ́wọ̀ yóò pa àdírẹ́sì náà mọ́ lẹ́yìn àtúntọ́sọ́nà. Kò sí ohun kan nínú ìyípadà ipa tí ń kọ ọ́ lẹ́ẹ̀kan sí i, ìdí ni pé pákẹ́tì ń jáde ní ojú-ọ̀nà ti ara pẹ̀lú orísun aládàáni tí nẹ́tíwọ́kì òkè kò lè padà rán.

Àmì tí ó hàn ni ohun èlò tí ó dà bí ẹni ń fi dátà ránṣẹ́ tí kò sì gba ìdáhùn rárá, àti àkọsílẹ̀ ògiri iná tí kò fi ohun kan hàn nítorí pé pákẹ́tì kò padà wá rárá.

Àtúnṣe tí ó há ní òfin ìtumọ̀ orísun tí ó ní ààlà sí àmì ohun èlò yẹn àti ojú-ọ̀nà ìjáde gidi rẹ̀, tí a so pọ̀ mọ́ NAT tí ó ti wà tẹ́lẹ̀ dípò kí a rọ́pò rẹ̀:

table inet bypass {
  chain postrouting {
    type nat hook postrouting priority srcnat; policy accept;
    meta mark 0x1 oifname "wlan0" masquerade
  }
}

Tumọ̀ àyọkùrò náà nìkan, kì í ṣe ohun mìíràn. Òfin masquerade gbogbogbò ń tún àmì náà ṣe, ó sì ń pa agbára rẹ láti sọ irú ìrìnàjò tí ó gba ipa wo run. Bá àmì, ojú-ọ̀nà ìjáde gidi àti, bí ó bá ṣeé ṣe, àdírẹ́sì ohun èlò fúnra rẹ̀ mu. Àwọn òfin gbòòrò rọrùn láti kọ, ó sì fẹ́rẹ̀ẹ́ ṣòro láti ṣàyẹ̀wò lẹ́yìn.

Ohun tí ó ṣì ń bọ́ kúrò nínú àyọkùrò

Ìtúpalẹ̀ orúkọ lè wá láti ìlànà resolver ọ̀tọ̀ọ̀tọ̀ nínú cgroup mìíràn, nítorí náà pípín socket aṣàwákiri kò pín àwọn ìwádìí rẹ̀. Bí àwọn ìbéèrè resolver bá wà nínú ọ̀nà àbẹ́wọ̀ nígbà tí ìsopọ̀ ń jáde síta, àwọn ìdáhùn split-horizon lè má bá ipa mu. Àìbámu yẹn ń ṣẹ̀dá àwọn àìsàn tí ó dà bí àṣìṣe DNS tí kì í ṣe bẹ́ẹ̀.

Àwọn ìlànà ọmọ ń jogún cgroup nínú ọ̀pọ̀ ètò, ṣùgbọ́n olùrànlọ́wọ́ tí ó ń gbé ara rẹ̀ lọ sínú scope tirẹ̀ kò jogún. Yẹ̀wò dípò kí o ro àròwá, pàápàá fún ohunkóhun tí ń tún ara rẹ̀ ṣiṣẹ́.

Níkẹyìn, pinnu ohun tí ó yẹ kí ó ṣẹlẹ̀ nígbà tí ọ̀nà àbẹ́wọ̀ bá wọlẹ̀. Àyọkùrò tí ó di bypass kíkún ní dídákẹ́ jẹ́ ipò ààbò tí ó yàtọ̀ sí èyí tí ó ń ti nígbà ìkùnà, ọ̀kan nínú wọn nìkan sì ni ohun tí ìwọ ní lọ́kàn.

Àwọn àpilẹ̀kọ tó jọra