Bitta xostdagi ikkita virtual mashina ko'prik orqali LAN ga yetib boradi, ip forward zanjiriga qo'yilgan qoida esa hech qachon qimirlamaydigan hisoblagichni ko'rsatadi. Freymlar haqiqiy, trafik o'tmoqda, va qoida shunchaki uning yo'lida emas. Linux ko'prik trafigini ko'rsatishning ikki usulini solishtirish bu sukunatni tushuntiradi, hamda bitta eski modulni yuklash ko'ringanidan ham yomonroq javob ekanini tushuntiradi.

Bitta xost orqali ikki yo'l

Paket bu xostdan ikki juda boshqacha usulda chiqishi mumkin, va farq uni qaysi ilgaklar ko'rishini belgilaydi. Agar manzil jismoniy portning narigi tomonida bo'lsa va freym ko'prikning ikki porti o'rtasida kommutatsiya qilinsa, xost Ethernet freymini uzatadi; marshrutlash kodi so'ralmaydi va marshrutlangan sakrash yuz bermaydi. Agar manzil xostning o'zi bo'lsa yoki tunnel interfeysi orqali yetib boriladigan tarmoq bo'lsa, paket marshrutlanadi va IP qatlamining ilgaklari haqiqatan amal qiladi. Bu ayriqni yodda tuting, chunki zanjirlar va oilalar haqidagi har bir keyingi savol freym ikki yo'ldan qaysinisini tanlashidan kelib chiqadi.

Bu farq hech narsani sanamaydigan qoida ortidagi butun hikoyadir. veth9a1 dan enp3s0 ga ko'priklangan freym IP stekni emas, ko'prikni kesib o'tadi, shuning uchun ip forward zanjiri moslashtirish uchun hech narsa ko'rmaydi. Eski misoldagi interfeys nomlari sizda qaysi yo'l borligini belgilamaydi, shuning uchun birinchi qadam qoidalar to'plamiga emas, topologiyaga qarashdir.

Tunnel nomga loyiq uchinchi holatni qo'shadi. TUN qurilmasi IP paketlarni xostga yetkazadi, shuning uchun ular marshrutlanadi va haqiqatan IP zanjirlaridan o'tadi, ko'prikka ulangan TAP qurilmasi esa freymlarni yetkazadi va ko'prik holatidek tutadi. Qurilma turi hal qiladi, mahsulot nomi emas.

Ko'priklangan freymni ko'ra oladigan ikki oilani solishtiring

Linux nftables ning bridge oilasi orqali mahalliy ko'prik filtrlashni qo'llab-quvvatlaydi va uchishdagi freymlarni tekshirib tashlash uchun unga hech qanday eski modul kerak emas. Yadroning o'z ko'prik hujjatlari bu tavsiyani to'g'ridan-to'g'ri beradi, buni qidiruv natijasi sizga modul yuklashni aytishidan oldin bilish foydali.

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

iptables o'rniga nft buyrug'idan foydalanish qoidani o'z-o'zidan to'g'ri oilaga joylashtirmaydi. bridge oilasida e'lon qilingan zanjir freymlarni ko'radi; ip, ip6 yoki inet da e'lon qilingan zanjir ularni ko'rmaydi, qaysi binar yaratganidan qat'i nazar. Oila zanjirning xossasi, uni tergan asbobniki emas.

Eski yo'l boshqacha ishlaydi va shuning uchun odat bo'yicha tomon tanlash o'rniga solishtirish kerak. br_netfilter ni yuklash va bridge-nf-call sozlamalarini yoqish ko'priklangan IPv4 va IPv6 trafigini yana IP qatlamining ilgaklari orqali ochib beradi, shunda oddiy iptables qoidasi nihoyat unga mos kela oladi. Freymlar o'zgarmaydi; ular o'tadigan ilgaklar to'plami o'zgaradi, bu esa xostning har bir mavjud qoidasi endi yangi auditoriyaga ega ekanini bildiradi.

