Ẹ̀rọ àjẹ́ méjì lórí host kan náà dé LAN nípasẹ̀ afárá, òfin tí a gbé sínú ẹ̀wọ̀n ip forward sì fi kàńtà kan hàn tí kò gbé rárá. Àwọn férémù jẹ́ gidi, ìrìnàjò ń lọ, àti òfin kò sí lórí ọ̀nà rẹ̀. Fífi ọ̀nà méjì tí Linux ń fi ìrìnàjò afárá hàn wé ara wọn ṣàlàyé ìdákẹ́ jẹ́ẹ́ yìí, ó sì tún ṣàlàyé ìdí tí gbígbé module àtijọ́ kan wọlé fi jẹ́ ìdáhùn tí ó burú ju bí ó ti dàbí lọ.

Ọ̀nà méjì nípasẹ̀ host kan

Pákẹ́ẹ̀tì lè fi host yìí sílẹ̀ ní ọ̀nà méjì tí ó yàtọ̀ pátápátá, ìyàtọ̀ náà sì ń pinnu àwọn hook wo ni yóò rí i. Bí ibi tí ó ń lọ bá wà ní ìkọjá ibùdókọ̀ ti ara, tí wọ́n sì ń yí férémù náà padà láàrin ibùdókọ̀ méjì ti afárá, host yóò fi férémù Ethernet ránṣẹ́; a kì í béèrè kóòdù ọ̀nà, kò sì sí ìfò tí a tò ọ̀nà rẹ̀. Bí ibi tí ó ń lọ bá jẹ́ host fúnra rẹ̀, tàbí nẹ́tíwọ́kì tí a ń dé nípasẹ̀ interface tunnel, a ó tò ọ̀nà pákẹ́ẹ̀tì náà, àwọn hook ti ìpele IP sì ń ṣiṣẹ́ ní tòótọ́. Fi ìpínyà yìí sọ́kàn, nítorí gbogbo ìbéèrè tí ó tẹ̀le nípa ẹ̀wọ̀n àti ẹbí wá láti inú ọ̀nà wo nínú méjì tí férémù gbà.

Ìyàtọ̀ yẹn ni gbogbo ìtàn tí ó wà lẹ́yìn òfin tí kò ka nǹkan kan. Férémù tí ó gba afárá já láti veth9a1 dé enp3s0 ń kọjá afárá, kì í ṣe àkójọ IP, nítorí náà ẹ̀wọ̀n ip forward kò rí nǹkan láti bá mu. Àwọn orúkọ interface nínú àpẹẹrẹ àtijọ́ kò pinnu ọ̀nà tí o ní, ìdí ni yẹn tí ìgbésẹ̀ àkọ́kọ́ fi jẹ́ wíwo ìṣètò ibi-ìgbé àti kì í ṣe àkójọ òfin.

Tunnel ń fi kẹ́ẹ̀sì kẹta kún tí ó yẹ fún orúkọ. Ẹ̀rọ TUN ń fi àwọn pákẹ́ẹ̀tì IP lé host lọ́wọ́, nítorí náà a tò wọ́n ọ̀nà wọ́n sì ń kọjá ẹ̀wọ̀n IP ní tòótọ́, nígbà tí ẹ̀rọ TAP tí a so mọ́ afárá ń fi férémù lé lọ́wọ́, ó sì ń ṣe bí kẹ́ẹ̀sì afárá. Iru ẹ̀rọ ni ó pinnu, kì í ṣe orúkọ ọjà.

Fi ẹbí méjì tí wọ́n lè rí férémù tí ó gba afárá já wé ara wọn

Linux ń ṣètìlẹ́yìn ìṣẹ́ àyọkúrò afárá àbínibí nípasẹ̀ ẹbí bridge ti nftables, kò sì nílò module àtijọ́ kankan láti yẹ férémù tí ń fò wò kí ó sì sọn wọ́n nù. Ìwé ẹ̀kọ́ afárá ti kérnẹ́lì fúnra rẹ̀ ń fúnni ní ìmọ̀ràn yẹn ní tààràtà, èyí tí ó yẹ kí a mọ̀ kí àbájáde ìwádìí tó sọ fún ọ pé kí o gbé module wọlé.

