IPv6 tunnelingizning bir uchi ikkinchisiga ping yuboradi va har doim faqat bitta yo'nalish javob beradi. Interfeys ishlayapti, marshrut to'g'ri ko'rinadi va jurnalda buni tushuntiruvchi hech narsa yo'q. Siz tayinlagan manzil subnet-router anycast manzili bo'lib, u umuman host manzili emas va ikki uchli havolada u aynan bitta yetkazish nishoniga ega: yuboruvchi. Hech qanday timeout qiymati buni tuzatmaydi, chunki manzil siz o'ylagan ishni qilmayapti.

Manzilga ishora qiluvchi alomat

Havoladagi har bir host javob beradi, faqat interfeys identifikatori butunlay nol bo'lganidan tashqari. Bu shaklga manzillangan paket ta'rifga ko'ra subnetdagi routerga yetkaziladi, shuning uchun nuqtadan nuqtaga tunnelda u uni yuborgan mashinaga qaytadi. Uzoq uchdan bu yetib bo'lmaydigan sherik sifatida o'qiladi; yaqin uchdan esa sukunat sifatida o'qiladi. Xuddi shu prefiksdagi boshqa identifikatorni qo'ying va alomat boshqa hech qanday o'zgarishsiz yo'qoladi, bu marshrutlarga tegishdan oldin olinishi kerak bo'lgan tasdiqdir.

Butunlay nol identifikator anycast uchun ajratilgan

RFC 4291 butunlay nol interfeys identifikatorini subnet-router anycast manzili sifatida saqlaydi, shuning uchun 2001:db8:4a::/64 kabi /64 2001:db8:4a:: da foydalanish mumkin bo'lgan hostni o'z ichiga olmaydi. Bu ajratishning o'z o'rni bor: router advertisements va neighbour discovery shu shaklga murojaat qiladi va router o'zi xizmat qiladigan prefiks uchun javob beradi. Bu qiymatni tunnel uchiga tayinlash router rolini barga topshiradi, shuning uchun hech narsa qaytmaydi. Prefiksdagi boshqa har qanday identifikator host sifatida ishlaydi, shuning uchun tuzatish odatda bitta raqam.

Ajratishga tunnel uchidan egallashga haqingiz yo'q rol sifatida qarang, marshrut bilan chetlab o'tiladigan g'alati narsa sifatida emas.

Host manzillarini tayinlang va prefiksni marshrutlang

Ikki uch uchun ::1 va ::2 ni tanlang, birini ip -6 addr add 2001:db8:4a::2/64 dev tun0 bilan qo'shing, so'ngra unga manzil berishga urinish o'rniga uzoq prefiksni marshrutlang. Tunneldan tashqariga 2001:db8:4a::/64 uchun marshrut uzoq tomonni yetib boradigan qiladi; manzilning o'zi faqat mahalliy interfeysni sozlaydi.

To'liq tunnel uchun uchinchi qadam bor, qurilma orqali global unicast uchun standart marshrut, bu hamma narsani tunnelga yuborishning IPv6 ekvivalentidir. Uni o'tkazib yuborsangiz, IPv4 tunnel ichida harakatlanayotganda IPv6 jismoniy havoladan foydalanishda davom etadi, shuning uchun host siz qoplangan deb o'ylagan trafikni aynan oqizib yuboradi. ip -6 route get 2001:4860:4860::8888 bilan tasdiqlang va javobni taxmin qilish o'rniga u qaysi qurilmani nomlashini o'qing.

Multicast marshrutlashdan oldin rad etiladi

Android VpnService.Builder uchun manzillar va marshrutlarni LinkAddress orqali tekshiradi va bu konstruktor multicastni darhol rad etadi. Unga marshrut sifatida multicast prefiksini bering, natija marshrut o'rniga bad LinkAddress parameters xatosi bo'ladi, bu tekshiruv javobi, tarmoq javobi emas. Rad etish muhitga mos keladi: nuqtadan nuqtaga tun qurilmasida link-layer multicast yo'q, shuning uchun undagi guruh marshrutida o'rnatiladigan yetkazish modeli yo'q. Guruh manzillari qo'lda sozlanmaydi, ularni stackning o'zi yaratadi va iste'mol qiladi.

IPv6 all-nodes va solicited-node manzillari xuddi shu qoidaga tushadi. Interfeys ularni stack u yerga qo'ygani uchun olib yuradi, qandaydir siyosat ularni nazarda tutgani uchun emas.

Tunnel buning o'rniga nima olib yurishi mumkin

multicast kashfiyotini tunnel orqali ko'chirish guruh a'zoligini tushunadigan qatlamni talab qiladi: Ethernet segmentini taqdim etuvchi TAP ko'prigi, ilova darajasidagi relay yoki qaysi sheriklarga nusxa ko'chirish aniq aytilgan marshrutlash protokoli. VpnService modelida bularning hech biri yo'q, u yerda ilova paketlarni o'qiydi va yozadi va tunnel uchun guruhga qo'shiladigan chaqiruvga ega emas. Yoki guruhlarni tushunadigan komponentni qo'shing, yoki talabni dizayndan olib tashlang.

Unicast esa yuqoridagi manzillar va marshrutlardan boshqa hech narsa talab qilmaydi, shuning uchun tunnellardan odatda uni olib yurish kutiladi va keyin kashfiyot protokoli ishlamay qolganda ayblanadi.

Biror narsa tayinlashdan oldin uchta tekshiruv

Manzil anycast shakli emasligini tasdiqlang, u multicast emasligini tasdiqlang va prefiks faqat qurilmaga tayinlanmagan, balki marshrutlanganini tasdiqlang. So'ngra testingizni haqiqiy host bo'lgan manzilga yuboring, chunki anycast manziliga qaratilgan ping yuboruvchini o'lchaydi va yo'l haqida hech narsa aytmaydi. Keyingi joylashtirish ularni qayta kashf qilmasligi uchun o'sha uchta tekshiruvni o'zgarish yozuviga yozib qo'ying.

Platforma hech qachon o'rnatmagan marshrutni uzoqroq kutish bilan tuzatib bo'lmaydi va hech qachon host bo'lmagan manzilni yaxshiroq ping bilan tuzatib bo'lmaydi.

O'xshash maqolalar