Qoida qo'shishdan oldin haqiqiy yo'lni o'qing

Uch buyruq qayerda ekaningizni aniqlaydi: ko'prik nimaga ulangan, eski modul faolmi va bridge oilasida qanday zanjirlar allaqachon mavjud. Biror narsa yozishdan oldin ularni ishga tushiring, chunki javob ikki loyihadan qaysinisini kengaytirayotganingizni belgilaydi. Bu qadamni o'tkazib yuborish — to'g'ri qoidaning hech narsa o'tmaydigan zanjirga tushish yo'li.

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

Chiqish holatlarni toza ajratadi. Ko'prik ostida sanab o'tilgan portlar qaysi interfeyslar kommutatsiya qilinayotganini aytadi; bo'sh lsmod natijasi ko'priklangan freymlarning IP qatlamida hech qanday ko'rinish yo'qligini bildiradi; bridge oilasining mavjud forward zanjiri siyosat egasi allaqachon borligini va qoidangiz o'zining yangi zanjiriga emas, o'sha yerga tegishli ekanini bildiradi.

So'ngra qayta o'qish oson bo'lgan bitta qoida qo'shing, hisoblagich bilan va hukmni o'zgartirmasdan, va bitta vakillik oqimini ko'prikdan o'tkazing. Harakatlanayotgan hisoblagich freym qoidaga yetganini isbotlaydi. Bu faqat shuni isbotlaydi, shuning uchun rad etilgan yo'l bilan ham davom eting, chunki hamma narsani qabul qiladigan siyosat ham harakatlanayotgan hisoblagich hosil qiladi.

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

Eski modul xulq-atvorni qayerda o'zgartiradi

Ishlayotgan ko'prikda eski yo'lni yoqish ko'rinish qo'shishning betaraf harakati emas. Ilgari ko'prik trafigi uchun yetib bo'lmaydigan qoidalar yetib boriladigan bo'ladi, jumladan boshqa interfeys uchun yozilgan xost qoidalari, va ip forward zanjiridagi standart drop siyosati birdaniga avval tegmasdan o'tgan freymlarga tatbiq etilishi mumkin. O'sha ko'prik orqali boshqariladigan xostda natija konsolsiz qulflanishdir. Bu faraziy nosozlik rejimi emas; bu hozirgina kengaytirgan yo'lingiz orqali yetib boradigan mashinada ilgaklar to'plamini kengaytirishning oddiy natijasidir.

Xavfsizroq ketma-ketlik siyosat qaysi oilaga tegishli ekanini hal qilish, qoidalarni o'sha yerda yozish va har qanday sysctl ni o'zgartirishdan oldin mustaqil tiklanish yo'lini saqlashdir. Agar ikki oila ham qoidalar tutsa, qaysi biri vakolatli ekanini hujjatlashtiring; ustma-ust tushadigan ikki siyosat paketning bir joyda qabul qilinishi va boshqa joyda tashlanishining, o'qish uchun bitta ham fayl bo'lmagan yo'lidir.

Izolyatsiyaning o'zi ham hali to'liq loyihani talab qiladi. Bitta manbani bitta manzilga ruxsat berish faqat bitta oqim ishlashini isbotlaydi, holbuki talab odatda VM o'z qo'shnilariga yoki xostga yetib bora olmasligidir. Rad etish qoidalaridagi hisoblagichlar qabul qilish qoidasidagi hisoblagichdan muhimroq, chunki qabul qilish hisoblagichi siz allaqachon harakatlanishini kutgan hisoblagichdir.

Nihoyat, xostning kirish holatini alohida saqlang. Ko'prikning o'z IP siga yo'naltirilgan trafik forward ga emas, input ga keladi, va forward dagi qoida qaysi oilani tanlasangiz ham uni hech qachon ko'rmaydi. Uch holat, ikki oila, bitta saboq: yo'l ilgakni belgilaydi, ilgak esa qoidangiz umuman mavjudmi yoki yo'qmi ekanini belgilaydi.

O'xshash maqolalar