Observation pointWhat it seesWhat it costs
nftables bridge family chainsEthernet frames forwarded between bridge ports, in both directionsRules must be written in bridge syntax with link-layer matches
Legacy br_netfilter plus an ip chainBridged IPv4 and IPv6 packets, re-exposed through IP-layer hooksExisting host rules may begin matching traffic they never saw before
inet chain for routed trafficPackets the host routes, including traffic arriving from a TUN deviceNo visibility into purely switched frames

Lílo àṣẹ nft dípò iptables kò fi òfin sí inú ẹbí tí ó tọ́ fúnra rẹ̀. Ẹ̀wọ̀n tí a polongo nínú ẹbí bridge ń rí férémù; ẹ̀wọ̀n tí a polongo nínú ip, ip6 tàbí inet kò rí wọn, bó ti wù kí ó jẹ́ bínárì wo ni ó dá a. Ẹbí jẹ́ ànímọ́ ẹ̀wọ̀n, kì í ṣe ti irinṣẹ́ tí ó tẹ̀ ẹ́.

Ọ̀nà àtijọ́ ń ṣiṣẹ́ lọ́nà mìíràn, ìdí sì ni yẹn tí a fi yẹ kí a fi wé ara wọn dípò kí a yan ẹ̀gbẹ́ kan nítorí àṣà. Gbígbé br_netfilter wọlé àti mímú àwọn ètò bridge-nf-call ṣiṣẹ́ tún ń fi ìrìnàjò IPv4 àti IPv6 tí ó gba afárá já hàn nípasẹ̀ àwọn hook ti ìpele IP, kí òfin iptables lasan lè bá a mu ní ìparí. Àwọn férémù kò yí padà; àkójọ hook tí wọ́n ń gbà yí padà, èyí tí ó túmọ̀ sí pé gbogbo òfin host tí ó wà ní ìsinsìnyí ní olùwò mìíràn báyìí.

Ka ọ̀nà tí ó ń ṣiṣẹ́ gan-an kí o tó fi òfin kún

Àwọn àṣẹ mẹ́ta ń pinnu ibi tí o wà: ohun tí afárá so mọ́, bóyá module àtijọ́ ń ṣiṣẹ́, àti àwọn ẹ̀wọ̀n wo tí ó ti wà nínú ẹbí bridge. Ṣe wọ́n kí o tó kọ nǹkan kan, nítorí ìdáhùn náà ni ó pinnu èwo nínú àwọn àpẹẹrẹ méjì tí ìwọ ń gbòòrò. Fíforí ìgbésẹ̀ yìí ni ọ̀nà tí òfin tí ó tọ́ fi ń parí sínú ẹ̀wọ̀n tí kò sí nǹkan tí ń kọjá.

bridge link show
lsmod | grep br_netfilter
nft list ruleset | grep -A4 "chain forward"

Ìjáde ń ya àwọn kẹ́ẹ̀sì ọ̀tọ̀ọ̀tọ̀, àwọn ibùdókọ̀ tí a kọ sísàlẹ̀ afárá sì ń sọ ibùdókọ̀ wo ni a ń yí. Àbájáde lsmod òfìfo túmọ̀ sí pé kò sí ìfarahàn kankan ní ìpele IP fún àwọn férémù tí ó gba afárá já; ẹ̀wọ̀n forward tí ó ti wà nínú ẹbí bridge túmọ̀ sí pé ẹni tí ó ni ìlànà ti wà tẹ́lẹ̀, òfin rẹ sì jẹ́ ti ibẹ̀ kì í ṣe ti ẹ̀wọ̀n tuntun tirẹ̀.

