Du LAN tinklai, vienas WireGuard mazgas ir IPv6 adresų planas, kuris turi atsakyti į tris atskirus klausimus: koks priešdėlis, koks adresas priklauso kiekvienam maršrutizatoriui ir kuris partneris valdo kurį potinklį. Viena klaida bet kuriame iš jų sukuria tunelį, kuris atlieka rankos paspaudimą ir nieko nemaršrutizuoja. Toliau pateiktas planas ta tvarka pereina privatų dviejų vietų dizainą. Jis sąmoningai nesuteikia IPv6 interneto prieigos.

Nuspręskite, kam skirtas priešdėlis

Unikalus vietinis priešdėlis iš fd00::/8 yra natūralus pasirinkimas, kai tikslas yra privatus pasiekiamumas tarp vietų. Jis išlieka stabilus nepriklausomai nuo to, kuris tiekėjas aptarnauja kiekvieną vietą, ir nėra skelbiamas globalioje maršrutizavimo lentelėje, todėl negali nutekinti jūsų vidinės numeracijos į internetą.

Ta pati savybė yra apribojimas. ULA nesuteikia jokio viešo grįžimo kelio, nes joks aukštesnio lygio tiekėjas nežino, kad jį reikia maršrutizuoti į jūsų šliuzą. Jei reikalavimas apima IPv6 interneto išėjimą, jums reikia skirto ploto iš tiekėjo, kuris jį maršrutizuoja pas jus, ir tai yra atskiras dizaino sprendimas su savo priešdėlio dydžiu.

Nemanote, kad kiekvienam diegimui reikia /48. RFC 6177 nutolino nuo vieno privalomo galinės vietos dydžio, o teisingas dydis priklauso nuo tinklų, kuriuos administruosite, skaičiaus. Generuokite ULA naudodami RFC 4193 procedūrą, o ne išgalvokite priešdėlį, kurį galėtų naudoti ir kita organizacija. Įrašykite rezultatą į adresų planą prieš konfigūruojant bet kurį įrenginį, nes priešdėlis, kurio niekas neužfiksavo, yra priešdėlis, kurį kažkas naudos iš naujo.

Padalinkite priešdėlį į vaidmenis

Toliau pateiktame pavyzdyje naudojamas fd7c:2e91:4a00::/48, o lentelė išdėstyta pagal tai, kur rašomas kiekvienas blokas, o ne pagal vietą. Vertinkite reikšmes kaip pavyzdį ir prieš ką nors diegdami susikurkite savo.

Where it is writtenWhat appears thereBlock usedWhat it establishes
Hub wg0.conf, interface addressA single host address on the tunnelfd7c:2e91:4a00:ff00::1/128The hub's own tunnel identity
Hub wg0.conf, Site A peerTwo ranges in one AllowedIPs line::2/128 and :10::/64That A owns its tunnel address and its LAN
Hub wg0.conf, Site B peerTwo ranges in one AllowedIPs line::3/128 and :20::/64That B owns its tunnel address and its LAN
Site A wg0.conf, interface addressA single host address on the tunnelfd7c:2e91:4a00:ff00::2/128A's identity as the hub sees it
Site B wg0.conf, interface addressA single host address on the tunnelfd7c:2e91:4a00:ff00::3/128B's identity as the hub sees it

LAN blokai yra /64, nes įprastas SLAAC tikisi 64 bitų sąsajos identifikatoriaus. LAN padalijimas į mažesnį bloką sulaužo šią prielaidą daugumoje mazgų, o eksploatacinės išlaidos neatsiperka adresų taupymu privačiame plane. Abu LAN blokai imami iš /48 vidurio, o žemas diapazonas paliekamas laisvas vėlesnėms vietoms.

Tunelio adresai yra administracinis fondas, o ne tinklas jungtyje. Kiekviena sąsaja gauna po vieną /128 iš jo, todėl joks mazgas nepriima bendro potinklio tunelyje ir kaimynų aptikimas neveikia ten, kur jo nereikia. Laikykite vaidmenis atskirai ir užregistruokite juos organizacijos adresų plane, kad vėlesnė vieta nenaudotų bloko iš naujo.

Suteikite kiekvienam maršrutizatoriui vieną tunelio adresą

Priskirkite po vieną /128 kiekvienam maršrutizatoriui ir išsaugokite veikiančio mazgo esamus raktus ir galinius taškus. Trys toliau pateiktos reikšmės skiriasi tik mazgo dalyje.

Hub:    Address = fd7c:2e91:4a00:ff00::1/128
Site A: Address = fd7c:2e91:4a00:ff00::2/128
Site B: Address = fd7c:2e91:4a00:ff00::3/128

