Siz tunnelni ko'tarasiz, tunnelni manba interfeys sifatida ishlatib fe80::1 ga ping yuborasiz va hech narsa qaytmaydi. Bu siz unutgan firewall qoidasi emas. Link-local manzil faqat u shakllangan bitta havolada ma'noga ega, marshrutlangan VPN esa u havola emas. Uzoq routerning fe80::1 manzili uzoq LAN segmentida turadi; siz boshqa segmentda bir sakrash uzoqda o'tiribsiz va IPv6 da router link-local paketlarni uzatish mexanizmi umuman yo'q.

fe80 prefiksi diapazonni emas, qamrovni tavsiflaydi

Link-local unicast — fe80::/10, aniqlovchi xususiyat esa son emas, qamrov. Manzil faqat bitta havolada amal qiladi va har bir interfeys o'z identifikatoridan bittasini hosil qiladi, shuning uchun ikki aloqasiz tarmoqdagi ikki aloqasiz mashina hech qanday ziddiyatsiz ikkalasi ham fe80::1 ga javob bera oladi. Prefiks aslida «qaysidir havolada» deydi; havolaning o'zi kontekstdan keladi.

Xostda bu kontekst foiz belgisidan keyin qo'shiladigan zona, ya'ni scope ID: Linux da fe80::1%eth0, Windows da va interfeys indekslarini ko'rsatadigan vositalarda fe80::1%3 yoki fe80::1%12. Yadro manzilni interfeys indeksi bilan birga hal qiladi va keyin yuboradi. Zonani olib tashlasangiz, manzil noaniq bo'ladi, shuning uchun stek segment tanlash imkoniga ega emas.

Marshrutlangan tunnel nima uchun uni yetkaza olmaydi

Marshrutlangan VPN o'z manzillarini olib yuruvchi nuqta-nuqtaga interfeys, odatda tunnel ichidagi unique-local yoki xususiy IPv6 fazosining /64. Uzoq LAN alohida havola bo'lib, unga tunnel oxiri sizning nomingizdan marshrutlash va uzatish orqali yetadi. Bular ikki xil segment, shuning uchun biridan olingan manzil ikkinchisida haqiqiy manzil emas.

Uzatish qoidasi standartda aniq yozilgan, bu sizning mijozingizning g'alati xususiyati emas: routerlar link-local manba yoki manzilli paketlarni uzatmaydi. Shuning uchun marshrut jadvali to'g'ri ko'rinsa ham paket o'ladi. fe80::/64 uchun tunnel tomon marshrut qo'shsangiz, standartga mos stek uni yo rad etadi, yo qabul qilib har bir mos paketni tashlaydi: manzil qamrovi «faqat shu havola» deydi, chiqish interfeysi esa u havola emas.

Qo'shni aniqlash ham shu chegarani mustahkamlaydi. Xostlar link-local keyingi sakrashlarni 255 sakrash chegarasi bilan havola qamrovidagi multicast ga yuborilgan qo'shni so'rovi orqali hal qiladi, shuning uchun routerlar uzatilgan hamma narsani rad eta oladi. Buni tunnel bo'ylab ishlatish uzoq segment uchun aniqlashni proksilash demakdir, bu esa boshqa qalpoq kiygan Layer 2 ko'prigi.

Ikkinchi, jimroq nosozlik bor va u marshrutni majburlashga urinayotganlarni ushlaydi: zona. Mahalliy ravishda qaysi zonani yozsangiz ham u tunnel interfeysini nomlaydi, vaholanki siz xohlagan manzil uzoq LAN interfeysiga bog'langan. Ikkalasi hech qachon mos kelmaydi, shuning uchun paketni uzoq uchida to'g'ri interfeysga burib bo'lmaydi.

Amalda nosozlik qanday ko'rinadi

Qamrov xatosi uchun vosita chiqishi marshrutlash yoki firewall xatosidek o'qiladi va aynan shuning uchun odamlar noto'g'ri qatlamda yarim kun o'tkazadi.

What you runWhat you seeWhat it means
ping fe80::1 with no zoneInvalid argument on Linux, or a transmit failure on WindowsThe stack cannot pick an interface for an ambiguous destination
ping -6 -I tun0 fe80::1Destination unreachable, or a silent timeoutThe address is not on the tunnel link, so there is nothing on-link to answer
ssh user@fe80::1 after the tunnel is upHangs, then no route to hostThe SYN never left the machine in a deliverable form; the server logs nothing
ip -6 neigh show dev tun0Empty tableNo neighbor entry can exist for a link-local host that is not on this link
fe80::/64 inside AllowedIPs or route-ipv6Config accepted, traffic still droppedThe tunnel carried the packet; the receiving stack refused to forward it

