IPv6 trafigi VPN orqali o'tishi kerakmi yoki to'g'ridan-to'g'ri?
::/0 tunnel ichida yoki yo'qligini uch shart bilan hal qiling: chiqish qo'llab-quvvatlashi, so'nggi nuqtaga yetib borish va faqat mahalliy tarmoqlar.
O'tgan oy ikki kishi mendan qarama-qarshi natijalarni so'radi: biri IPv6 VPN qamrab olishini, ikkinchisi ofis printeri ishlashda davom etishini xohladi. Bitta ::/0 marshruti ikkalasini ham o'zi ta'minlay olmaydi. Bu marshrut tunnel ichida yoki yo'qligi uch shartga bog'liq, va birinchisi uni ko'pchilik tijorat chiqishlari uchun istisno qiladi. Agar chiqish IPv6 tashimasa, standart marshrutni u yerga yo'naltirish trafigingizni yuboradigan joyi yo'q tunnelda yashiradi.
Javobni uch shart belgilaydi
Standart marshrut bir qator, ::/0, va aniqroq marshruti yo'q har qanday IPv6 manziliga mos keladi (RFC 4291). Uni o'rnatish oson. Buni qilish kerakmi degan qaror uch shartga kelib taqaladi.
Birinchi shart: ulanadigan chiqishda ishlaydigan IPv6 bor va u uni uzatishga tayyor. Ikkinchi shart: mijozingiz tunnelning so'nggi nuqtasiga yo'lni saqlab tura oladi, u odatda siz marshrutlamoqchi bo'lgan diapazon ichida bo'ladi. Uchinchi shart: tunneldan tashqarida qolishi kerak bo'lgan mahalliy IPv6 manzillarini ayta olasiz.
Har bir shart o'zcha muvaffaqiyatsiz bo'ladi, shuning uchun taxmin qilish butun bir oqshomga tushadi. Muvaffaqiyatsiz birinchi shart sizga sukunat va to'g'ri ko'rinadigan marshrut jadvalini beradi. Muvaffaqiyatsiz ikkinchi shart qo'l berishni boshlanganidan bir necha soniya o'tib o'ldiradi. Muvaffaqiyatsiz uchinchi shart ishlaydigan tunnel va printer yonida norozi hamkasb qoldiradi.
| What you see | Decision |
|---|---|
| Exit answers IPv6 probes, no local IPv6 devices to protect | Route ::/0 into the tunnel |
| Exit answers IPv6 probes, printer or NAS reachable by a global address | Route ::/0, then give those prefixes a route of their own |
| Exit is IPv4-only inside the tunnel | Do not route ::/0; block IPv6 on the client |
Endpoint is reached over IPv6 and sits inside ::/0 | Install a host route for the endpoint first |
Chiqish haqiqatan ham IPv6 tashiyadimi?
IPv6 manziliga ega tunnel interfeysi narigi tomon haqida hech narsani isbotlamaydi. Ko'plab tijorat profillari ichkarida faqat IPv4: server sizga v4 manzil beradi va qolganini tashlaydi. Uning ustiga AllowedIPs dan standart marshrut o'rnating, yadro esa IPv6 ni sherigi hech qachon ko'rmaydigan interfeysga mamnuniyat bilan yuboradi.
Mijozdan sinab ko'ring, tunnel ko'tarilgan paytda. ping -6 -c 3 2001:4860:4860::8888 va ip -6 route get 2001:4860:4860::8888 turli savollarga javob beradi: javob qaytadimi va yadro qaysi qurilmani tanladi. Ikkinchisi sizning tunnelingizni aytsa, birinchisi hech narsa qaytarmasa, muammo marshrutda emas, chiqishda.
Chiqishni o'zingiz boshqarsangiz, mijoz sinovi o'tishi mumkin, yo'l esa baribir berk ko'chaga uriladi. Shlyuzda net.ipv6.conf.all.forwarding=1 yoqilganini va uning tarmoq devori tunneldan uzatilgan paketlarni qabul qilishini tasdiqlang. Uzatishdan bosh tortadigan chiqishga to'g'ri yo'naltirilgan paket mijoz tomonidan aynan marshrutlash xatosi kabi ko'rinadi.
Mijoz so'nggi nuqtagacha yo'lini saqlab tura oladimi?
Bu meni faqat IPv6 ishlaydigan WireGuard so'nggi nuqtasi bor noutbukda ushlagan holat. So'nggi nuqtaning manzili oddiy global manzil, shuning uchun u ::/0 ichiga tushadi. Butun prefiksni interfeysga yo'naltiring va qo'l berish paketlari hali qurmoqchi bo'lgan tunnellari ichiga o'zlarini quvadi. Tunnel hech qachon ko'tarilmaydi va mijoz chiqishida nima uchunligi aytilmaydi.
wg-quick buni Linuxda hal qiladi. U AllowedIPs dan marshrutlarni chiqaradi, ularni o'z jadvaliga o'rnatadi va so'nggi nuqtaga trafik avval asosiy jadval orqali hal bo'lishi uchun siyosat qoidasini qo'shadi: suppress_prefixlength 0 qoidasi, uni ip -6 rule da topasiz. Shuning uchun wg-quick up qo'lda yozilgan ip -6 route add default dev wg0 sizni kesadigan joyda muvaffaqiyat qozonadi.
Ikkala holatni ham ip -6 route get <endpoint-v6> bilan tekshiring, tunnelni ko'tarishdan oldin va keyin. Agar javob tunnel qurilmangizga o'zgarsa, tunnel uchun kerak bo'lgan yo'lni olib tashlagansiz. Marshrutlarni o'zingiz yozsangiz, so'nggi nuqtaga asl shlyuz orqali xost marshrutini qo'shing yoki so'nggi nuqtaga IPv4 orqali ulanib, IPv6 ni yuklamaga qoldiring.
Tunneldan tashqarida nima qolishi kerak?
Aniqroq marshrutlar standartdan ustun, shuning uchun havoladagi prefiks yoki o'z marshrutiga ega ULA diapazoni qo'shimcha kuch sarflamasdan ishlashda davom etadi. Bu ko'plab to'liq tunnelli IPv4 sozlamalarining omon qolishining sokin sababi: LAN prefikslari standartdan aniqroq va hech qachon tunnelga kirmaydi.
Bu mahalliy qurilma global manzil orqali yetib borish mumkin bo'lganda buziladi, bu o'sha routerdan ommaviy prefiks olgan printer, NAS yoki televizor uchun odatiy holdir. Bu manzillar ::/0 ga mos keladi, boshqa hech narsaga emas, shuning uchun ular qolgan hamma bilan tunnelga o'tib, yo'qoladi.
Protokol bo'yicha emas, manzil bo'yicha qaror qiling. Ikki yoki uchta mahalliy xost muhim bo'lsa, ularning prefikslariga jismoniy interfeys orqali chiqish marshrutini bering yoki kelishilgan to'plamdan olib tashlang. Ro'yxat o'sishda davom etsa, halol javob yozma istisnolar ro'yxati bilan IPv6 uchun bo'lingan tunnel, siz doim yamab yurgan standart emas.
Javob yo'q bo'lsa, bloklang
IPv6 ni marshrutsiz qoldirish uni yolg'iz qoldirish bilan bir xil emas. Ishlaydigan IPv6 standartiga ega xost tunnel IPv4 tashiyotganda ham undan foydalanadi, shuning uchun trafik VPN yonidan chiqadi va IPv6 ni afzal ko'radigan har bir xizmat haqiqiy manzilingizni ko'radi. Bu oqish, bo'lingan tunnel emas.
Bittasini tanlang va qaysinisini tanlaganingizni yozing. Standartni yo'naltiring va yuqoridagi murosalarni qabul qiling, yoki tunnel davom etguncha IPv6 ni o'chiring. Prefiksni AllowedIPs dan tashlab ketishning o'zi yetarli emas, chunki operatsion tizim o'z standartini saqlaydi. Linuxda qo'pol versiya sysctl -w net.ipv6.conf.all.disable_ipv6=1; nozikroq versiya IPv6 ni tarmoq devori qoidasi bilan tunneldan tashqariga tashlaydi. Telefon mijozlarida xuddi shu ishni qiladigan aniq IPv6 bloklash tugmasi bor.
Uni oqish kabi tekshiring
Tunnelni ko'taring va tugmaga ishonish o'rniga holatni o'qing. ip -6 route show default bitta standartni ko'rsatishi, ip -6 route get esa LANingizdan tashqari manzil uchun tunnel qurilmasini nomlashi kerak. Ulanish uzilgandan keyin ikkalasini takrorlang: tunneldan uzoqroq yashaydigan standart — siz qidirgan xato.
Keyin qarama-qarshi yo'nalishni sinab ko'ring. Mahalliy tarmoqdagi xostdan mijozga uning mahalliy IPv6 manzili orqali yetib boring. Agar bu ishlashdan to'xtasa, uchinchi shart hech qachon bajarilmagan, o'sha paytda marshrut jadvali nima degan bo'lsa ham.
Natijani keyingi odam topadigan joyga yozing: qaysi prefikslar mahalliy qoladi, nima uchun va ulanish uzilgandan keyin mijoz nima qiladi. Runbookdagi ikki qator keyingi muhandisni yarim kechada so'nggi nuqta sikliini qaytadan kashf qilishdan saqlaydi.