WireGuard ichida IPIP: hech kim byudjetga kiritmagan o'sha qo'shimcha 20 bayt
IPIP WireGuard ichida 20 qo'shimcha bayt sarflaydi. Jonli tunnelda to'xtab qolgan uzatish uchun fragmentatsiyani ayblashdan oldin byudjetni to'g'ri qatlamda hisoblang.
Kichik ping'lar kun bo'yi tunneldan o'tadi, SSH banneri keladi, so'ngra fayl uzatish boshlangan paytda sessiya qotib qoladi. Bu naqsh noto'g'ri qatlamda hisoblangan bayt byudjetiga ishora qiladi, u yerda tashqi tunnel o'z xarajatiga qarab o'lchangan va ichkarisini hech kim ayirmagan. Ichkariga joylashtirilgan IPIP paketi WireGuard uchun shunchaki yana bitta IP paket, shuning uchun u siz hech qachon zaxiralanmagan baytlarni sarflaydi. Tuzatish arifmetika bo'lib, uchta buyruq va bitta jadvalga sig'adi.
Buni fosh qiladigan alomat
Fragmentatsiya muammosi o'zini o'lcham bilan e'lon qiladi, hech qachon manzillar bilan emas. Sizning hamkoringiz bir soat davomida 56 baytlik ping ga javob beradi, so'ngra tunnel ko'tarilgan va hech qanday marshrut o'zgarmagan holda 1400 baytda jim qoladi. Qo'l berib ko'rishish sig'adi, birinchi to'liq TCP oynasi sig'maydi va uzatish sog'lom ko'ringanidan bir necha soniya o'tib to'xtaydi.
Biron narsani tahrirlashdan oldin shiftni o'lchang, chunki o'lchanmagan shift ikki marta quvadigan shiftingizdir. Shubhali o'lchamdan pastda do-not-fragment biti o'rnatilgan bitta zond yuboring, ping -M do -s 1000 10.9.0.2, so'ngra uni juda katta ekanini bilgan o'lchamda takrorlang. Manzil o'zgarmay turib, burilish yuk o'lchamiga ergashsa, marshrutlash o'z ishini qilmoqda va byudjetdan bitta sarlavha yetishmaydi.
Har bir sarlavhani bir marta, to'g'ri qatlamda sanang
Tunnel interfeysidan emas, yo'ldagi eng kichik MTU dan boshlang, chunki devor ikkala uchdan ham yuqorida turadi. WireGuard IPv4 tashqi transportga 60 bayt sarflaydi: 20 IP uchun, 8 UDP uchun va 32 o'z sarlavhasi uchun, bu transport IPv6 bo'lsa 80 bayt. 1420 baytlik wg0 1500 baytlik yo'l haqiqatan yetkaza oladigan 1440 ostida 20 bayt zaxira saqlaydi, shuning uchun vikidan ko'chirilgan raqam bu yerga ham to'g'ri keladi. Butun stekni diagrammaga chizing, chunki keyingi safar MTU ni o'zgartiradigan kishi aks holda yangi yumaloq raqam tanlaydi va sizning xatoyingizni meros qilib oladi.
| Layer | Bytes | Remaining |
|---|---|---|
| Path MTU on the wired link | none yet | 1500 |
| WireGuard outer: IP, UDP, WG header | 60 | 1440 |
| Slack kept for safety | 20 | 1420 (wg0) |
| IPIP header inside the tunnel | 20 | 1400 (ipip0) |
| Original IPv4 and TCP headers | 40 | 1360 payload |
Beshinchi qator byudjetlar buziladigan joy, chunki ichkariga joylashtirilgan interfeys olib yuradigan 1400 bayt asl paketning o'z 40 bayt sarlavhasini allaqachon ichiga oladi. O'sha baytlardan faqat 1360 tasi faylni o'qiyotgan jarayonga yetadi. 1400 ni ilova yuki deb biling, bu ustunsiz har qanday diagramma sizni shunga chorlaydi, va ichki qurilma qimirlamagan devor oldida 40 bayt ortiqcha saxiy bo'lib qoladi.
Ikki MTU ni alohida belgilang
Tashuvchi va ichkariga joylashtirilgan qurilma alohida obyektlar, shuning uchun har biriga o'z qiymati kerak. Ularni shu tartibda qo'llang, chunki ichkariga joylashtirilgan qurilma tashuvchidan hech narsani meros olmaydi:
ip link set wg0 mtu 1420
ip tunnel add ipip0 mode ipip remote 203.0.113.9 local 198.51.100.4
ip link set ipip0 mtu 1400
Yodda tutishga arziydigan qoida: ichki MTU = tashqi MTU - 20, IPIP tunneli olib yuradigan paket IPv4 bo'lsa, va - 40, ichki paketning istalgan tomoni IPv6 bo'lishi bilan, chunki ichki sarlavha 20 baytdan 40 ga o'sadi. Bu ayirishga boshqa hech narsa kirmaydi. WireGuard xarajati siz 1420 ni tanlaganda allaqachon sarflangan edi, uni ikki marta undirish esa mukammal ishlaydigan va hech kim o'lchamaguncha sekin qoladigan tunnel hosil qiladi. Ikkala qurilma ham yumaloq 1400 olib yuradigan joylashtirish aynan o'sha xatoning barmoq izidir.
Ichkariga joylashtirilgan paketning istalgan tomonidagi IPv6 yuqoridagi har bir raqamni bekor qiladi, shuning uchun o'xshash saytdan raqam ko'chirish o'rniga qayta hisoblang. IPv6 tashqi yo'lda yoki asl datagrammada paydo bo'lishi bilan ayiriladigan sarlavhalar har biri 40 bayt bo'ladi, yuk raqami esa aynan shuncha kamayadi.
Sizga ehtimol kerak bo'lmagan xavfsizlik devori qoidasi
Ikki WireGuard hamkor o'rtasida simda bo'lgan yagona narsa UDP, shuning uchun 4 protokol uchun kiruvchi qoida, RFC 2003 IPv4-ichida-IPv4 inkapsulyatsiyasiga bergan raqam, na ichki yo'lni yaratadi, na uni tirik saqlaydi. IPIP sarlavhasi shifrlangan yuk ichida yashaydi, u yerda hech qanday chekka xavfsizlik devori uni ko'rmaydi. 4 protokolni ochish baribir xostga yana bitta ruxsat etilgan yo'ldan boshqa narsa sotib olmaydi.
Asl paketning manbalari va manzillarini eslatuvchi siyosat dekapsulyatsiyadan keyin, tunnel interfeyslarida va marshrutlash jadvalida bo'ladi. Uni o'sha yerga qo'ying, chekka qoida yopiq qolishi mumkin.
WireGuard aslida nimani tekshiradi
AllowedIPs WireGuard olib yuradigan paketning manbasini hukm qiladi va u olib yuradigan narsa IPIP bilan inkapsulyatsiya qilingan paketdir. Ruxsat etilgan IPIP manbasi, ichki sarlavha siz marshrutlashni istamaydigan xostni nomlasa ham qabul qilinadi. Shuning uchun asl manba hamkor siz uchun tekshirgan narsa emas va o'sha ichki manzil jufti dekapsulyatsiyadan keyin o'z tatbiqini talab qiladi.
O'ram marshrutlash tuzilmasini beradi, kriptografiyaning ikkinchi qatlamini emas. IPIP ni WireGuard ichida qo'shimcha himoya deb atash boshqa dizaynni tasvirlaydi.
Bitta ping bilan emas, narvon bilan tekshiring
Hisoblagan chegarangizni ikki tomondan qamrab oluvchi o'lchamlarni sinab ko'ring, so'ngra yadro ikkala qurilma haqida nima deb o'ylashini tasdiqlang. 1360 bayt yuk va 40 bayt sarlavhalar birga 1400 bo'lsa, quyidagi birinchi aks-sado sig'adi, ikkinchisi shiftdan bir bayt narida o'tiradi:
ping -M do -s 1372 10.9.0.2
ping -M do -s 1373 10.9.0.2
wg show wg0
ip -d link show ipip0
Shift ostida toza o'tish va undan yuqoridagi birinchi o'lchamda muvaffaqiyatsizlik arifmetika boshdan oxirigacha turishini bildiradi. So'ngra boshida to'xtab qolgan uzatishni qayta ishga tushiring, chunki sintetik zond byudjetni isbotlaydi va jo'natuvchining o'z yozish o'lchamlari haqida hech narsa demaydi. Agar ichki yo'l siz isbotlagan o'lchamda ham buzilsa, MTU dan yana o'n bayt kesishdan oldin uzoq uchning dekapsulyatsiyasi va marshrutlarini ko'zdan kechiring.