Šis /128 apibūdina vienintelį adresą, priskirtą tai sąsajai. Jis nieko nesako apie tai, kiek paskirties taškų partneris gali maršrutizuoti, nes pasiekiamumas išreiškiamas AllowedIPs, o ne sąsajos priešdėlyje.

Kiekvienam vietos maršrutizatoriui taip pat reikia adreso jo LAN bloke ir būdo jį paskirstyti, dažniausiai maršrutizatoriaus skelbimų SLAAC. WireGuard nesiunčia tų skelbimų už jus ir nesujungia dviejų LAN tinklų. Vietos maršrutizatorius yra maršrutizatorius abiem kryptimis.

Įdėkite potinklio nuosavybę į AllowedIPs

Mazgo partnerio įrašas A vietai valdo A tunelio adresą ir A LAN tinklą, ir ši pora yra visas nuosavybės pareiškimas. Niekas kitas toje partnerio dalyje neturi aprašyti vietos.

AllowedIPs = fd7c:2e91:4a00:ff00::2/128, fd7c:2e91:4a00:10::/64

B vietos partnerio įrašas valdo atitinkančią porą, ir simetrija čia svarbesnė už glaustumą. Perskaitykite abi eilutes kartu ir nuosavybės pasiskirstymas tampa matomas vienu žvilgsniu.

AllowedIPs = fd7c:2e91:4a00:ff00::3/128, fd7c:2e91:4a00:20::/64

Tai dvi atskiros partnerio dalys, o ne du sąrašai, konkuruojantys dėl vieno partnerio. WireGuard naudoja AllowedIPs abiem kryptimis: jis parenka partnerį išeinančiam tikslui ir atmeta gaunamą paketą, kurio šaltinis neatitinka diapazono, priskirto partneriui, kuris jį iššifravo. Davus visą /48 abiem partneriams, ta antroji patikra būtų išjungta ir nublukintų, kuri vieta valdo kurį bloką. Būtent šis skirtumas leidžia neteisingą šaltinio adresą matyti, o ne tyliai priimti.

Kiekvienai vietai reikia tik tų paskirties taškų, kurie pasiekiami per jos mazgo partnerį: A vieta išvardija mazgo adresą, B vietos tunelio adresą ir B LAN tinklą, o B vieta išvardija priešingą rinkinį. Sąrašai sąmoningai asimetriški, nes kiekvienas maršrutizatorius mato skirtingą topologijos pusę. Rašykite abu iš adresų plano, o ne iš kitos vietos konfigūracijos, nes taip pasenęs diapazonas išgyvena pernumeravimą.

Su wg-quick šie diapazonai taip pat sukuria maršrutus. Su systemd-networkd arba rankiniu būdu patys pridėkite atitinkamus maršrutus; kitaip tunelis neša paketus, kurių branduolys į jį niekada nesiunčia.

Užbaikite perdavimą ir išbandykite abi kryptis

Įjunkite IPv6 perdavimą mazge ir abiejuose vietos maršrutizatoriuose, o perdavimo politikoje leiskite reikalingas tarpvietines paslaugas. Laikykite ICMPv6 Packet Too Big pranešimus naudojamus, nes jų atmetimas sugriauna kelio MTU aptikimą ir sukelia didelių perdavimų sustojimus, kurie atrodo kaip programų gedimai. Mazgas, kuris persiunčia be ugniasienės leidimo, paketą meta tarp maršrutizavimo ir tunelio. Šį gedimo režimą verta žinoti, nes tunelis lieka veikti ir miršta tik kai kurie srautai.

sysctl net.ipv6.conf.all.forwarding
ip -6 route
ping -6 -c 3 fd7c:2e91:4a00:20::1

Išbandykite iš A vietos mazgo į B vietos mazgą ir tada priešinga kryptimi. Ping į mazgo tunelio adresą išbando tik pirmą šuolį ir praeis net kai LAN maršrutai neteisingi. Būtent mazgo-į-mazgą srautas įrodo planą.

Išorinė WireGuard jungtis gali veikti per IPv4, kol vidinis srautas yra IPv6, ir ši nepriklausomybė naudinga migracijos metu. Jei vėliau pridedamas globalus IPv6 išėjimas, peržiūrėkite tiekėjo priskyrimą, šaltinio adreso pasirinkimą ir grįžimo maršrutizavimą kaip naują dizaino žingsnį; aukščiau pateiktas privatus planas tebegalioja srautui tarp vietų.

Susiję straipsniai