Թունելը միանում է տնային գծից ու կանգ է առնում հյուրանոցային կամ գրասենյակային ցանցում, և սերվերը 443 պորտ տեղափոխելը ոչինչ չփոխեց։ Այդ արդյունքը բավական տարածված է, որ ձև ունենա՝ պորտը հեշտ մասն էր, իսկ որոշման մնացածը պատկանում է այն ամենին, ինչ նստած է հաճախորդի և սերվերի միջև։ Երկու հարց լուծում է դեպքերի մեծ մասը, և դրանցից ոչ մեկը ծածկագրերի մասին չէ։ Արդյոք ցանցն ընդունում է TLS ձեռքսեղմում այդ հասցեին, և արդյոք հաճախորդը պահում է երթուղի դեպի իր սեփական փաթույթը, քանի դեռ թունելը բարձրացված է?

Ձեռքսեղմումը ավելին է մատնում, քան համարը

TCP 443-ի վրա բնիկ VPN լսիչը խոսում է իր արձանագրությամբ առաջին փաթեթից սկսած։ ClientHello-ն ունի տարբերակի դաշտ, պատահական արժեք և ընդլայնումների ցանկ, և մի քանի հարյուր բայթ կարդացող սարքը կարող է տարբերությունը տեսնել առանց որևէ բան վերծանելու։ Պորտի համարները էժան է բավարարել, և ֆիլտրն իրականում ստուգում է արձանագրության ձևը։ Կանոնները սովորաբար գրվում են նաև ըստ արձանագրության, ուստի TLS-ը ստուգող քաղաքականությունը ոչինչ չի ասում UDP-ի մասին։

Թափանցիկ պրոքսին, որը պահանջում է վավեր TLS նստաշրջան, կապը գցում է տեղադրման ընթացքում, հաճախ այն բանից հետո, երբ TCP ձեռքսեղմումն ավարտվել է։ Այդ մանրամասնությունը կարևոր է ավելի ուշ, որովհետև նշանակում է, որ հաճախորդի մատյանը կանգ է առնում սոքեթի հաստատումից հետո։

Հոսքի փաթաթումը ստեղծում է երկու ձախողման կետ

TLS փաթույթը, ինչպիսին stunnel-ն է, վերականգնում է սպասված ձևը՝ հաճախորդը միանում է տեղական լսիչին, փաթույթը բացում է իսկական TLS նստաշրջան սերվերի հետ 443-ի վրա, և սերվերի վրա երկրորդ փաթույթը վերծանված բայթերը փոխանցում է VPN դեմոնին։ Արտաքին նստաշրջանն այժմ նման է ցանկացած այլ HTTPS կապի։ Սերվերի VPN դեմոնը պետք է լսի միայն loopback-ի վրա, որովհետև փաթույթից դուրս ոչինչ պետք չէ հասնի դրան։

Այդ նախագծի համար պետք է համընկնեն երեք առանձին բաներ։ Հաճախորդի պրոֆիլը ցույց է տալիս տեղական լսիչին, սերվերի վկայականը համապատասխանում է այն անվանը, որը հաճախորդը ստուգում է, և սերվերի կողմի փոխանցումը թիրախավորում է այն պորտը, որն իրականում օգտագործում է դեմոնը։ Սխալվեք դրանցից որևէ մեկում, և կապը մեռնում է մինչև VPN շերտին հասնելը։ Այդ ժամանակ վկայականի անհամապատասխանությունը երևում է որպես փաթույթի սխալ, ոչ թե VPN սխալ, և այդ պատճառով արժե երկու մատյանները կողք կողքի կարդալ։

Դեպի փաթույթ տանող երթուղին է թակարդը

Հենց թունելը բարձրանում է, լռելյայն երթուղին ցույց է տալիս դրա մեջ, և արտաքին TLS նստաշրջանին պետք է ուղի, որը չի մտնում այն թունելի մեջ, որը նա տանում է։ Սովորական VPN հաճախորդը պաշտպանում է այն հասցեն, որին զանգում է, իսկ փաթաթված հաճախորդը զանգում է իր loopback-ին, ուստի փաթույթի նշանակման հասցեն անտեսանելի է այդ պաշտպանության համար։

sudo ip route add 198.51.100.20 via 192.168.0.1
sudo openvpn --config client.ovpn
sudo ip route del 198.51.100.20

Ճշգրիտ հասցեները դուք եք լրացնում, և երթուղին պետք է գոյություն ունենա կապի ողջ կյանքի ընթացքում, ոչ միայն գործարկման պահին։ Փոքր փաթույթային սկրիպտը, որը երթուղին ավելացնում է հաճախորդից առաջ և հեռացնում հետո, ավելի վստահելի է, քան հիշված հրամանը։

Android-ում այդ բացառության համարժեքը յուրաքանչյուր հավելվածի կարգավորումն է՝ բացառեք փաթույթ հավելվածը թունելից, որպեսզի նրա սեփական երթևեկությունը դուրս գա բջջային կապով։ Առանց բացառման փաթույթն ուղղվում է այն թունելի մեջ, որը փորձում է կառուցել, և վերամիացման օղակը նման է սերվերի խնդրի։

Կարդացեք ժամանակացույցը, նախքան որևէ բան փոխելը

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

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

Գրի առեք դիտված վարքը՝ որքան տևեց նստաշրջանը, բացվեց սոքեթը, գրանցեց փաթույթը ձեռքսեղմում։ Դրանցից յուրաքանչյուրը նեղացնում է հաջորդ փորձը։

Փորձեք մեկ փոփոխական միաժամանակ

Նախ ստուգեք UDP-ն, որովհետև որոշ ցանցեր այն ամբողջովին գցում են, և UDP խափանումը ոչինչ չի ասում 443-ի մասին։ Այնուհետև փորձեք TCP 443 առանց փաթույթի, ապա փաթույթը 443-ի վրա։ Կարդացեք հաճախորդի մատյանը յուրաքանչյուր քայլին և կանգ առեք հենց որ վարքը փոխվի։

Փոխեք մեկ տարր յուրաքանչյուր փորձի համար։ Նոր պորտ, նոր փաթույթ և նոր ծածկագիր նույն անցումում թողնում են ձեզ առանց ասելու, թե երեքից որն էր կարևոր։

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