Անցկացնել մեկ LAN ենթացանց OpenVPN-ով և պահպանել լռելյայն երթուղին
Պահպանիր LAN-ի լռելյայն երթուղին, մինչ մեկ ենթացանց անցնում է թունելով։ Համեմատիր քաղաքականության աղյուսակը հիմնական աղյուսակի փոփոխությունների հետ, ապա ընտրիր NAT կամ երթուղի սերվերի կողմում։
Սարքերը, որոնք երթուղավորում են LAN-ի համար և միաժամանակ միանում VPN-ին, հայտնվում են նույն վեճի մեջ իրենց հետ՝ թունելը ցանկանում է տիրել լռելյայն երթուղուն, իսկ LAN-ին այն հետ է պետք։ Երբ OpenVPN-ը միանում է, այն կարող է տեղադրել լռելյայն երթուղի թունելով կամ զույգ կիսալռելյայն երթուղիներ, ինչը ճիշտ է նոթբուքի համար և սխալ՝ դարպասի համար, որի հարևանները պատասխաններ են սպասում նրա LAN հասցեից։ Պատասխանը VPN-ը բաց թողնելը չէ։ Պատասխանը երկու որոշումներին տարբեր աղյուսակներ տալն է։
Մեկ լռելյայն երթուղի, երկու սեփականատեր
Փոխանցվող և տեղում առաջացած երթևեկությունը պարտադիր չէ, որ նույն ճանապարհով գնա։ LAN-ի հաճախորդներին թունելը պետք է միայն ձեր ընտրած նպատակակետերի համար, մինչդեռ հոսթի սեփական կառավարման սեսիաներին և այդ հաճախորդներին ուղղված պատասխաններին պետք է LAN-ի լռելյայն երթուղին։ Երկուսը հիմնական աղյուսակում խառնելը մեկ պատասխան է պարտադրում երկու տարբեր հարցերի։
OpenVPN-ն ունի անջատիչ հենց սրա համար։ route-noexec թույլ չի տալիս հաճախորդին ընդհանրապես դիպչել հիմնական աղյուսակին, և այն արժեքները, որոնք նա կօգտագործեր, արտահանվում են route-up սկրիպտին որպես route_vpn_gateway, dev և ինտերֆեյսի հասցեներ։ Այնուհետև դուք եք որոշում, թե որ աղյուսակը որ երթուղին կստանա՝ կոդում, որը կարող եք ավելի ուշ կարդալ։
Քաղաքականության աղյուսակն ընդդեմ հիմնականի վերագրման
| Approach | What it buys | What it costs |
|---|---|---|
| Separate table plus source rule | LAN traffic and host traffic keep independent defaults | Every lookup now depends on rule order |
| Editing the main table only | Fewer moving parts on a single-purpose host | One mistake takes the gateway offline entirely |
| Two half-default routes | Works for a full-tunnel client | Ambiguous on a host that must answer on its LAN address |
Առանձին աղյուսակը միակ տարբերակն է, որ մասշտաբվում է մեկ ենթացանցից այն կողմ։ Անվանիր այն մեկ անգամ, ապա հղում արա անունով, որպեսզի ոչ ոքի թիվ հիշել պետք չգա։
echo "10 vpn" >> /etc/iproute2/rt_tables
ip rule add from 192.168.50.0/24 table vpn
ip route add default via 10.8.0.1 dev tun0 table vpnԱյստեղ հասցեները տեղապահեր են։ Փոխարինիր LAN նախածանցը, թունելի դարպասը և սարքի անունը քո սեփական տեղակայումից նախքան որևէ բան գործարկելը։
Կանոնը պետք է համընկնի նաև հոսթի հետ
Կանոնը, որը համընկնում է միայն LAN նախածանցի հետ, ընդգրկում է փոխանցվող փաթեթները։ Այն չի ընդգրկում այն երթևեկությունը, որն ինքն է ստեղծում դարպասը, և չի ընդգրկում այն պատասխանները, որոնք այն հետ է ուղարկում LAN հաճախորդներին, և որոնք որպես աղբյուր կրում են դարպասի LAN հասցեն։ Այդ որոնումները ընկնում են main և դեռ կարող են դուրս գալ թունելով։
Ավելացրու երկրորդ կանոն դարպասի սեփական LAN հասցեի համար, կամ լայնացրու առաջին կանոնը մինչև բազմություն, որը ներառում է երկուսն էլ։ Հերթականությունը կարևոր է՝ ավելի կոնկրետ կանոնը դիր առաջինը և արդյունքը ստուգիր որոնումով, որը հստակ նշում է աղբյուրը։
ip route get 203.0.113.9 from 192.168.50.1Եթե դա թունելի սարքն է ցույց տալիս այն նպատակակետի համար, որը պետք է մնա տեղական, ապա կանոնների բազմությունը սխալ է՝ անկախ նրանից, թե ինչ է պարունակում աղյուսակը։
NAT, թե երթուղի հեռավոր կողմում
VPN սերվերը գիտի թունելի ենթացանցը և ուրիշ ոչինչ։ LAN աղբյուրի հասցեով եկող փաթեթները վերադարձի ճանապարհ չունեն, քանի դեռ ինչ-որ մեկը չի ապահովել այն, և այն ապահովելու ուղիղ երկու եղանակ կա։ Սերվերի վրա LAN նախածանցի համար երթուղի ավելացնելը պահում է սկզբնական աղբյուրը տեսանելի ծայրից ծայր, ինչը սովորաբար ուզում է աուդիտ անցած նախագիծը։ Դարպասի վրա քողարկումը վերագրում է աղբյուրը թունելի հասցեով և սերվերի համագործակցություն չի պահանջում։
iptables -t nat -A POSTROUTING -s 192.168.50.0/24 -o tun0 -j MASQUERADEԸնտրիր NAT, երբ չես վերահսկում սերվերը և չես կարող այնտեղ երթուղիներ ավելացնել։ Ընտրիր սերվերի կողմի երթուղին, երբ կարևոր են մատյանները, հասանելիության վերահսկումը կամ վերադարձի ուղու համաչափությունը, որովհետև քողարկումը ջնջում է սկզբնական հասցեն այն ամենից, ինչ գրանցում է հեռավոր կողմը։
Ամեն դեպքում փոխանցումը պետք է միացված լինի, և վերադարձի ուղու խիստ զտումը կարող է գցել պատասխանը, երբ main-ը չէր ընտրի թունելը այդ աղբյուրի համար։ Ստուգիր փաստացի արժեքը նախքան թունելին մեղադրելը։
Դարձրու բաժանումը դիմացկուն վերամիացման նկատմամբ
Ձեռքով ավելացված կանոններն ու երթուղիները անհետանում են, երբ ինտերֆեյսը նորից ստեղծվում է, և հնացած աղյուսակային գրառումը կարող է ապրել ավելի երկար, քան այն արդարացրած սեսիան։ Տեղադրիր աղյուսակի կանոնը, թունելի երթուղին և քողարկման գրառումը հաճախորդի route-up սկրիպտի մեջ և մաքրիր աղյուսակը սկրիպտի սկզբում, որպեսզի հին դարպասը չկարողանա ապրել նոր սեսիայում։
Ստուգիր երկու ծայրերից՝ որոնում դարպասի վրա LAN աղբյուրով, և իրական հարցում LAN հաճախորդից դեպի նպատակակետ, որը պետք է անցնի թունելով։ Երթուղին, որը գոյություն ունի, բայց երբեք չի ընտրվում, իրեն պահում է ուղիղ այնպես, ինչպես երթուղու բացակայությունը, քանի դեռ չես կարդացել հաշվիչները։