OpenVPN tunneli orqali IPv6: uy routeri bo‘ylab ko‘rik
Tunnel router yo‘naltira olmaydigan prefiks berganda IPv6 o‘ladi yoki oqib ketadi. Mijoz, hovuz, yo‘naltirish, proxy NDP va qaytish yo‘lini tartib bilan ko‘rib chiqing.
Noutbukda IPv6 manzili bor, tunnel IPv4 ustida ishlaydi, ammo har bir IPv6 sinovi muvaffaqiyatsiz tugaydi. Yoki undan ham yomoni: sinov o‘tadi va trafik tunnelga hech kirmasdan provayder yo‘lidan chiqib ketadi. Ikkala natija ham bitta yetishmayotgan qarorga qaytadi: hech kim routerga mijozlar tomon yo‘naltira oladigan prefiks bermadi. Yo‘lni mijozdan tashqariga qarab yursangiz, qaysi bo‘lak yetishmayotganini topasiz.
Mijoz turgan joydan boshlang
Serverga tegishdan oldin mijozni ko‘ring. ip -6 addr hovuzdan tunnel manzilini, ip -6 route esa tunnel qurilmasiga ishora qiluvchi itarilgan prefiksni ko‘rsatishi kerak. Manzil bor-u yo‘l yo‘q bo‘lsa, itarish yetishmaydi yoki mijoz uni e’tiborsiz qoldirgan. Ikkalasi ham bo‘lmasa, server umuman hech narsa ajratmagan.
Keyin mijoz tashqi dunyo haqida nima deb o‘ylashini tekshiring. Tunnel orqali standart yo‘l butun IPv6 trafigini talab qiladi, 2000::/3 uchun yo‘l esa faqat global unicastni talab qiladi. Ikkalasi ham to‘g‘ri bo‘lishi mumkin va ular oqish haqidagi turli savollarga javob beradi.
Hech qanday IPv6 standart yo‘li bo‘lmagan mijoz tunnelning o‘zi butunlay sog‘lom bo‘lsa ham har bir ommaviy sinovda muvaffaqiyatsiz tugaydi. Bu siyosatdagi bo‘shliq, buzilgan tunnel emas.
Server haqiqatan yo‘naltira oladigan hovuzni tekshiring
Server faqat o‘zi haqiqatan nazorat qiladigan prefikstdan ajratishi mumkin. Agar provayder /56 delegatsiya qilsa, tunnel uchun bitta /64 ajratib qo‘ying, qolganini LAN uchun qoldiring. Provayder WAN da faqat bitta /64 berib, boshqa hech narsani yo‘naltirmasa, LAN prefiksini o‘z holida qoldiring va tunnelga noyob mahalliy diapazon bering, mijozlarda global chiqish bo‘lmasligini qabul qilgan holda.
Hovuz va itarish birga boradi. server-ipv6 2001:db8:80:10::/64 manzillarni ajratadi, push "route-ipv6 2000::/3" esa mijozlarga tunnelga nima yuborishni aytadi. 2000::/3 ni itarish global unicastni qamrab oladi va link-local hamda multicast diapazonlarini tunneldan tashqarida qoldiradi.
Tanlangan prefiksni joylashtirish yozuviga yozing. Keyingi safar provayder topshirig‘ini o‘zgartiradigan kishi tunnel qaysi /64 ni allaqachon egallaganini bilishi kerak.
Ikkinchi oila uchun yo‘naltirishni yoqing
IPv4 yo‘naltirishi IPv6 yo‘naltirishini anglatmaydi. net.ipv6.conf.all.forwarding=1 ni o‘rnating va IPv4 FORWARD siyosati allaqachon ruxsat bergan hamma narsani aks ettiring. FORWARD zanjiri standart bo‘yicha tashlab yuboradigan routerda yetishmayotgan qoidalar to‘plami xuddi o‘lik tunneldek ko‘rinadi.
Qo‘l berish muvaffaqiyatli o‘tadi, mijoz manzil oladi, orqaga esa hech narsa kelmaydi. Ikkala yo‘nalish va WAN qismi uchun qoidalar qo‘shing, chunki LAN ga yetib, internetga yetmaydigan tunnel uchinchi sinovda muvaffaqiyatsiz tugaydi. Muvaffaqiyatsiz urinishdan keyin zanjir hisoblagichlarini ko‘ring, chunki hech qachon mos kelmagan qoida mos kelib tashlagan qoidadan boshqa muammo.
ip6tables -A FORWARD -i br0 -o tun0 -j ACCEPT
ip6tables -A FORWARD -i tun0 -o br0 -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT
ip6tables -A FORWARD -i tun0 -o wan0 -j ACCEPT
Bitta yon ta’sir oxir-oqibat tunnelni ayblaydiganlarni ushlaydi. Yo‘naltirishni yoqish yadroga Router Advertisement orqali manzil konfiguratsiyasini o‘tkazib yuborishga majbur qiladi, agar boshqacha aytilmasa, va shu yo‘l bilan o‘rganilgan standart yo‘l u bilan birga yo‘qoladi. Yoki WAN interfeysida aniq standart yo‘lni mahkamlang, yoki u yerda accept_ra ni ataylab 2 ga qo‘ying. Har qanday o‘zgarishdan keyin mijozlarni qayta sinashdan oldin routerda hali ham ishlatib bo‘ladigan IPv6 chiqish yo‘li borligini tasdiqlang.
Yuqori tomon yo‘naltirmasa, qo‘shni aniqlashga javob bering
Yuqori tomondagi uskunalar ba’zan delegatsiya qilingan /64 ni o‘z ulanishiga tegishli deb hisoblaydi va VPN qutisiga biron subprefiksni yo‘naltirishdan bosh tortadi. Shunday bo‘lganda, kimdir har bir mijoz manzili uchun qo‘shni so‘rovlariga alohida javob berishi kerak.
OpenVPN ajratilgan manzilni client-connect ilgagiga ochib beradi, shuning uchun yozuvlar qo‘lda yuritiladigan ro‘yxat o‘rniga haqiqiy hovuzni kuzatishi mumkin. Ilgak ip -6 neigh add proxy $ifconfig_pool_remote_ip6 dev eth0 ni qo‘shadi, mos client-disconnect ilgagi esa uni olib tashlaydi. Olib tashlanmasa, proxy jadvali eskiradi va keyingi mijoz hech qachon olmagan manzil uchun yozuvni meros qilib olishi mumkin. Holatni ip -6 neigh show proxy bilan tasdiqlang.
Proxyni vaqtinchalik yechim deb biling. Tunnelning /64 si uchun routerga qaratilgan statik yo‘l mijoz almashinuviga bardosh beradi va hech qanday imtiyozli shell ilgagini talab qilmaydi.
Yo‘lni tashqariga kuzatib boring, sakrab-sakrab
Tashqariga uch bosqichda sinang: avval routerning tunnel manzili, keyin LAN xosti, uchinchisi traceroute6 orqali ommaviy manzil. Hovuzni birinchisi, yo‘naltirish va LAN xavfsizlik devorini ikkinchisi, yuqori tomon orqali qaytish yo‘lini uchinchisi isbotlaydi. Har bir muvaffaqiyatsizlik butun dizaynni qaytadan ochish o‘rniga izlanishni bitta qurilmaga toraytiradi.
Tunnelning MTU sini kuzating, chunki yo‘ldagi IPv6 routerlari sizning o‘rningizga bo‘laklamaydi. Juda katta MTU toza muvaffaqiyatsizlik o‘rniga packet-too-big xatosi va to‘xtab qolgan TLS sifatida ko‘rinadi. Uni aniq belgilang va chegaraga yaqin yuk bilan sinang.