Sizda ikkita uplink bor va ip -6 route show ikkalasida ham bir xil keyingi hopni chiqaradi: default via fe80::1 dev uplink0 va default via fe80::1 dev uplink1. Bu takroriy manzil to'qnashuvi emas va yalang'och keyingi hopni fe80::1 siyosat jadvaliga nusxalash yadroga qaysi havolani nazarda tutganingizni aytmaydi. Haqiqiy savol alomat ko'rsatganidan torroq: ikkinchi jadvalga bitta havola kerakmi yoki ikkalasi, va qayta yuklashdan keyin bu marshrutlarni nima tirik saqlaydi. Tartib bilan tekshiriladigan uchta shart ko'pini hal qiladi.

O'sha fe80::1 ikki xil qo'shni

Havola-lokal manzillar bitta havola bilan chegaralangan, shuning uchun fe80::1 ikki marta chiqarilgan bitta manzil emas; bu bir xil qo'shimchani tasodifan baham ko'radigan ikki qo'shni. Zona indeksi xost qaysinisini nazarda tutayotganini aytish usuli, shuning uchun fe80::1%uplink0 va fe80::1%uplink1 yadro uchun turli manzillar, va bu qo'shimcha hech qachon uzoq routerga bormaydi. RFC 4007 buning ortidagi zona modelini tasvirlaydi, shuning uchun siyosat jadvali har bir havola-lokal keyingi hop bilan birga qurilmani olib yurishi kerak.

Bir xostning raqamli zona ID sini shablonga nusxalaydigan VPN konfiguratsiya generatori lokal kontekstni manzilning bir qismidek qabul qiladi va u yozgan fayl interfeys nomlari yoki indekslari boshqacha bo'lgan har bir mashinada noto'g'ri. Siyosat jadvali ikki havolani bittaga birlashtirmaydi: marshrutlangan VPN tarmoqlar orasida paket uzatadi, lekin uzoq Ethernet qo'shnisining havola-lokal identifikatorini tunnel orqali olib o'tmaydi, shuning uchun havola-lokal trafik o'z havolasida qoladi.

Qurilmani olib tashlang va marshrut yozib bo'lmaydigan bo'ladi. ip -6 route add default via fe80::1 table 200 shlyuzni hal qila olmaydi va iproute2 uni Error: Nexthop has invalid gateway. xatosi bilan rad etadi. dev uplink0 qo'shing va buyruq muvaffaqiyatli bo'ladi, chunki keyingi hopni o'sha ikki qo'shnining biriga bog'laydigan narsa qurilmaning o'zi. Qurilma ayta olmaydigan narsa — uplink0 bu jadval uchun to'g'ri havolami, va boshqa xostdan nusxalangan marshrut o'sha xostning interfeys nomlarini birga olib keladi, haqiqiy xatolar ham shu yerdan chiqadi.

Birinchi shart: jadvalda bitta havola yoki ikkita

Ikkinchi uplink nima uchunligidan boshlang. Agar ikkala havola bir xil trafikni olib yursa va biri zaxira bo'lsa, muqobil jadval ikkala shlyuzni turli metrikalar bilan saqlashi kerak: bir xil manzillar, bitta afzal yo'l, bitta aniq ikkinchi tanlov. Agar uplinklar turli trafik turli provayderlar orqali chiqishi kerakligi uchun yoki bu bo'lingan tunnel bo'lib, unda bir qism trafik VPN ni chetlab o'tsa va qolgani ichkarida qolsa mavjud bo'lsa, bu ikki havola bir jadvalga umuman tegishli emas. Ular ikkita jadvalga tegishli, ularni qoida tanlaydi va qoida tunnelni emas, jadvalni tanlaydi: chetlab o'tuvchi trafik marshrutlashdan oldin belgilanadi va aynan belgi uni ikkinchi jadvalga yuboradi.

O'sha ikkinchi holatda qoida jadvalga qachon murojaat qilinishini, marshrut esa paket qayerga ketishini hal qiladi:

ip -6 rule add fwmark 0x2 table 201
ip -6 route add default via fe80::1 dev uplink1 metric 100 table 201
ip -6 route add 2001:db8:100::/48 dev uplink1 metric 100 table 201
ip -6 route show table 201

