Երկու LAN, մեկ WireGuard հանգույց և IPv6 հասցեների պլան, որը պետք է պատասխանի երեք առանձին հարցերի՝ որ նախածանցը, որ հասցեն է պատկանում յուրաքանչյուր երթուղիչի, և որ զուգորդն է տիրապետում որ ենթացանցին։ Դրանցից մեկի սխալը ստեղծում է թունել, որը ձեռքսեղմում է անում և ոչինչ չի երթուղավորում։ Ստորև բերված պլանը նույն հերթականությամբ անցնում է մասնավոր երկու տեղամասի նախագծով։ Այն միտումնավոր չի ապահովում IPv6 ինտերնետ հասանելիություն։

Որոշեք, թե ինչի համար է նախածանցը

fd00::/8-ից եզակի տեղական նախածանցը բնական ընտրություն է, երբ նպատակը տեղամասերի միջև մասնավոր հասանելիությունն է։ Այն մնում է կայուն անկախ այն բանից, թե որ ISP-ն է սպասարկում յուրաքանչյուր վայր, և չի հայտարարվում գլոբալ երթուղավորման աղյուսակում, ուստի չի կարող ձեր ներքին համարակալումը արտահոսել ինտերնետ։

Նույն հատկությունը սահմանափակումն է։ ULA-ն հանրային վերադարձի ուղի չի տալիս, քանի որ ոչ մի վերին հոսք չգիտի, թե այն պետք է երթուղավորել դեպի ձեր դարպասը։ Եթե պահանջը ներառում է IPv6 ինտերնետ ելք, ձեզ անհրաժեշտ է հատկացում մատակարարից, որը այն երթուղավորում է ձեզ, և դա առանձին նախագծային որոշում է իր նախածանցի չափով։

Չենթադրեք, որ յուրաքանչյուր տեղակայում /48 է պահանջում։ RFC 6177 հեռացավ վերջնական տեղամասի մեկ պարտադիր չափից, և ճիշտ չափը հետևում է այն ցանցերի քանակին, որոնք դուք կշահագործեք։ Ստեղծեք ULA-ն RFC 4193 ընթացակարգով, այլ ոչ թե հորինեք նախածանց, որը կարող է օգտագործել նաև մեկ այլ կազմակերպություն։ Արդյունքը գրեք հասցեների պլանում նախքան որևէ սարք կարգավորելը, որովհետև նախածանցը, որը ոչ ոք չի գրանցել, այն նախածանցն է, որը ինչ-որ մեկը կրկին կօգտագործի։

Բաժանեք նախածանցը դերերի

Ստորև բերված օրինակը օգտագործում է fd7c:2e91:4a00::/48, և աղյուսակը կազմակերպված է ըստ այն բանի, թե որտեղ է գրվում յուրաքանչյուր բլոկ, այլ ոչ թե ըստ տեղամասի։ Վերաբերվեք արժեքներին որպես օրինակ և ստեղծեք ձերը նախքան որևէ բան տեղակայելը։

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 բլոկները /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 ելք, վերանայեք մատակարարի հատկացումը, աղբյուրի հասցեի ընտրությունը և վերադարձի երթուղավորումը որպես նոր նախագծային քայլ. վերևի մասնավոր պլանը մնում է վավեր միջտեղամասային երթևեկության համար։

Առնչվող հոդվածներ