Ինչու է OpenVPN-ի UDP պատասխանը գալիս սխալ հասցեից
Մի քանի տեղական հասցե ունեցող UDP սերվերը կարող է հաճախորդին պատասխանել այն հասցեից տարբերվող հասցեով, որով նա կապվել է։ multihome-ը ուղղում է աղբյուրը աջակցվող հարթակներում։
OpenVPN հաճախորդը հավաքում է մեկ հասցե, սերվերը պատասխանում է մյուսից, և թունելը երբեք չի բարձրանում։ Սերվերի մատյանը ցույց է տալիս փաթեթի գալը, իսկ գրանցումը՝ պատասխանի ելքը, ուստի սխալը վերագրվում է հաճախորդին։ Մի քանի ինտերֆեյս ունեցող կամ մեկ ինտերֆեյսի վրա մի քանի հասցե ունեցող հոսթում կողմերը պարզապես չեն համաձայնում, թե որ հասցեն է օգտագործվում։ Պատասխանը վավեր է IP շերտում, այնուամենայնիվ շատ հաճախորդներ մերժում են դատագրամը, որի աղբյուրը իրենց դիմած հասցեն չէ։
Ինչ է տեսնում հաճախորդը, երբ աղբյուրը փոխվում է
UDP վարդակը, որը կապված չէ կոնկրետ տեղական հասցեի հետ, ֆիքսված աղբյուր չունի, ուստի միջուկը ուղարկելիս մեկը ընտրում է։ Այդ ընտրությունը գալիս է դեպի հաճախորդի հասցեն երթուղու որոնումից, և աղբյուրը դառնում է այն ինտերֆեյսի հասցեն, որը որոնումն ընտրում է։ Մեկ ինտերֆեյսով մեքենայում ընտրությունն անտեսանելի է, իսկ կառավարման հասցե, հանրային հասցե և նույն ցանցային քարտի վրա երկրորդական հասցե ունեցող հոսթում այն կախված է երթուղային չափիչներից և քաղաքականությունից։ Քաղաքականության վրա հիմնված երթուղավորումը անհամապատասխանությունը դարձնում է ավելի հավանական, ոչ թե ավելի քիչ, որովհետև կանոնը կարող է ընտրել վերին կապուղի, որին հաճախորդը երբեք չի հասել։ Բավական է մեկ մատակարարից սովորած լռելյայն երթուղին և մյուսին մատնանշող աղբյուրի կանոնը՝ դա առաջացնելու համար։
Հաճախորդները, որոնք զտում են պատասխանները, և կապերի հետևումը, որը սպասում է ճշգրիտ քառյակին և աղբյուրին, կթափեն պատասխանը առանց օգտակար հաղորդագրության։ Այնուհետև թունելը ժամկետանց է դառնում, ասես ոչինչ չի եկել, և դրա համար է, որ սա սխալմամբ համարվում է հաճախորդի կողմի հրապատի խնդիր։ Միայն սերվերի վրա արված գրանցումը հաստատում է սխալը՝ փոխանակ բացատրելու, որովհետև պատասխանն իսկապես դուրս է գալիս։ Համեմատեք պատասխանի աղբյուրը այն հասցեի հետ, որը հաճախորդը հավաքել է, նախքան որևէ այլ բան փոխելը։
Ինչ է իրականում անում multihome ընտրանքը
Հրահանգը գրվում է որպես multihome կարգավորման ֆայլում և որպես --multihome հրամանի տողում, և այն ստիպում է UDP սերվերին պատասխանել այն հասցեից, որին հասել է հաճախորդի փաթեթը։ Միջուկը ստանալիս փոխանցում է սկզբնական նպատակակետային հասցեն որպես լրացուցիչ տվյալ, և OpenVPN-ը օգտագործում է այդ արժեքը որպես պատասխանի աղբյուր։ Այսպիսով՝ ընդհանուր հասցեով լսող սերվերը, local 0.0.0.0 IPv4-ի համար կամ դրա IPv6 համարժեքը, վարվում է այնպես, կարծես յուրաքանչյուր հաճախորդ հասել է առանձին լսողի։ Հանրային հասցեով եկած հաճախորդները պատասխաններ ստանում են հանրային հասցեից, իսկ ներքին հասցեի հաճախորդները՝ այդ հասցեից։ Փաթեթի ուղու վրա ուրիշ ոչինչ չի շարժվում՝ երթուղին, զտիչի կանոնները և թունելի կարգավորումը մնում են ճիշտ այնպես, ինչպես եղել են։
Հենց այս վերջին հատկությունն է ընտրանքը այլապես աշխատող սերվերին ավելացնելը անվտանգ դարձնում, և դա է նաև պատճառը, որ այն չի կարող վերանորոգել զտիչ, որը թույլ է տալիս միայն մեկ հասցե։ Փաթեթը դեռ պետք է ընդունվի այն ուղու վրա, որով անցնում է, ուստի աղբյուրի ուղղումը փոխում է պատասխանի ծագումը և ոչ ավելին։ Այն նաև միայն UDP-ի համար է. TCP լսողը նույն ձևով այս խնդիրը չունի, որովհետև կապը նույնացվում է քառյակով, այլ ոչ թե պատասխանի աղբյուր հասցեով։
Երբ ֆիքսված տեղական հասցեն սխալ լռելյայն է
Նախքան ընտրանքին դիմելը, ստուգեք՝ արդյոք սերվերը կապում է մեկ կոնկրետ տեղական հասցե, որովհետև կապված լսողը միշտ պատասխանում է այդ հասցեից։ Սա ճիշտ է մեկ ինտերֆեյսով տեղաբաշխման համար և սխալ է այն պահից, երբ հաճախորդները օրինականորեն օգտագործում են մեկից ավելի հասցե։ Եթե կապումը դիտավորյալ է եղել, որոշեք՝ արդյոք սերվերը պետք է ընդհանրապես երթևեկություն ընդունի լրացուցիչ հասցեներում։ Կապման հեռացումը մեծացնում է մերկացումը, ուստի թույլատրված ինտերֆեյսները և աղբյուր ցանցերը պետք է ապահովեն ծառայությունն ու զտիչը, ոչ միայն կապման հասցեն։
OpenVPN-ի տեղեկատուն ընտրանքը սահմանափակում է UDP սերվերներով, նշում է փաթեթի ուղու լրացուցիչ մշակումը և գրանցում, թե որ հարթակներն են աջակցում այն։ Հաստատեք դա տեղադրված թողարկման վրա նախքան դրա հիման վրա պլանավորելը։ Այնտեղ, որտեղ այն աջակցված չէ, այլընտրանքը կոնկրետ հասցեն կապելն է կամ վերադարձի երթուղին ուղղելը, և երկուսն էլ ավելի նեղ փոփոխություններ են, քան առաջին հայացքից թվում է։ Ընդհանուր հասցեով լսելը հետևանքներ ունի նաև պատասխաններից բացի. բոլոր հասցեներում գտնվող սերվերը հասանելի է յուրաքանչյուր ցանցից, որին միացված է հոսթը, և դա գուցե այն մերկացումը չէ, որ ինչ-որ մեկը նկատի է ունեցել։
Ապացուցեք պատասխանի աղբյուրը դրսից
Փորձարկեք սերվերից դուրս և գրանցեք ճշգրիտ հասցեն ու տրանսպորտը, որն օգտագործել է հաճախորդը, նախքան որևէ բան գրանցելը։ Ստորև նշված երեք ստուգումները պատասխանում են երեք տարբեր հարցերի, և հերթականությունը կարևոր է։
tcpdump -ni any udp port 1194
ss -lunp 'sport = :1194'
ip route get 203.0.113.10 from 198.51.100.20
Գրանցումը ցույց է տալիս պատասխանի աղբյուր հասցեն, և հենց այդ փաստի վրա է հենվում ողջ հոդվածը։ Վարդակների ցանկը ցույց է տալիս, թե ինչ է սերվերը իրականում կապել, որովհետև ընդհանուր և կոնկրետ լսողները նույն տեսքն ունեն կարգավորման ֆայլում և տարբեր կերպ են վարվում ցանցում։ Երթուղու որոնումը ցույց է տալիս այն աղբյուրը, որը միջուկը կընտրեր այդ հոսքի համար, և դա բացատրում է գրանցումը նախքան որևէ բան փոխելը։ Կրկնեք բոլոր երեքը IPv4-ի և IPv6-ի համար առանձին, որովհետև դրանք առանձին լսողներ և առանձին որոնումներ են, և մի ընտանիքի համար ընդհանուր գրառումը ոչինչ չի ասում մյուսի մասին։
Երթուղավորումը, հայտնաբերումը և զտումը մնում են առանձին
Պատասխանի աղբյուրը պահպանելը չի տեղադրում ելքային երթուղի, չի թարմացնում դինամիկ DNS-ը և չի ստիպում մի հասցեային ընտանիքին ընդունել մյուսին։ Մի քանի վերին կապուղի ունեցող սերվերում յուրաքանչյուր աղբյուրի վերադարձի ուղին պետք է դիտավորյալ համաձայնեցվի, այլապես պատասխանները դուրս են գալիս ինտերֆեյսով, որը հաճախորդի զտիչը երբեք չի թույլատրել։ Նույն կերպ, նախածանցի փոփոխությունից հետո նոր հասցեն պետք է հասնի հաճախորդներին հայտնաբերման և աջակցվող վերակապակցման հոսքի միջոցով, այլ ոչ թե հին գրառման միջոցով։
Թողեք սերվերի ինքնության ստուգումները և վկայագրերի հաստատումը ճիշտ այնպես, ինչպես կան, որովհետև փոխված հասցեն չի արդարացնում չհաստատված գործընկերոջ ընդունումը։ Եթե պատասխանը հիմա դուրս է գալիս նախատեսված աղբյուրից, իսկ թունելը դեռ ձախողվում է, համարեք աղբյուրի խնդիրը լուծված և անցեք առաջ։ Հաջորդ դիտարկված սխալը պատկանում է երթուղավորմանը, զտմանը կամ նույնականացմանը, և լսողի կրկին փոփոխությունը նրան չի հասնի։ Գրեք պատասխանի աղբյուրը տոմսի մեջ հաճախորդի հավաքած հասցեի կողքին, որպեսզի հաջորդ մարդը կարողանա նույն փաստը ստուգել մեկ հրամանով։