IPv6-ի պլանավորում երկու տեղամասի WireGuard հանգույցի համար՝ նախածանց, զուգորդներ, երթուղիներ
Աշխատեք երկու LAN-ի համար նախատեսված մասնավոր IPv6 հանգույցի վրա՝ ընտրեք նախածանց, պահուստավորեք թունելի հասցեները, ապա թող AllowedIPs-ը արտահայտի, թե որ զուգորդն է տիրապետում որ ենթացանցին։
Երկու LAN, մեկ WireGuard հանգույց և IPv6 հասցեների պլան, որը պետք է պատասխանի երեք առանձին հարցերի՝ որ նախածանցը, որ հասցեն է պատկանում յուրաքանչյուր երթուղիչի, և որ զուգորդն է տիրապետում որ ենթացանցին։ Դրանցից մեկի սխալը ստեղծում է թունել, որը ձեռքսեղմում է անում և ոչինչ չի երթուղավորում։ Ստորև բերված պլանը նույն հերթականությամբ անցնում է մասնավոր երկու տեղամասի նախագծով։ Այն միտումնավոր չի ապահովում IPv6 ինտերնետ հասանելիություն։
Որոշեք, թե ինչի համար է նախածանցը
fd00::/8-ից եզակի տեղական նախածանցը բնական ընտրություն է, երբ նպատակը տեղամասերի միջև մասնավոր հասանելիությունն է։ Այն մնում է կայուն անկախ այն բանից, թե որ ISP-ն է սպասարկում յուրաքանչյուր վայր, և չի հայտարարվում գլոբալ երթուղավորման աղյուսակում, ուստի չի կարող ձեր ներքին համարակալումը արտահոսել ինտերնետ։
Նույն հատկությունը սահմանափակումն է։ ULA-ն հանրային վերադարձի ուղի չի տալիս, քանի որ ոչ մի վերին հոսք չգիտի, թե այն պետք է երթուղավորել դեպի ձեր դարպասը։ Եթե պահանջը ներառում է IPv6 ինտերնետ ելք, ձեզ անհրաժեշտ է հատկացում մատակարարից, որը այն երթուղավորում է ձեզ, և դա առանձին նախագծային որոշում է իր նախածանցի չափով։
Չենթադրեք, որ յուրաքանչյուր տեղակայում /48 է պահանջում։ RFC 6177 հեռացավ վերջնական տեղամասի մեկ պարտադիր չափից, և ճիշտ չափը հետևում է այն ցանցերի քանակին, որոնք դուք կշահագործեք։ Ստեղծեք ULA-ն RFC 4193 ընթացակարգով, այլ ոչ թե հորինեք նախածանց, որը կարող է օգտագործել նաև մեկ այլ կազմակերպություն։ Արդյունքը գրեք հասցեների պլանում նախքան որևէ սարք կարգավորելը, որովհետև նախածանցը, որը ոչ ոք չի գրանցել, այն նախածանցն է, որը ինչ-որ մեկը կրկին կօգտագործի։
Բաժանեք նախածանցը դերերի
Ստորև բերված օրինակը օգտագործում է fd7c:2e91:4a00::/48, և աղյուսակը կազմակերպված է ըստ այն բանի, թե որտեղ է գրվում յուրաքանչյուր բլոկ, այլ ոչ թե ըստ տեղամասի։ Վերաբերվեք արժեքներին որպես օրինակ և ստեղծեք ձերը նախքան որևէ բան տեղակայելը։
| 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 բլոկները /64 են, քանի որ սովորական SLAAC-ը ակնկալում է 64-բիթ ինտերֆեյսի նույնացուցիչ։ LAN-ը ավելի փոքր բլոկի բաժանելը խախտում է այդ ենթադրությունը հյուրընկալողների մեծ մասում, և գործառնական ծախսը արժանի չէ հասցեների խնայողությանը մասնավոր պլանում։ Երկու LAN բլոկներն էլ գալիս են /48-ի միջից՝ ցածր տիրույթը թողնելով ազատ հետագա տեղամասերի համար։
Թունելի հասցեները վարչական պաշար են, ոչ թե կապի վրա ցանց։ Յուրաքանչյուր ինտերֆեյս դրանից ստանում է մեկ /128, ուստի ոչ մի հյուրընկալող չի ենթադրում ընդհանուր ենթացանց թունելում, և հարևանների հայտնաբերումը չի աշխատում այնտեղ, որտեղ դա պետք չէ։ Դերերը պահեք անջատ և գրանցեք դրանք կազմակերպության հասցեների պլանում, որպեսզի հետագա տեղամասը բլոկը կրկին չօգտագործի։
Յուրաքանչյուր երթուղիչի տվեք մեկ թունելի հասցե
Նշանակեք մեկ /128 յուրաքանչյուր երթուղիչի և պահպանեք աշխատող հանգույցի առկա բանալիներն ու վերջնակետերը։ Ստորև բերված երեք արժեքները տարբերվում են միայն հոսթի մասում։
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
Այս /128-ը նկարագրում է այդ ինտերֆեյսին նշանակված միակ հասցեն։ Այն ոչինչ չի ասում այն մասին, թե քանի նպատակակետ կարող է երթուղավորել զուգորդը, որովհետև հասանելիությունն արտահայտվում է AllowedIPs-ում, ոչ թե ինտերֆեյսի նախածանցում։
Տեղամասի յուրաքանչյուր երթուղիչի անհրաժեշտ է նաև հասցե իր LAN բլոկում և այն բաշխելու միջոց, սովորաբար երթուղիչի հայտարարություններ SLAAC-ի համար։ WireGuard-ը չի ուղարկում այդ հայտարարությունները ձեր փոխարեն և չի միացնում երկու LAN-երը։ Տեղամասի երթուղիչը երթուղիչ է երկու ուղղությամբ։
Տեղադրեք ենթացանցի սեփականությունը AllowedIPs-ում
Հանգույցի զուգորդի գրառումը A տեղամասի համար տիրապետում է A-ի թունելի հասցեին և A-ի LAN-ին, և այդ զույգը սեփականության ամբողջ հայտարարությունն է։ Այդ զուգորդի բաժնում ուրիշ ոչինչ պետք չէ նկարագրի տեղամասը։
AllowedIPs = fd7c:2e91:4a00:ff00::2/128, fd7c:2e91:4a00:10::/64
B տեղամասի զուգորդի գրառումը տիրապետում է համապատասխան զույգին, և այստեղ համաչափությունն ավելի կարևոր է, քան հակիրճությունը։ Կարդացեք երկու տողերը միասին, և սեփականության բաժանումը տեսանելի է դառնում մեկ հայացքով։
AllowedIPs = fd7c:2e91:4a00:ff00::3/128, fd7c:2e91:4a00:20::/64
Սրանք երկու առանձին զուգորդի բաժիններ են, ոչ թե մեկ զուգորդի համար մրցող երկու ցանկեր։ WireGuard-ը AllowedIPs-ն օգտագործում է երկու ուղղությամբ՝ այն ընտրում է զուգորդը ելքային նպատակակետի համար, և մերժում է ներգնա փաթեթը, որի աղբյուրը չի համապատասխանում այն զուգորդին հատկացված տիրույթին, որը վերծանել է այն։ Ամբողջ /48-ը երկու զուգորդներին տալը կանջատեր այդ երկրորդ ստուգումը և կմշուշեր, թե որ տեղամասն է տիրապետում որ բլոկին։ Հենց այդ տարբերությունն է սխալ աղբյուրի հասցեն դարձնում տեսանելի՝ լուռ ընդունվելու փոխարեն։
Յուրաքանչյուր տեղամասի պետք են միայն այն նպատակակետերը, որոնք հասանելի են իր հանգույց-զուգորդի միջով՝ A տեղամասը թվարկում է հանգույցի հասցեն, B տեղամասի թունելի հասցեն և B-ի LAN-ը, իսկ B տեղամասը թվարկում է հակառակ բազմությունը։ Ցանկերը միտումնավոր ասիմետրիկ են, որովհետև յուրաքանչյուր երթուղիչ տեսնում է տոպոլոգիայի տարբեր կողմը։ Երկուսն էլ գրեք հասցեների պլանից, այլ ոչ թե մյուս տեղամասի կոնֆիգուրացիայից, որովհետև այդպես է հնացած տիրույթը վերապրում վերահամարակալումը։
wg-quick-ի դեպքում այս տիրույթները նաև երթուղիներ են ստեղծում։ systemd-networkd-ի կամ ձեռքով տեղադրման դեպքում ինքներդ ավելացրեք համարժեք երթուղիները, այլապես թունելը տեղափոխում է փաթեթներ, որոնք միջուկը երբեք չի ուղարկում դրա մեջ։
Ավարտեք փոխանցումը և ստուգեք երկու ուղղությունները
Միացրեք IPv6 փոխանցումը հանգույցում և տեղամասերի երկու երթուղիչներում, և փոխանցման քաղաքականության մեջ թույլատրեք անհրաժեշտ միջտեղամասային ծառայությունները։ ICMPv6 Packet Too Big հաղորդագրությունները պահեք օգտագործելի, որովհետև դրանք դեն նետելը կոտրում է ուղու MTU հայտնաբերումը և ստեղծում է մեծ փոխանցումների կանգեր, որոնք նման են հավելվածի խափանումների։ Հանգույցը, որը փոխանցում է առանց հրակայուն պատի թույլտվության, փաթեթը դեն է նետում երթուղավորման և թունելի միջև։ Այս խափանման ռեժիմն արժե իմանալ, որովհետև թունելը մնում է աշխատունակ և մահանում են միայն որոշ հոսքեր։
sysctl net.ipv6.conf.all.forwarding
ip -6 route
ping -6 -c 3 fd7c:2e91:4a00:20::1
Ստուգեք A տեղամասի հոսթից B տեղամասի հոսթ, ապա հակառակ ուղղությամբ։ Հանգույցի թունելի հասցեին ping-ը փորձարկում է միայն առաջին թռիչքը և կանցնի նույնիսկ այն դեպքում, երբ LAN-ի երթուղիները սխալ են։ Հոսթից հոսթ հոսքն է, որ ապացուցում է պլանը։
Արտաքին WireGuard կապը կարող է աշխատել IPv4-ի վրայով, մինչ ներքին երթևեկությունը IPv6 է, և այդ անկախությունը օգտակար է միգրացիայի ընթացքում։ Եթե ավելի ուշ ավելացվի գլոբալ IPv6 ելք, վերանայեք մատակարարի հատկացումը, աղբյուրի հասցեի ընտրությունը և վերադարձի երթուղավորումը որպես նոր նախագծային քայլ. վերևի մասնավոր պլանը մնում է վավեր միջտեղամասային երթևեկության համար։