Lẹ́yìn náà fi òfin kan kún tí ó rọrùn láti kà padà, pẹ̀lú kàńtà àti láìyí ìdájọ́ padà, kí o sì gbé ìṣàn aṣojú kan kọjá afárá. Kàńtà tí ń gbé ń jẹ́rìí pé férémù náà dé òfin náà. Ìyẹn nìkan ni ó ń jẹ́rìí, nítorí náà tẹ̀lé e pẹ̀lú ọ̀nà tí a kọ̀ pẹ̀lú, nítorí ìlànà tí ó ń gba gbogbo nǹkan ń pèsè kàńtà tí ń gbé pẹ̀lú.

nft add rule bridge filter forward iifname "veth9a1" oifname "enp3s0" counter accept

Ibi tí module àtijọ́ ti ń yí ìhùwàsí padà

Mímú ọ̀nà àtijọ́ ṣiṣẹ́ lórí afárá tí ń ṣiṣẹ́ kì í ṣe ìgbésẹ̀ aláìṣojú-ẹ̀tọ́ ti fífi ìfarahàn kún. Àwọn òfin tí kò dé tẹ́lẹ̀ fún ìrìnàjò afárá di àdéhùn, pẹ̀lú àwọn òfin host tí a kọ fún interface mìíràn, ìlànà drop àìdábọ̀ nínú ẹ̀wọ̀n ip forward sì lè dé lójijì lórí àwọn férémù tí wọ́n máa ń kọjá láìfọwọ́ kàn. Lórí host tí a ń ṣàkóso nípasẹ̀ afárá yẹn, àbájáde ni títì pa tí kò ní kọ́ńsólù. Èyí kì í ṣe ipò ìkùnà àròsọ; ó jẹ́ àbájáde déédéé ti fífi àkójọ hook gbòòrò lórí ẹ̀rọ tí o ń dé nípasẹ̀ ọ̀nà tí o ṣẹ̀ṣẹ̀ gbòòrò.

Ìtẹ̀lé àìléwu jù ni láti pinnu ẹbí wo ni ó ni ìlànà, kọ àwọn òfin níbẹ̀, kí o sì pa ọ̀nà ìmúpadàbọ̀sípò tí ó dúró fúnra rẹ̀ mọ́ kí o tó yí sysctl kankan padà. Bí ẹbí méjì bá ní àwọn òfin, kọ ẹni tí ó ní àṣẹ sílẹ̀; ìlànà méjì tí ó ń wọ ara wọn ni ọ̀nà tí a fi ń gba pákẹ́ẹ̀tì ní ibi kan tí a sì ń sọn nù ní ibòmíì láìsí fáìlì kan pàápàá láti kà.

Ìpinya fúnra rẹ̀ ṣì nílò àpẹẹrẹ kíkún. Fífún orísun kan láyè láti dé ibi kan ń jẹ́rìí pé ìṣàn kan ń ṣiṣẹ́ nìkan, nígbà tí ohun tí a béèrè sábà máa ń jẹ́ pé VM kò lè dé ọ̀dọ̀ àwọn aládùúgbò rẹ̀ tàbí host. Àwọn kàńtà lórí àwọn òfin ìkọ̀ ṣe pàtàkì ju kàńtà lórí òfin ìgba lọ, nítorí kàńtà ìgba ni èyí tí o ti ń retí pé yóò gbé.

Níkẹyìn, pa kẹ́ẹ̀sì ìwọlé host mọ́ ọ̀tọ̀. Ìrìnàjò tí a ń darí sí IP ti afárá fúnra rẹ̀ ń dé input, kì í ṣe forward, òfin tí ó wà nínú forward kò sì ní rí i láé, ẹbí wo ni o bá yàn. Kẹ́ẹ̀sì mẹ́ta, ẹbí méjì, ẹ̀kọ́ kan: ọ̀nà ni ó ń pinnu hook, hook sì ń pinnu bóyá òfin rẹ wà pàápàá.

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