Hech bir obyekt boshqasini almashtirmaydi va faqat standart marshrutni saqlaydigan jadval ham o'z shlyuzini hal qila olmasligi mumkin. Agar qo'shish rad etilsa yoki marshrut bor bo'lsa-da foydalanib bo'lmasa, o'sha interfeysning ulangan prefiksini ayni jadvalga qo'ying yoki hopni onlink deb belgilang (o'sha prefiks boshqa joyda marshrutlanganda). Yuqoridagi blokda 2001:db8:100::/48 har qanday manzilni emas, uplink1 dagi o'sha ulangan prefiksni bildiradi. fwmark qoidasi faqat boshqa narsa o'rnatishi kerak bo'lgan belgini iste'mol qiladi: uzatish yo'lidagi nftables yoki iptables qoidasidan yoki SO_MARK soketdan, shuning uchun belgi manbasisiz nusxalangan blok hech narsaga mos kelmaydi.

Ikkinchi shart: metrikalar o'lgan provayderni aniqlay olmaydi

Metrika mavjud marshrutlar orasidagi afzallik, sog'liq tekshiruvi emas. Operator uzilganda yadro o'sha qurilmadagi marshrutlarni olib tashlaydi va ikkinchi standart o'z zimmasiga oladi. Kabel yoniq turganda va uning orqasidagi provayder o'lsa, jadvalda hech narsa o'zgarmaydi: afzal marshrut o'rnatilgan, qo'shni 2-qatlamda yetib boradi va paketlar qora tuynukga chiqadi. Bu farq sozlamangiz uchun muhim bo'lsa, nosozlikdan o'tish yo'lni tekshiradigan va marshrutni olib tashlaydigan narsadan kelishi kerak: u marshrutlash demoni yoki yozuvni o'chirib qayta o'rnatadigan kichik skript bo'lsin.

Jadval qurilgandan keyin tanlovni tekshiring va yadro ko'radigan usulda tekshiring. ip -6 route get 2001:db8:100::1 ishlatiladigan marshrutni chiqaradi, jumladan qurilma va tanlangan manba manzili, va u siyosat qoidalariga rioya qiladi. Noto'g'ri uplinkka tegishli manba manzili odatda qoida siz kutganingizdan ertaroq mos kelganining belgisidir.

Uchinchi shart: turg'unlik kimga tegishli ekanini hal qiling

Marshrut ip -6 route add orqali qo'shilganda qayta yuklashgacha yoki kimdir uni tozalaguncha yashaydi. Router e'lonlaridan o'rganilgan standart umrga ega va routerni qaytarib olishi mumkin, qo'lda qo'shilgan standart esa hech qachon o'zi tugamaydi. Ikkalasini bitta jadvalda aralashtirish eskirgan doimiy marshrut yangi e'lon qilinganidan ustun kela boshlashining yo'li, u tasvirlagan uplink anchadan beri mavjud bo'lmasa ham.

Har bir jadval uchun bitta egasini tanlang. Tarmoq menejeri yoki marshrutlash demoni interfeysni allaqachon boshqarsa, siyosat marshrutini o'sha yerda tasvirlab, yadroni tinch qo'ying. Agar buni skript bilan qilsangiz, skriptni idempotent qiling va demontajni ayni paytda yozing, chunki birinchi yomon o'zgarishda u kerak bo'ladi:

ip -6 route flush table 201
ip -6 rule del fwmark 0x2 table 201

Boshqa xostlar uchun uzatadigan routerda jadvalni ayblashdan oldin net.ipv6.conf.all.forwarding ni tekshiring. Uzatish o'chirilgan bo'lsa, boshqa tarmoqqa manzillangan paketlar 201 jadval qanchalik to'g'ri bo'lmasin, tashlab yuboriladi.

Keyingi odam audit qila olishi uchun dizaynni yozib qo'ying

Faqat fe80::1 ni saqlaydigan inventar muhim maydonlarni tashlab yuboradi. Manzil, keyingi hop, qurilma, jadval va metrikani birga yozing, shuningdek har bir marshrut qayerdan kelganini: e'lon qilingan, menejer yaratgan yoki statik. Keyinroq kimdir ikkinchi uplink haqiqatan trafik olib yuryaptimi deb so'rasa, o'sha yozuv taxminsiz javob beradi.

Jadvalni tugadi deb e'lon qilishdan oldin qo'shni ip -6 neigh show dev uplink0 orqali tasdiqlang, ip -6 rule show ni qayta o'qing — tartibdagi tasodiflar uchun va standart marshrutni oladigan ping o'rniga qoidaga mos trafik bilan sinab ko'ring. So'ng bitta uplinkni ataylab o'chiring va yadro qaysi marshrutga qaytishini kuzating; javob yozganingizga mos kelishi kerak.

O'xshash maqolalar