Մեկ Pi, երկու OpenVPN օրինակ՝ ինչ է կարդում յուրաքանչյուր միավորը
Մեկ Pi-ի վրա երկու OpenVPN դեմոններ կարդում են տարբեր կոնֆիգուրացիայի ֆայլեր և դուրս են գալիս տարբեր կեռիկներով։ Քարտեզագրեք յուրաքանչյուր օրինակը, ապա առանձին ստուգեք բեռնվածքի ուղին։
Հաշվեք OpenVPN գործընթացները, նախքան պրոֆիլին դիպչելը։ Pi-ն, որը ընդունում է թափառող օգտատերեր և միաժամանակ զանգահարում է վերին ծառայությանը, աշխատեցնում է երկու դեմոն, և նրանցից յուրաքանչյուրը կարդում է կոնֆիգուրացիայի ֆայլ, որն ընտրվում է ձեր մուտքագրած օրինակի անունով։ Այնուհետև փաթեթավորված ձևանմուշները յուրաքանչյուր դեմոնի տալիս են իր աշխատանքային գրացուցակը, իր գործարկման վիճակի ֆայլը և իր թունելի սարքը։ Եթե այդ բաժանումը սխալ անեք, մի ամբողջ երեկո կանցկացնեք՝ փոխելով ճիշտ կարգավորում մի ֆայլում, որը աշխատող գործընթացը երբեք չի բացում։
Յուրաքանչյուր օրինակի անուն ընտրում է իր ֆայլը
OpenVPN 2.6-ի հետ մատակարարվող միավորի ֆայլերում մեկնարկի արգումենտները կրում են օրինակի տեղապահ, որը լրացվում է @ նշանից հետո եկող տեքստով։ Սերվերի ձևանմուշը գործում է սերվերի կոնֆիգուրացիայի գրացուցակից և իր արգումենտը լուծում է այնտեղ %i.conf -ի դեմ, մինչդեռ հաճախորդի ձևանմուշը նույնն է անում հաճախորդի գրացուցակից։ Այսպիսով՝ [email protected] կարդում է admits.conf սերվերի գրացուցակում, և [email protected] կարդում է uplink.conf հաճախորդի գրացուցակում, և անուններից ոչ մեկը ոչ մի իմաստ չունի մյուս գրացուցակում։
Հաստատեք քարտեզագրումը հենց մեքենայի վրա, փոխարենը ենթադրելու, որ փաթեթը պահպանել է վերին լռելյայն արժեքները։ Տարածման drop-in-ը կարող է ուղղակիորեն փոխարինել աշխատանքային գրացուցակը կամ կոնֆիգուրացիայի արգումենտը։
systemctl cat [email protected]
systemctl cat [email protected]Կարդացեք WorkingDirectory տողը և կոնֆիգուրացիայի արգումենտը այդ ելքի մեջ, որովհետև միայն միացված միավորն է որոշում, թե որ ֆայլը կբեռնվի։ Drop-in-ը, որ --config -ը ավելացնում է ExecStart -ին, հաղթում է ձևանմուշին նույնիսկ այն ժամանակ, երբ ձևանմուշի ուղին ճիշտ է թվում։ Հարցրեք հատվածի և drop-in-ի ուղիները, երբ ուզում եք իմանալ՝ արդյոք տեղական վերափոխումն ուժի մեջ է։ Եթե երկու դերերը լուծվում են մեկ ֆայլի մեջ, ապա դուք ունեք մեկ գործընթաց, որը փորձում է լինել և՛ սերվեր, և՛ հաճախորդ, և այդ ֆայլում ավելի ուշ եկող տարբերակը լուռ հաղթում է։
Տեղական տրանսպորտը և փոխանցվող բեռնվածքը դիպչում են տարբեր կեռիկների
Սերվերի կոդավորված կապը յուրաքանչյուր թափառող օգտատիրոջ հետ ստեղծվում է հենց Pi-ի վրա, ուստի նրա արտաքին պատասխանները դուրս են գալիս տեղական ելքի կեռիկով։ Հաճախորդի կապը իր վերին զույգի հետ նույնպես տեղում ստեղծված ելք է, թեև հասնում է հեռավոր ցանց։ Փոխանցվող բեռնվածքը երրորդ կատեգորիան է, և միջուկը համադրում է այն միայն այն բանից հետո, երբ արդեն ընտրել է փաթեթի ելքի սարքը։
| Flow | Hook that sees it | What to inspect |
|---|---|---|
| Roaming user handshakes to the server | Local input and local output | Listener socket, bind address, rule admitting the UDP port |
| User payload leaving through the upstream tunnel | Forward | IPv4 forwarding switch, selected route, permission rule, any translation |
| Pi's own connection to the upstream peer | Local output | Underlay route to the provider endpoint, not the tunnel route |
Կանոնը, որը համապատասխանում է փոխանցման շղթայի ներսում ելքի միջերեսին, կարող է թույլատրել կամ հեռացնել փաթեթ, որը երթուղումն արդեն վերագրել է այդ միջերեսին, բայց այն երբեք չի ընտրում միջերեսը։ Երբ մեկ հոսթ ավարտում է մի թունել և սկսում մյուսը, օգտատիրոջ բեռնվածքը վերին թունել ուղարկող քաղաքականությունը և Pi-ի սեփական կոդավորված պատասխանները պաշտպանող քաղաքականությունը առանձին որոշումներ են։ Նրանք պատահաբար վայրէջք են կատարում նույն ֆիզիկական ցանցային քարտի վրա, ինչի պատճառով դրանք շփոթում են։
Այդ տարբերությունը բացատրում է սովորական կիսափլուզումը։ Օգտատերերը միանում են, ձեռքսեղմումն ավարտվում է, և նրանց տրաֆիկը դեռ դուրս է գալիս սխալ ճանապարհով, որովհետև ձեռքսեղմումը տեղական էր, իսկ բեռնվածքը՝ փոխանցված, և երկուսից միայն մեկն էր երբևէ փորձարկվել։
Ներմուծված երթուղին կարող է կլանել ձեր օգտատերերին ուղղված պատասխանները
Հաճախորդի պրոֆիլի անվտանգության կարգավորումը որոշում է, թե վերին կողմը ինչ կարող է մղել Pi-ի երթուղման աղյուսակ, և լայն վերահղումը այն տարբերակն է, որը աշխատող երկակի դերով հոսթը դարձնում է կոտրված։ Եթե մղված երթուղին ծածկում է թափառող օգտատերերի հանրային հասցեները, սերվերի կողմից նրանց ուղղված պատասխանները կարող են հետևել նոր երթուղուն դեպի վերին թունել՝ ենթաշերտով դուրս գալու փոխարեն։ Մարդիկ հաճախ հաստատում են, որ մատակարարի թունելը դեռ աշխատում է, և կանգ են առնում այնտեղ, որովհետև այդ տրաֆիկը հենց թունելի տրանսպորտն է, և այն շարունակում է հոսել, մինչ մնացած ամեն ինչ սխալ է վարվում։
Աղբյուրի կամ նշանի վրա հիմնված քաղաքականությունն այն միջոցն է, որով երկու հոսքերը մնում են առանձին։ OpenVPN-ի Linux-ի նշանի տարբերակը դեմոնի սեփական կոդավորված փաթեթները նշում է հրապատի նշանով, որը երթուղման կանոնը հետո կարող է ուղարկել հատուկ աղյուսակ։ Աղբյուրի հասցեները նույնքան լավ են աշխատում, երբ սերվերի արտաքին պատասխանները միշտ դուրս են գալիս մեկ ենթաշերտի հասցեից։ Երկու մոտեցումներն էլ պահանջում են վավեր երթուղիներ ընտրված աղյուսակում և բացառություն մատակարարի վերջնակետի համար, այլապես թունելն ինքը կդադարի բարձրանալ։
Հարցրեք միջուկին, թե պատասխանն իրականում որ ուղին կվերցնի, նախքան որևէ կանոն գրելը։ Ստորև բերված հասցեները տեղապահներ են Pi-ի ենթաշերտի հասցեի և մեկ թափառող օգտատիրոջ հանրային հասցեի համար։
ip rule show
ip route get 198.51.100.7 from 192.0.2.10Ստուգեք բաժանումը, ապա դադարեցրեք մեկ դեր միաժամանակ
Փորձարկեք երեք հոսքերը առանձին, որովհետև աշխատող ձեռքսեղմումը ոչինչ չի ապացուցում մյուս երկուսի մասին։ Ընդունեք նոր մուտքային կապ, ուղարկեք մեկ թույլատրված հավելված վերին ելքով և հաստատեք, որ երկու գործընթացներն էլ դեռ հասնում են իրենց զույգերին։
Ապա դադարեցրեք հաճախորդի դերը և տեսեք, թե ինչ է պահպանում սերվերի դերը։ Սա ամենաէժան ձևն է գտնելու երթուղու կամ նշանի կանոն, որը նախատեսված էր մեկ օրինակի համար և կիրառվել է երկուսի վրա։
systemctl stop [email protected]
systemctl status [email protected] --no-pager
ss -lunp | grep openvpn
journalctl -u [email protected] -n 20 --no-pagerԻնչ ուզում եք տեսնել, դա դեռ կապված լսողն է, դեռ առկա թունելի սարքը և նոր սխալներից ազատ մատյանը, մինչ հաճախորդի դերը դադարեցված է։ Եթե հաճախորդի դադարեցումը նաև կտրում է սերվերի պատասխանները գոյություն ունեցող օգտատերերին, ապա երկու դերերը կիսում են մի բան, որը պետք է սահմանափակված լիներ դրանցից մեկով։ Գրանցեք, թե որ օրինակը, որ կոնֆիգուրացիայի ֆայլը և որ հոսքի տերը շոշափեց յուրաքանչյուր փոփոխությունը, որովհետև այս հոսթը վրիպազերծող հաջորդ մարդը այլապես նույն հայտնագործությունը կկրկնի զրոյից։