WireGuard-ի ձեռքսեղմումը աշխատում է, բայց գրասենյակի ենթացանցը չի պատասխանում
WireGuard-ը միացված է և պինգ է ուղարկում սերվերին, սակայն նրա LAN-ում ոչինչ չի պատասխանում։ Ստուգեք հաճախորդի նախածանցը, սերվերի փոխանցումը և պատասխանի ուղին։
Ձեռքսեղմումն ավարտվում է, wg show հաղորդում է վերջին փոխանցման մասին, և սերվերի թունելային հասցեն պատասխանում է ping-ին։ Սերվերի LAN-ի հոսթը՝ ոչ։ Երեք պայման պետք է միաժամանակ պահպանվեն՝ հաճախորդը պետք է ուղղորդի LAN-ի նախածանցը թունել, սերվերը պետք է փոխանցի փաթեթները, և պատասխանին պետք է վերադարձի ուղի։ Երբ երեքից մեկը բացակայում է, ախտանիշը նույնն է։
AllowedIPs-ը և՛ մուտքի ցուցակ է, և՛ երթուղային աղյուսակ
Հաճախորդի վրա AllowedIPs ցուցակը որոշում է և՛ այն, թե ինչ կարելի է ուղարկել այդ զույգին, և՛ այն, թե WireGuard-ը որ երթուղիներն է տեղադրում։ Զույգի գրառումը, որը թվարկում է միայն սերվերի թունելային հասցեն, տեղադրում է մեկ հոսթային երթուղի, ուստի LAN-ի նպատակակետերը երբեք չեն մտնում թունել։ LAN-ի նախածանցի ավելացումն առաջին բանն է, որ պետք է ստուգել, և դա նաև այն փոփոխությունն է, որն ամենից հաճախ բացակայում է պատճենված կազմաձևից հետո։ Լռելյայն երթուղու ընդլայնված զույգը այլ նախագիծ է, և այն կտեղափոխի նաև հաճախորդի ինտերնետ տրաֆիկը։
Պահեք հոսթային երթուղին և LAN-ի նախածանցը որպես առանձին գրառումներ։ Եթե գրասենյակն ունի երկու ենթացանց, երկուսն էլ պատկանում են ցուցակին, և բացակայող երկրորդ նախածանցը ստեղծում է խափանում, որը թվում է ընտրովի, ոչ թե ամբողջական։
[Peer] PublicKey = <server public key> Endpoint = vpn.example.net:51820 AllowedIPs = 10.66.0.1/32, 192.168.50.0/24
Փոխանցումը և թարգմանությունը սերվերի վրա են
Սերվերին պետք է միացված IP փոխանցում, թունելից եկող տրաֆիկն ընդունող փոխանցման կանոն և դեպի իր LAN ինտերֆեյսը ուղղված թարգմանության կանոն։ Հենց թարգմանությունն է, որ նախագիծը դարձնում է աշխատունակ՝ առանց գրասենյակի ցանցի յուրաքանչյուր հոսթին դիպչելու։ Այնուհետև պատասխանները վերադառնում են սերվեր, այլ ոչ այն հասցեին, որի մասին LAN-ը երբեք չի լսել։ Առանց դրա՝ յուրաքանչյուր հոսթի պետք է երթուղի դեպի թունելի ենթացանց և հրաժեշտ պատնեշի կանոն, որը թույլ է տալիս այն, ինչը հազվադեպ է ընդունելի ուրիշի կողմից կառավարվող ցանցում։
sysctl -w net.ipv4.ip_forward=1 iptables -A FORWARD -i wg0 -j ACCEPT iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
Ձեռքով ավելացված կանոնները անհետանում են վերագործարկման ժամանակ, ուստի կապեք դրանք ինտերֆեյսին սերվերի կազմաձևի hook հրամաններով։ Կանոնների հավաքածուն, որն ապրում է իր ինտերֆեյսից ավելի երկար, այն է, թե ինչպես մեքենան ի վերջո թարգմանում է տրաֆիկ այնպիսի թունելի համար, որը այլևս գոյություն չունի։
Երբ LAN-ը տեղափոխվեց, իսկ կանոնը՝ ոչ
Գրասենյակի ենթացանցը վերահամարակալող երթուղիչի փոխարինումը այս խափանման դասական տարբերակն է։ Թունելը մնում է միացված, ձեռքսեղմումը մնում է թարմ, և սերվերի հետևում ոչինչ չի պատասխանում, որովհետև թարգմանության կանոնը դեռ նշում է հին հասցեն։ Տեղադրող սկրիպտները հաճախ սերվերի LAN հասցեն ներառում են POSTROUTING կանոնի մեջ, և վերահամարակալումից հետո այդ հասցեն ոչ մի ինտերֆեյսում չկա։ Այնուհետև փաթեթները վերագրվում են մի նպատակակետի, որը չի կարող պատասխանել։
iptables -t nat -n -L POSTROUTING ip -br addr show
Համեմատեք երկու ելքերը։ Ինտերֆեյսների ցուցակում չհայտնված թարգմանության նպատակակետը հենց սխալն է, և դրա ուղղումը մեկ տողի փոփոխություն է, երբ մեկ անգամ տեսել եք այն։ Կանոնը կարող է ապրել գեներացված unit-ում, ոչ թե WireGuard-ի կազմաձևում, ուստի խմբագրելուց հետո վերաբեռնեք այդ unit-ը և հաստատեք, որ հաջորդ բեռնումը չի վերագրի ձեր փոփոխությունը։
NAT-ի հետևում գտնվող երկու տեղամասերին հանդիպելու տեղ է պետք
Երբ կողմերից ոչ մեկը չի ընդունում ներթափանցող միացումներ, գործնական պատասխանը փոքր հոսթ է՝ հանրային հասցեով և երկու WireGuard ինտերֆեյսով։ Յուրաքանչյուր տեղամաս միանում է դեպի դուրս, միջին հոսթը թվարկում է յուրաքանչյուր զույգի LAN-ը իր AllowedIPs-ում, և փոխանցումը փաթեթներ է տեղափոխում երկու թունելների միջև։ Ոչ մի տեղամասի հրաժեշտ պատնեշում ոչինչ պետք չէ փոխել, ինչի պատճառով այս նախագիծը հեշտությամբ տարածվում է։
Տեղամասերի միջև երթուղավորումը պահպանում է սկզբնական աղբյուրի հասցեները և դրանով իսկ իմաստալից է պահում հոսթային մատյանագրումը։ Միջին հոսթում թարգմանությունը ավելի պարզ է, երբ երկու LAN-երը համընկնում են, բայց մատյաններում աղբյուրի ինքնության կորստի գնով։ Որոշեք, թե որ հատկությունն է կարևոր, նախքան ընտրելը։
Առանձնացրեք շերտերը չորս ստուգումներով
Կատարեք մեկ ստուգում յուրաքանչյուր շերտի համար՝ երեք բան փոխելու և հույս դնելու փոխարեն։ Առաջինը ցույց է տալիս ձեռքսեղմման տարիքը և հաշվիչները յուրաքանչյուր զույգի համար։ Երկրորդը ցույց է տալիս, թե արդյոք հաճախորդն իսկապես ուղղորդում է այդ նպատակակետը թունել։ Երրորդն ու չորրորդը ասում են՝ հարցումը հասե՞լ է, և արդյոք որևէ քաղաքականություն այն թողել է ժամանումից հետո։
wg show ip route get 192.168.50.20 tcpdump -ni wg0 icmp iptables -vnL FORWARD --line-numbers
Հարցումը, որը հասնում է և պատասխան չի առաջացնում, մատնանշում է պատասխանի ուղին կամ LAN-ի հոսթը։ Հարցումը, որը երբեք չի հասնում, մատնանշում է AllowedIPs կամ հաճախորդի երթուղին։ Այս երկու ելքերը տարբեր ուղղումներ են պահանջում, և հենց գրառումն է, որ տարբերում է դրանք։