IPIP WireGuard viduje: tie papildomi 20 baitų, kurių niekas neįtraukė į biudžetą
IPIP WireGuard viduje kainuoja 20 baitų daugiau. Sudarykite biudžetą tinkamame sluoksnyje, prieš kaltindami fragmentaciją dėl įstrigusio perdavimo gyvame tunelyje.
Maži pingai visą dieną keliauja per tunelį, atvyksta SSH reklaminė juosta, o tada sesija sustingsta tą akimirką, kai prasideda failo perdavimas. Šis modelis rodo baitų biudžetą, skaičiuotą netinkamame sluoksnyje, kur išorinis tunelis buvo matuojamas pagal savo paties sąnaudas, o vidinio niekas neatėmė. Įdėtas IPIP paketas WireGuard yra tiesiog dar vienas IP paketas, ir būtent todėl jis sunaudoja baitus, kurių niekada nerezervavote. Pataisa yra aritmetika, ir ji telpa į tris komandas bei vieną lentelę.
Simptomas, kuris tai išduoda
Fragmentacijos problemos skelbiasi dydžiu, niekada adresais. Jūsų partneris valandą atsakinėja į 56 baitų ping, o paskui nutyla ties 1400 baitų, kol tunelis lieka pakeltas ir jokia trasa nepasikeitė. Rankos paspaudimas telpa, pirmas visas TCP langas ne, ir perdavimas sustoja po kelių sekundžių, kai atrodė sveikas.
Išmatuokite lubas prieš ką nors redaguodami, nes neišmatuotos lubos yra tos, kurių vysisite du kartus. Nusiųskite vieną zondą žemiau įtartino dydžio su nustatytu do-not-fragment bitu, ping -M do -s 1000 10.9.0.2, tada pakartokite jį tokiu dydžiu, kurį jau žinote esant per didelį. Kai apsivertimas seka naudingosios apkrovos dydį, o paskirties vieta nesikeičia, maršrutizavimas daro savo darbą ir biudžete trūksta vienos antraštės.
Skaičiuokite kiekvieną antraštę vieną kartą, tinkamame sluoksnyje
Pradėkite nuo mažiausio MTU kelyje, o ne nuo tunelio sąsajos, nes siena yra aukščiau abiejų galų. WireGuard išleidžia 60 baitų išoriniam IPv4 transportui: 20 IP, 8 UDP ir 32 savo antraštei, o 80 baitų, kai tas transportas yra IPv6. 1420 baitų wg0 palieka 20 baitų atsargos po 1440, kuriuos 1500 baitų kelias tikrai gali pristatyti, ir todėl skaičius, nukopijuotas iš vikio čia vis dar tinka. Nubraižykite visą krūvą diagramoje, nes kitas MTU keitėjas kitaip pasirinks naują apvalų skaičių ir paveldės jūsų klaidą.
| 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 |
Penktoji eilutė yra vieta, kur biudžetai sugenda, nes 1400 baitų, kuriuos neša įdėta sąsaja, jau apima pačias 40 baitų pradinio paketo antraštes. Tik 1360 iš tų baitų pasiekia failą skaitantį procesą. Traktuokite 1400 kaip programos naudingąją apkrovą, kaip kviečia bet kuri diagrama be to stulpelio, ir vidinis įrenginys atsiduria 40 baitų per daug dosnus prieš nepajudėjusią sieną.
Nustatykite du MTU atskirai
Nešėjas ir įdėtas įrenginys yra atskiri objektai, todėl kiekvienam reikia savo vertės. Taikykite juos šia tvarka, nes įdėtas įrenginys nieko nepaveldi iš nešėjo:
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
Taisyklė, kurią verta atsiminti: vidinis MTU = išorinis MTU - 20, kai paketas, kurį neša IPIP tunelis, yra IPv4, ir - 40, kai tik bet kuri vidinio paketo pusė yra IPv6, nes įdėta antraštė didėja nuo 20 baitų iki 40. Niekas kitas į tą atimtį neįeina. WireGuard sąnaudos jau buvo patirtos, kai pasirinkote 1420, o jų ėmimas du kartus sukuria tunelį, kuris puikiai veikia ir lieka lėtas, kol niekas jo nematuoja. Diegimas, kuriame abu įrenginiai neša apvalų 1400, yra būtent tos klaidos pirštų atspaudas.
IPv6 bet kurioje įdėto paketo pusėje panaikina kiekvieną aukščiau esantį skaičių, todėl perskaičiuokite, o ne kopijuokite skaičių iš panašios svetainės. Atimamos antraštės yra po 40 baitų, kai tik IPv6 pasirodo išoriniame kelyje arba pradiniame datagramoje, o naudingosios apkrovos skaičius krenta lygiai tiek.
Ugniasienės taisyklė, kurios jums tikriausiai nereikia
Tarp dviejų WireGuard partnerių vienintelis dalykas laide yra UDP, todėl įeinanti taisyklė 4 protokolui, numeriui, kurį RFC 2003 priskiria IPv4-IPv4 įdėjimui, nei sukuria įdėto kelio, nei išlaiko jį gyvą. IPIP antraštė gyvena šifruotoje naudingojoje apkrovoje, kur jokia krašto ugniasienė jos nemato. 4 protokolo atidarymas vis tiek nieko neperka, išskyrus dar vieną leistiną kelią į prieglobos kompiuterį.
Politika, kuri mini pradinio paketo šaltinius ir paskirties vietas, priklauso po dekapsuliavimo, tunelio sąsajose ir maršrutizavimo lentelėje. Įdėkite ją ten, ir krašto taisyklė gali likti uždaryta.
Ką WireGuard iš tikrųjų validuoja
AllowedIPs sprendžia apie WireGuard nešamo paketo šaltinį, o neša jis IPIP įdėtą paketą. Leidžiamas IPIP šaltinis priimamas net tada, kai vidinė antraštė nurodo prieglobos kompiuterį, į kurį mieliau nenukreiptumėte. Taigi pradinis šaltinis nėra tai, ką partneris patikrino už jus, ir ta vidinė adresų pora po dekapsuliavimo reikalauja savo vykdymo.
Apvalkalas suteikia maršrutizavimo struktūrą, o ne antrą kriptografijos sluoksnį. IPIP vadinti papildoma apsauga WireGuard viduje reiškia apibūdinti kitokį dizainą.
Tikrinkite kopėčiomis, o ne vienu ping
Tikrinkite dydžius, kurie apima apskaičiuotą ribą, tada patvirtinkite, ką branduolys mano apie abu įrenginius. Kai 1360 baitų naudingosios apkrovos plius 40 baitų antraščių sudaro 1400, pirmasis aidas žemiau telpa, o antrasis sėdi vienu baitu už lubų:
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
Švarus praėjimas žemiau lubų ir nesėkmė pirmuoju dydžiu virš jų reiškia, kad aritmetika laikosi nuo pradžios iki pabaigos. Tada iš naujo paleiskite perdavimą, kuris iš pradžių strigo, nes sintetinis zondas įrodo biudžetą ir nieko nesako apie siuntėjo pačias rašymo dydžio vertes. Jei įdėtas kelias vis dar lūžta tokiu dydžiu, kurį įrodėte telpantį, patikrinkite tolimojo galo dekapsuliavimą ir maršrutus prieš nupjaudami dar dešimt baitų nuo MTU.