IPv6 ni ikki sayt orasida mavjud VPN orqali marshrutlash
Faqat IPv4 bo'lgan WAN ham ichki IPv6 ni tashiy oladi. Selektorlarni, yadro marshrutlarini, uzatishni va javoblarni jimgina tashlab yuboradigan qaytish prefiksini kuzatib boring.
Saytlararo tunnelga IPv6 prefiksini qo'shganingizda, paket diagramma taklif qilganidek harakatlanmaydi. Mahalliy shlyuz butun IPv6 paketini oladi, shifrlaydi va oldiga ichkaridagiga emas, oxirgi nuqtalarning manzillari bilan belgilanadigan tashqi IP sarlavha qo'yadi. Uzoq shlyuz o'sha tashqi sarlavhani olib tashlaydi va asl paketni o'z LAN tarmog'iga uzatadi, u yerda paket yana oddiy IPv6 paketi bo'ladi. Tashqi tunnel va ichki trafik bitta kalitni, bitta oxirgi nuqta juftini bo'lishadigan va boshqa hech narsani bo'lishmaydigan ikki alohida suhbatdir.
Ikki sarlavha, ikki manzil oilasi
IPsec tunnel rejimida ichki IPv6 paketi ESP sarlavhasi orqasidagi yukka aylanadi. O'sha ESP paketini tashayotgan tashqi sarlavha IPv4 yoki IPv6 bo'lishi mumkin va local_addrs hamda remote_addrs ga ergashadi. WireGuard xuddi shu ishni kamroq marosim bilan qiladi: ichki paket sherikning oxirgi nuqtasiga ketayotgan UDP datagrammaning yuki. Ikkalasi ham ichki sarlavhani tegilmagan holda qoldiradi, shuning uchun uzoq tomon uni dekapsulyatsiyadan keyin marshrutlashi mumkin.
Saytlar orasidagi yo'l faqat UDP 4500 ni ko'radi — IPsec NAT o'tishidan foydalanganda, yoki standart WireGuard tinglovchisi uchun UDP 51820. Yo'ldagi har qanday marshrutizator faqat IPv4 bo'lishi mumkin, IPv6 trafigi esa baribir o'tadi, chunki u bu yo'lda hech qachon IPv6 paketi sifatida ko'rinmaydi. Bu toza birinchi bo'linishni beradi: tcpdump -ni eth0 udp port 51820 shifrlangan yo'lni, tcpdump -ni wg0 ip6 ichki trafikni ko'rsatadi. Tashqi suratga olish gavjum, ichkisi jim bo'lsa, yadro IPv6 ni tunnelga qo'ymayapti; bu marshrutlash yoki siyosat, bog'lanish holati emas.
Shlyuz uzatishda ichki Hop Limit ni ham kamaytiradi, shuning uchun oxirgi nuqtalar IPv6 yo'lida marshrutizator hisoblanadi. Tashqi sakrashlar soni va ichki Hop Limit mustaqil harakatlanadi, uzoq shlyuzda o'lgan paket esa uzatishda o'ldi, shifrlashda emas.
Selektorlar va AllowedIPs ruxsatlar ro'yxatidir
IKEv2 child SA qaysi ichki prefikslarni tashiy olishini kelishadi. strongSwan 5.9 va undan keyingi versiyalarda ularni swanctl.conf ichida yozish shunday ko'rinadi:
children {
net6 {
local_ts = 2001:db8:aa::/48
remote_ts = 2001:db8:bb::/48
mode = tunnel
esp_proposals = aes256gcm16-prfsha384-ecp384
start_action = trap
}
}
Agar local_ts va remote_ts ni tashlab ketsangiz, strongSwan ularni o'zi tanlagan interfeysning quyi tarmoqlaridan chiqaradi. Dual-stack xostda bu qisqa yo'l ko'pincha faqat IPv4 juftini beradi: SA ko'tariladi, IPv6 esa ESP kodiga yetmasdan rad etiladi. Ikki prefiksni ham yozish SA ni ularni tashishga qodir qiladi va start_action = trap uni birinchi mos paketda ko'taradi.
WireGuard ikkita ish qiladigan bitta ro'yxatga ega. Sherik blokida AllowedIPs = 2001:db8:bb::/48, fd00:bb::/48 ham jo'natishda o'rnatiladigan marshrut, ham qabul qilishda qo'llaniladigan filtrdir: ichki manbasi o'sha sherikning ro'yxatidan tashqariga tushgan deshifrlangan paket jimgina tashlanadi. wg-quick har bir yozuv uchun marshrut qo'shadi, shuning uchun quyidagi sherik bloki alohida ip -6 route buyrug'iga muhtoj emas.
[Interface]
Address = 2001:db8:aa:ff::1/64, fd00:aa:ff::1/64
ListenPort = 51820
[Peer]
PublicKey = <site-b-public-key>
Endpoint = 203.0.113.20:51820
AllowedIPs = 2001:db8:bb::/48, fd00:bb::/48
Ikki ro'yxat ham ko'zgu kabi bo'lishi kerak: B sayti A saytining prefiksini uzoq selektor sifatida qabul qiladi va uni orqaga marshrutlaydi, tunnel esa faqat ikki yo'nalish kelishganda ishlaydi. Asimmetrik ro'yxat eng ko'p vaqt yeydigan simptomni beradi — sog'lom qo'l siqish, bir tomonda harakatlanayotgan hisoblagichlar va A dan B ga muvaffaqiyatli o'tadigan ping, holbuki B dan hech narsa A ga yetmaydi.
Uzatish, marshrutlar va qaytish prefiksi
Linux siz aytmaguningizcha IPv6 ni uzatmaydi va sozlama interfeysga emas, namespace ga tegishli:
sysctl -w net.ipv6.conf.all.forwarding=1
ip -6 route add 2001:db8:bb::/48 dev wg0
ip -6 route get 2001:db8:bb::10 from 2001:db8:aa::10
Ikkinchi qator marshrutga asoslangan loyihalarda odamlar unutadigan qatordir. Siyosatga asoslangan IPsec prefikslarga mos XFRM siyosatini o'rnatadi, ammo vti6 yoki WireGuard bilan marshrutga asoslangan sozlama o'sha qurilmaga qaratilgan haqiqiy IPv6 marshrutini talab qiladi. sysctl ni /etc/sysctl.d/ ostida saqlang; aks holda qayta yuklash uzatishni jimgina o'chirilgan holatga qaytaradi.
Uzatishning bilishga arziydigan yon ta'siri bor: yadro undan keyin marshrutizator e'lonlarini e'tiborsiz qoldiradi, agar net.ipv6.conf.<wan>.accept_ra 2 bo'lmasa; shuning uchun WAN manzili SLAAC orqali keladigan shlyuz uzatishni yoqqan paytda standart marshrutidan ayrilishi mumkin. O'sha interfeysda accept_ra = 2 ni o'sha faylda sozlang va marshrut omon qoladi. B saytining yadrosi ham tunnel shlyuzidan 2001:db8:aa::/48 ni o'rganishi kerak — statik marshrut yoki tunnel ustidagi marshrutlash protokoli orqali, aks holda javob B ning o'z tarmog'ida o'ladi.
Uzilishni joylashtiradigan to'rt qadamli tekshiruv
Shu tartibda ishlang va muvaffaqiyatsiz bo'lgan birinchi qadamda to'xtang, chunki har bir keyingi qadam oldingilarga bog'liq.
- Selektorlar:
swanctl --list-saschild SA da IPv6 prefiks juftini, yokiwg show wg0 allowed-ipsuzoq prefiksni yangilatest-handshakesbilan ko'rsatishi kerak. - Yadro marshruti:
ip -6 route get 2001:db8:bb::10tunnel qurilmasi bilan javob berishi kerak, WAN interfeysi bilan emas. - Ichki suratga olish:
tcpdump -ni wg0 ip6haqiqiy LAN xostlari orasida ping qilganda. Chiqayotgan, ammo hech biri qaytmayotgan paketlar B ning marshrutiga yoki xavfsizlik devoriga ishora qiladi; umuman paket yo'qligi 1 yoki 2-qadamga ishora qiladi. - Manzil: B xostida
ss -6 -ltnxizmatning IPv6 da tinglayotganini tasdiqlaydi, mahalliy xavfsizlik devori hisoblagichlari esa paket qabul qilingan yoki tashlanganini ko'rsatadi.
MTU o'sha o'tishga tegishli. IPv6 marshrutizatorlari fragmentlashtirmaydi, shuning uchun haddan tashqari katta paket tashlanadi va Packet Too Big jo'natuvchiga qaytadi. Agar qo'l siqishlar va kichik ping lar ishlayotgan bo'lsa-yu, lekin fayl uzatish tiqilib qolsa, yukni o'tguncha kichraytiring: ping -6 -s 1400 -c 3 2001:db8:bb::10. WireGuard interfeyslari standart ravishda 1420 bayt MTU ga ega, IPv4 ustidagi IPsec esa ko'proq olib tashlaydi, shuning uchun ichki MTU ni sozlash ICMPv6 ni tashlaydigan xavfsizlik devori orqali yo'l MTU sini izlashdan afzal.
Xavfsizlik devori muammosiga o'xshaydigan nosozlik rejimlari
Eng keng tarqalgani umuman xavfsizlik devori emas: xizmat :: o'rniga 0.0.0.0 ga bog'lanadi, AAAA yozuvi mavjud va mijoz IPv6 orqali tez rad javobini oladi, uni dual-stack brauzer IPv4 ga qaytib yashiradi. Faqat ba'zi dasturlar muvaffaqiyatsiz bo'lsa, qoidalar to'plamiga tegishdan oldin tinglovchi oilani tekshiring.
Ikkinchisi ICMPv6 filtrlashdir. Neighbor Discovery va Packet Too Big normal ishning qismidir, diagnostika emas, va barcha ICMPv6 ni tashlaydigan siyosat ulanadigan, autentifikatsiya qiladigan va keyin kichik paketdan katta hamma narsada tiqilib qoladigan tunnel hosil qiladi. Yo'l bog'liq bo'lgan turlarga ruxsat bering va hisoblagichlarni yoniq qoldiring, tashlanish ko'rinishi uchun.
Uchinchisi tunnelga qo'shilgan, ammo unga egalik qiluvchi saytning manzil rejasiga hech qachon qo'shilmagan prefiks, shuning uchun hech bir marshrutizator uni e'lon qilmaydi va hech bir xost undan javob bera olmaydi. Bitta prefiks va bitta xost jufti bilan boshlang, ikki yo'nalishni to'rt qadam bilan isbotlang, keyin qolganini qo'shing; buzilgan prefiks qayta qurish o'rniga sozlamada bitta qator bo'lib qoladi. Ochiq saqlashga arziydigan yagona rasmiy manba RFC 8200 bo'lib, tunnel tashayotgan sarlavhani belgilaydi.