Uchinchi qator eng ko'p vaqtni yo'qotadi, chunki chiqishi yo'q ssh mijozi tinglayotgan xizmat muammosiga o'xshaydi. Ichkariga kirishning biron yo'li bo'lsa, uzoq tomonni tekshiring va sshd barcha manzillarga yoki faqat bittasiga bog'langanini tasdiqlang.

Marshrutlanish uchun yaratilgan manzildan foydalaning

Tunnel orqali yetish kerak bo'lgan hamma narsa uchun xizmatga aynan shu maqsadda berilgan manzildan foydalaning: global unicast manzil yoki fc00::/7 dan unique-local manzil, aynan shu ichki holat uchun ajratilgan diapazon. Tinglovchi uni haqiqatan bog'lashini tasdiqlang, qaytish yo'lini va xostning har qanday firewall qoidasini tekshiring.

Taxmin qilish o'rniga uzoq xostga qarang. ip -6 addr show mavjud manzillarni sanaydi, ss -6 -ltn esa demon nimani tinglayotganini sanaydi. Faqat fe80:: ga bog'langan xizmat faqat o'z segmentidan yetib boriladi, bu odatda hech kim ataylab tanlamagan va administrator roziligi bilan o'zgartirilishi mumkin bo'lgan standart qiymat.

Xizmatni haqiqatan qayta bog'lab bo'lmasa, ko'prikni tarmoq qatlami o'rniga ilova qatlamiga ko'taring. Uzoq xostdagi marshrutlanadigan manzilda tinglaydigan va link-local ga ulanadigan relay muammoni hech qanday segmentni kengaytirmasdan hal qiladi:

socat TCP6-LISTEN:8080,bind=[fd00:1:2::10] TCP6:[fe80::1%eth0]:80

Bu yerda zona to'g'ri tomonda, haqiqatan shu havolada eth0 bo'lgan xostda. Mijozingiz fd00:1:2::10 bilan gaplashadi, u odatdagidek marshrutlanadi, relay esa link-local sakrashni mahalliy bajaradi. Xuddi shu hiyla qurilmaning veb UI si yoki faqat link-local manzilni e'lon qiladigan eski BMC uchun ham ishlaydi.

Ko'prik haqiqatan javob bo'lganda va nimalarni tekshirish kerak

Ba'zi joylashtirishlar haqiqatan bitta umumiy segmentga muhtoj: faqat link-local aniqlash bilan gaplashadigan qurilma, multicast ga bog'liq apparat, tekis LAN ni qayta hosil qiladigan laboratoriya. Bu Layer 2 muammosi va unga Layer 2 javobi kerak, masalan uzoq interfeysga ko'priklangan tap qurilmasi yoki aniq ko'prik rejimli mijoz mahsuloti. Bu sizga tunnelni kesib o'tuvchi broadcast va multicast trafigini hamda uchtan-uchgacha ishlashi kerak bo'lgan qo'shni aniqlashni qimmatga tushiradi.

Bunga marshrutlangan profilga fe80::/64 qo'shish bilan yaqinlashmang. Bu eng yomon holatni keltiradi: konfiguratsiya tugagandek ko'rinadi, marshrut jadvali yozuvni ko'rsatadi va har bir paket baribir ikkalasi ham to'g'ri ishlayotgan ikki stek orasida bir joyda tashlanadi.

ping emas, interfeys bilan tasdiqlang. ip -6 addr show tun0 tunnel havolasi o'z link-local manzilini hosil qilganini aytadi, ip -6 route get fe80::1%tun0 esa yadro qamrovli manzil bilan haqiqatan nima qilishini aytadi. Yadro shu interfeysda manzilga yetib bo'lmaydi desa, hech qanday tunnel sozlamasi buni o'zgartirmaydi va profilni tahrirlashni to'xtatish vaqti keldi.

Savolni hal qiladigan qisqa ketma-ketlik:

  • Uzoq xostdagi manzilni o'qing va u fe80:: yoki marshrutlanadigan prefiks ekanini belgilang.
  • Agar fe80:: bo'lsa, xizmatni qayta bog'lang, shu xostda relay qiling yoki segmentni ko'priklang; marshrutlanadigan bo'lsa, marshrutni, firewall ni yoki bog'lash manzilini tuzating.
  • Har safar qayta sinovdan o'tkazganda zonani qayta tekshiring, chunki ko'chirilgan buyruq odatda noto'g'ri interfeysni saqlaydi.

Manbalar: RFC 4291, IPv6 manzil arxitekturasi.

O'xshash maqolalar