iptables эрежеңиз көпүрө аркылуу өткөн VPN трафигин эмнеге эч качан көрбөйт
Көпүрө аркылуу өткөн кадрлар сиз көзөмөлдөп жаткан IP тизмегин айланып өтүшү мүмкүн. Дагы бир эреже кошконго чейин жергиликтүү bridge үй-бүлөсүн эски br_netfilter менен салыштырыңыз.
Бир хосттогу эки виртуалдык машина LANга көпүрө аркылуу жетет, ал эми ip forward тизмегине коюлган эреже эч качан кыймылдабаган эсептегичти көрсөтөт. Кадрлар чыныгы, трафик өтүп жатат, бирок эреже жөн эле анын жолунда эмес. Linux көпүрө трафигин көрсөтүүнүн эки ыкмасын салыштыруу ушул тынчтыкты түшүндүрөт жана бир эски модулду жүктөө көрүнгөндөн да начар жооп экенин түшүндүрөт.
Бир хост аркылуу эки жол
Пакет бул хосттон эки таптакыр башка жол менен чыга алат, жана айырма аны кайсы илмектер көрөрүн аныктайт. Эгер багыт физикалык порттун артында болсо жана кадр көпүрөнүн эки портунун ортосунда которулса, хост Ethernet кадрын жөнөтөт; маршруттоо коду суралбайт жана маршрутталган секирик болбойт. Эгер багыт хосттун өзү болсо же туннель интерфейси аркылуу жетүүчү тармак болсо, пакет маршрутталат жана IP катмарынын илмектери чынында эле колдонулат. Ушул бутакты эсте сактаңыз, анткени тизмектер жана үй-бүлөлөр тууралуу кийинки ар бир суроо кадрдын ушул эки жолдун кайсынысын тандашынан келип чыгат.
Бул айырма эч нерсе эсептебеген эреженин артындагы бүткүл окуя. veth9a1-ден enp3s0-ге чейинки көпүрөлөнгөн кадр IP стекти эмес, көпүрөнү кесип өтөт, ошондуктан ip forward тизмеги салыштырар эч нерсе көрбөйт. Эски мисалдагы интерфейс аттары сизде кайсы жол бар экенин аныктабайт, ошондуктан биринчи кадам эрежелер жыйындысына эмес, топологияга көз салуу.
Туннель атоого татырлык үчүнчү учурду кошот. TUN түзмөгү IP пакеттерин хостко берет, ошондуктан алар маршрутталат жана IP тизмектеринен чынында өтөт, ал эми көпүрөгө туташтырылган TAP түзмөгү кадрларды берет жана көпүрө учурундай жүрүм-турум көрсөтөт. Түзмөктүн түрү чечет, продукттун аты эмес.
Көпүрөлөнгөн кадрды көрө алган эки үй-бүлөнү салыштырыңыз
Linux nftablesтин bridge үй-бүлөсү аркылуу жергиликтүү көпүрө фильтрлөөнү колдойт жана учуп бараткан кадрларды текшерип таштоо үчүн ага эч кандай эски модул керек эмес. Ядронун өзүнүн көпүрө документтери бул сунушту түз берет, аны издөө натыйжасы модул жүктөөнү айтканга чейин билген оң.
| Observation point | What it sees | What it costs |
|---|---|---|
nftables bridge family chains | Ethernet frames forwarded between bridge ports, in both directions | Rules must be written in bridge syntax with link-layer matches |
Legacy br_netfilter plus an ip chain | Bridged IPv4 and IPv6 packets, re-exposed through IP-layer hooks | Existing host rules may begin matching traffic they never saw before |
inet chain for routed traffic | Packets the host routes, including traffic arriving from a TUN device | No visibility into purely switched frames |
iptables ордуна nft буйругун колдонуу эрежени өзүнөн өзү туура үй-бүлөгө койбойт. bridge үй-бүлөсүндө жарыяланган тизмек кадрларды көрөт; ip, ip6 же inetте жарыяланган тизмек аларды көрбөйт, аны кайсы бинардык жаратса да. Үй-бүлө — тизмектин касиети, аны терген куралдын эмес.
Эски жол башкача иштейт, ошондуктан адат боюнча тарап тандоонун ордуна салыштырган оң. br_netfilter жүктөп, bridge-nf-call жөндөөлөрүн күйгүзүү көпүрөлөнгөн IPv4 жана IPv6 трафигин IP катмарынын илмектери аркылуу кайра ачат, ошондуктан кадимки iptables эрежеси акыры ага дал келе алат. Кадрлар өзгөрбөйт; алар өткөн илмектер жыйындысы өзгөрөт, бул хосттун ар бир учурдагы эрежесинде эми жаңы көрүүчүлөр бар экенин билдирет.
Эреже кошконго чейин реалдуу жолду окуңуз
Үч буйрук кайда экениңизди аныктайт: көпүрө эмнеге туташкан, эски модул активдүүбү, жана bridge үй-бүлөсүндө кайсы тизмектер мурунтан бар. Бир нерсе жазганга чейин аларды иштетиңиз, анткени жооп эки долбоордун кайсынысын кеңейтип жатканыңызды аныктайт. Бул кадамды өткөрүп жиберүү — туура эреженин эч нерсе өтпөгөн тизмекке түшүү жолу.
bridge link show
lsmod | grep br_netfilter
nft list ruleset | grep -A4 "chain forward"
Чыгарылыш учурларды таза ажыратат. Көпүрөнүн астында тизилген порттор кайсы интерфейстер которулуп жатканын айтат; бош lsmod натыйжасы көпүрөлөнгөн кадрлардын IP катмарында эч кандай көрүнүү жок экенин билдирет; bridge үй-бүлөсүнүн бар forward тизмеги саясат ээси мурунтан бар экенин жана эрежеңиз өзүнүн жаңы тизмегине эмес, ошол жерге таандык экенин билдирет.
Андан кийин кайра окууга жеңил бир эреже кошуңуз, эсептегич менен жана өкүмдү өзгөртпөй, жана бир өкүлдүк агымды көпүрө аркылуу өткөрүңүз. Кыймылдаган эсептегич кадр эрежеге жеткенин далилдейт. Ал ушуну гана далилдейт, ошондуктан баш тартылган жол менен да улантыңыз, анткени баарын кабыл алган саясат да кыймылдаган эсептегич берет.
nft add rule bridge filter forward iifname "veth9a1" oifname "enp3s0" counter acceptЭски модул жүрүм-турумду кайда өзгөртөт
Иштеп жаткан көпүрөдө эски жолду күйгүзүү — көрүнүү кошуу деген бейтарап аракет эмес. Көпүрө трафиги үчүн мурун жеткиликсиз болгон эрежелер жеткиликтүү болот, анын ичинде башка интерфейс үчүн жазылган хост эрежелери, жана ip forward тизмегиндеги демейки drop саясаты мурун тийбей өткөн кадрларга капысынан колдонулушу мүмкүн. Ошол көпүрө аркылуу башкарылган хостто натыйжа консолсуз кулпулануу болот. Бул гипотетикалык бузулуу режими эмес; бул жаңы эле кеңейткен жол менен жеткен машинада илмектер жыйындысын кеңейтүүнүн кадимки натыйжасы.
Коопсузураак тартип — саясат кайсы үй-бүлөгө таандык экенин чечүү, эрежелерди ошол жерге жазуу жана кандайдыр бир sysctl өзгөртүүнүн алдында көз карандысыз калыбына келтирүү жолун сактоо. Эгер эки үй-бүлө тең эреже кармаса, кайсынысы ыйгарымдуу экенин документтештириңиз; кабатталган эки саясат — пакеттин бир жерде кабыл алынып, экинчи жерде ташталышынын, окуй турган бир да файл жок жолу.
Обочолонуу өзү дагы толук долбоорду талап кылат. Бир булакты бир багытка уруксат кылуу бир гана агымдын иштешин далилдейт, ал эми талап адатта VM өзүнүн кошуналарына же хостко жете албоо болуп саналат. Баш тартуу эрежелериндеги эсептегичтер кабыл алуу эрежесинин эсептегичинен маанилүү, анткени кабыл алуу эсептегичи — кыймылдаарын мурунтан күткөн эсептегич.
Акырында, хосттун кирүү учурун өзүнчө кармаңыз. Көпүрөнүн өз IPсине багытталган трафик inputка келет, forwardка эмес, жана forwardтагы эреже аны кайсы үй-бүлөнү тандасаңыз да эч качан көрбөйт. Үч учур, эки үй-бүлө, бир сабак: жол илмекти аныктайт, ал эми илмек эрежеңиздин таптакыр бар-жогун аныктайт.