IPv6 planavimas dviejų vietų WireGuard mazgui: priešdėlis, partneriai, maršrutai
Peržiūrėkite privatų IPv6 mazgą dviem LAN tinklams: pasirinkite priešdėlį, rezervuokite tunelio adresus, o tada leiskite AllowedIPs išreikšti, kuris partneris valdo kiekvieną potinklį.
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 written | What appears there | Block used | What it establishes |
|---|---|---|---|
| Hub wg0.conf, interface address | A single host address on the tunnel | fd7c:2e91:4a00:ff00::1/128 | The hub's own tunnel identity |
| Hub wg0.conf, Site A peer | Two ranges in one AllowedIPs line | ::2/128 and :10::/64 | That A owns its tunnel address and its LAN |
| Hub wg0.conf, Site B peer | Two ranges in one AllowedIPs line | ::3/128 and :20::/64 | That B owns its tunnel address and its LAN |
| Site A wg0.conf, interface address | A single host address on the tunnel | fd7c:2e91:4a00:ff00::2/128 | A's identity as the hub sees it |
| Site B wg0.conf, interface address | A single host address on the tunnel | fd7c:2e91:4a00:ff00::3/128 | B'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ų.