Marshrut xost bitlari sabab rad etildimi? Ko‘zlangan prefiksni toping
Rad etilgan marshrut satri odatda xost bitlari sabab bo‘ladi, yo‘naltirish muammosi emas. Maskani kengaytirish o‘rniga ko‘zlangan prefiksni aniqlang.
Marshrut satringiz rad etilgan holda qaytadi, topgan maslahatingiz esa IP yo‘naltirishni yoqishni aytadi. Bu ikki narsa muammoning turli bosqichlarida. Yo‘naltirish xost interfeyslar orasida paketlarni ko‘chira olishini hal qiladi; u siz kiritgan manzil to‘g‘ri tarmoqmi degan fikrga ega emas. Avval prefiksni tuzating, chunki yo‘naltirish bir-biriga mos kelmaydigan manzil va maskani qutqarmaydi.
Parser aslida nimadan shikoyat qilmoqda
Manzil va maska ko‘rinishida yozilgan manzil tarmoqni tasvirlashi kerak, tarmoq esa nolga tenglangan xost bitlaridan boshlanadi. Berilgan manzil hali ham xost qismida qiymat olib yursa, juftlik ichki jihatdan ziddiyatli: 172.20.130.0 nol bilan tugagani uchun tartibli ko‘rinadi, lekin to‘rtinchi oktetdagi nol yagona muhim narsa emas. Bu yerda ortiqcha bitlarni aynan uchinchi oktet saqlab turadi.
Vositalar bu ziddiyatni turlicha hal qiladi. Qat’iy parserlar satrni rad etadi va xost bitlarini nomlaydi. Yumshoq parserlar manzilni maskalaydi va siz so‘ramagan narsani o‘rnatadi, bu yomonroq, chunki konfiguratsiya endi siz hech qachon ko‘zlamagan diapazonni marshrutlaydi. Python’ning ipaddress moduli tanlovni bevosita ko‘rsatadi: qat’iy tarmoq tahlili xato beradi, strict=False esa xost bitlarini maskalaydi. Mijozingiz versiyalar orasida qat’iy, yumshoq yoki nomuvofiq bo‘lishi mumkin, shuning uchun odatga ishonish o‘rniga xabarni o‘qing.
Misolni qo‘lda ishlang
172.20.130.0 manziliga /20 maska bilan yetishi kerak bo‘lgan tunnelni oling. /20 uchinchi oktetdan to‘rt bit qarz oladi, shuning uchun bu oktet faqat 16 qadamida sanaladi: 0, 16, 32 va undan keyin 240 gacha. 130 qiymati 128 va 143 orasiga tushadi, ya’ni qamrab oluvchi tarmoq 172.20.128.0 dan boshlanadi, oxirgi okteti nolga tenglangan 172.20.130.0 dan emas.
Yozma ko‘rinishda blok 172.20.128.0 dan 172.20.143.255 gacha boradi va 4,096 manzilni saqlaydi. Xuddi shu qiymatlarni qat’iy bo‘lmagan parserga berish uning sizning nomingizdan qiladigan almashtirishini ko‘rsatadi:
$ python3 -c "import ipaddress; n=ipaddress.ip_network('172.20.130.0/20', strict=False); print(n, n.num_addresses)"
172.20.128.0/20 4096Aslida qaysi manzilni ko‘zlaganingizni hal qiling
Rad etilgan satr odatda uch niyatdan birini yashiradi va tanlash faqat sizga tegishli. Tunnel butun blokka muhtoj bo‘lsa, kanonik tarmoq manzili 172.20.128.0/20 ni yozing. Tunnel faqat 130 segmentiga muhtoj bo‘lsa, maska xato edi va 172.20.130.0/24 halol shakl. Maqsad bitta mashina bo‘lsa, IPv4 xost marshruti /32 hisoblanadi va hech qanday maska arifmetikasi ishtirok etmaydi.
Ularning har biri har xil hajmdagi trafikka ruxsat beradi va shikoyat to‘xtagunga qadar maskani kengaytirmaslikning haqiqiy sababi shu. /16 satrni deyarli hamma joyda qabul qiladi va trafikni siz hech qachon tunnel orqali marshrutlashni xohlamagan manzillarga yuboradi. Niyatga mos eng tor prefiksni yozing, so‘ng uni kutayotgan keyingi hop bilan tasdiqlang, parser sukunati bilan emas.
Nega yo‘naltirish hech qachon yechim bo‘lmagan
Rad etilgan marshrut hech qachon yo‘naltirish yo‘liga yetib bormaydi, shuning uchun net.ipv4.ip_forward ni almashtirish natijani o‘zgartira olmaydi. Bu sozlama keyinroq, xost interfeyslar orasida paketlarni o‘tkazishi kerak bo‘lganda muhim, va jadval to‘g‘ri bo‘lishidan oldin uni yoqish faqat keyingi qaysi bosqich muvaffaqiyatsiz bo‘lishini o‘zgartiradi.
Xuddi shu nuqtada yana ikki narsa ko‘pincha ayblanadi. Marshrut qabul qilinishi va baribir aniqroq marshrutga yutqazishi mumkin, firewall qoidasi esa to‘g‘ri qidiruvdan keyin trafikni tashlab yuborishi mumkin. Bosqichlarni alohida tuting: sintaksis, o‘rnatish, tanlash, filtrlash. Noto‘g‘ri bosqichda ishlash samarali tuyuladi, chunki har bir o‘zgarish nimanidir qayta boshlaydi.
O‘rnatilgan marshrutni va u yutadigan yo‘lni tekshiring
Mijoz satrni qabul qilgach, u nima o‘rnatganini va yadro blok ichidagi vakillik manzili uchun qaysi marshrutni tanlashini ko‘ring. Agar o‘rnatilgan prefiks yozganingizdan farq qilsa, sizning nomingizdan normalizator ish ko‘rgan.
Blok ichidagi a’zo manzilni va tashqarisidagi bittasini so‘rang, taqqoslash bitta taskin beruvchi satr emas, mazmunli bo‘lishi uchun:
ip -4 route show 172.20.128.0/20
ip -4 route get 172.20.140.10
ip -4 route get 172.20.200.10Prefiksingiz to‘g‘ri bo‘lsa, uchinchi so‘rov tunneldan tashqariga tushishi kerak, tushmasa, qurgan marshrutingiz o‘ylaganingizdan kengroq. Keyingi sozlamaga tegishdan oldin prefiks nimani qamrab olishi kerakligini yozib qo‘ying, chunki tahlil qilinadigan marshrut va ishlaydigan yo‘l alohida kuzatuvlar bo‘lib qoladi.