Хост битүүдээс болж маршрут татгалзагдсан уу? Зорьсон префиксээ олоорой
Татгалзсан маршрутын мөр нь ихэвчлэн хост битүүдээс болдог, дамжуулалтын асуудал биш. Маскийг өргөтгөхийн оронд зорьсон префиксээ тодорхойлоорой.
Таны маршрутын мөр татгалзагдан буцаж ирнэ, олсон зөвлөгөө нь IP дамжуулалтыг асаагаарай гэж хэлдэг. Эдгээр хоёр зүйл асуудлын өөр өөр үе шатанд байна. Дамжуулалт нь хост интерфэйсүүдийн хооронд пакет зөөж чадах эсэхийг шийддэг; таны бичсэн очих газар хүчинтэй сүлжээ мөн эсэх талаар түүнд санал байхгүй. Эхлээд префиксийг засаарай, учир нь дамжуулалт хоорондоо тохирохгүй хаяг, маскийг аварч чадахгүй.
Парсер яг юуны талаар гомдоллож байна
Хаяг дээр маск нэмж бичсэн очих газар нь сүлжээг тодорхойлох ёстой, сүлжээ нь тэглэсэн хост битүүдээс эхэлдэг. Өгсөн хаяг хост хэсэгтээ утга агуулж байвал хос нь дотооддоо зөрчилтэй: 172.20.130.0 тэгээр төгсдөг тул цэгцтэй харагдана, гэхдээ дөрөв дэх октет дахь тэг нь цорын ганц чухал зүйл биш. Энд тэнэсэн битүүдийг гурав дахь октет л барьж байна.
Хэрэгслүүд энэ зөрчилд өөр өөрөөр хандана. Хатуу парсерууд мөрийг татгалзаж, хост битүүдийг нэрлэнэ. Зөөлөн парсерууд хаягийг маскалж, таны хүсээгүй зүйлийг суулгадаг, энэ нь илүү муу, учир нь тохиргоо одоо таны хэзээ ч зорьж байгаагүй хүрээг маршрутчилж байна. Python-ийн ipaddress модуль сонголтыг шууд харуулна: хатуу сүлжээний парсинг алдаа өгдөг, strict=False нь хост битүүдийг маскална. Таны клиент хувилбаруудын хооронд хатуу, зөөлөн эсвэл нийцэхгүй байж болно, тиймээс дадалд итгэхийн оронд мессежийг уншаарай.
Жишээг гараар бодож үзээрэй
172.20.130.0 руу /20 масктай хүрэх шаардлагатай туннелийг авъя. /20 нь гурав дахь октетоос дөрвөн бит зээлдэг тул тэр октетыг зөвхөн 16-ын алхмаар тоолно: 0, 16, 32, дараа нь 240 хүртэл. 130 утга нь 128 ба 143-ын хооронд ордог, өөрөөр хэлбэл хүрээлэх сүлжээ 172.20.128.0-ээс эхэлнэ, сүүлчийн октетыг тэглэсэн 172.20.130.0-ээс биш.
Бичвэрлэвэл блок нь 172.20.128.0-ээс 172.20.143.255 хүртэл үргэлжилж, 4,096 хаяг агуулна. Ижил утгуудыг хатуу бус парсерт өгөхөд тэрээр таны өмнөөс хийх солилтыг харуулна:
$ 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 4096Яг аль очих газрыг зорьж байснаа шийдээрэй
Татгалзсан мөр нь ихэвчлэн гурван зорилгын нэгийг нуудаг, сонгох нь зөвхөн танд л хамаатай. Туннельд бүх блок хэрэгтэй бол канон сүлжээний хаяг болох 172.20.128.0/20-ыг бичээрэй. Туннельд зөвхөн 130 сегмент хэрэгтэй бол маск буруу байсан бөгөөд 172.20.130.0/24 бол шударга хэлбэр. Зорилго нэг машин бол, IPv4 хост маршрут нь /32 юм мөн ямар ч маскийн арифметик оролцохгүй.
Тэдгээр нь тус бүр өөр хэмжээний урсгалыг зөвшөөрдөг, гомдол зогсох хүртэл маскийг өргөтгөхгүй байх жинхэнэ шалтгаан энэ юм. /16 мөрийг бараг хаа сайгүй хүлээн авч, туннелээр дамжуулж маршрутчилахыг хэзээ ч хүсээгүй очих газрууд руу урсгалыг илгээдэг. Зорилгод тохирох хамгийн нарийн префиксийг бичээд, дараа нь таны хүлээж буй дараагийн хоптой тулгаж баталгаажуулаарай, парсерын чимээгүй байдалтай биш.
Яагаад дамжуулалт хэзээ ч шийдэл болж чадаагүй юм
Татгалзсан маршрут хэзээ ч дамжуулалтын замд хүрдэггүй, тиймээс net.ipv4.ip_forward-ийг сольсон ч үр дүн өөрчлөгдөхгүй. Тэр тохиргоо дараа нь, хост интерфэйсүүдийн хооронд пакет дамжуулах шаардлагатай үед чухал бөгөөд хүснэгт зөв болохоос өмнө асаах нь дараагийн аль үе шат бүтэлгүйтэхийг л өөрчилнө.
Мөн адил цэг дээр өөр хоёр зүйлийг ихэвчлэн буруутгадаг. Маршрутыг хүлээн авсан ч илүү тодорхой маршрутад ялагдаж болно, галт ханын дүрэм зөв хайлтын дараа урсгалыг хаяж болно. Үе шатуудыг тусад нь бариарай: синтакс, суулгалт, сонголт, шүүлт. Буруу үе шатанд ажиллах нь үр бүтээлтэй мэт санагддаг, учир нь өөрчлөлт бүр ямар нэг зүйлийг дахин эхлүүлдэг.
Суулгасан маршрут болон түүний ялсан замыг шалгаарай
Клиент мөрийг хүлээн авсны дараа тэр юу суулгасныг, цөм блокийн доторх төлөөлөх хаягт аль маршрутыг сонгохыг хараарай. Суулгасан префикс таны бичсэнээс ялгаатай бол нормалчлагч таны өмнөөс ажилласан байна.
Блокийн доторх гишүүн хаяг болон гаднах нэг хаягийг асуугаарай, харьцуулалт нэг тайвшруулах мөр биш утга учиртай байхын тулд:
ip -4 route show 172.20.128.0/20
ip -4 route get 172.20.140.10
ip -4 route get 172.20.200.10Гурав дахь асуулга таны префикс зөв бол туннелээс гадна унах ёстой, унахгүй бол барьсан маршрут таны бодсоноос өргөн байна. Дараагийн тохиргоог хүрэхээс өмнө префикс юуг хамарх ёстой байсныг тэмдэглээрэй, учир нь парслагдах маршрут ба ажиллах зам тусдаа ажиглалт хэвээр үлддэг.