გვირაბი სახლის ხაზიდან უკავშირდება და სასტუმროს ან ოფისის ქსელში ჩერდება, ხოლო სერვერის 443 პორტზე გადატანამ არაფერი შეცვალა. ეს შედეგი საკმარისად გავრცელებულია, რომ ფორმა ჰქონდეს: პორტი ადვილი ნაწილი იყო, გადაწყვეტილების დარჩენილი ნაწილი კი ეკუთვნის ყველაფერს, რაც კლიენტსა და სერვერს შორის ზის. ორი კითხვა წყვეტს შემთხვევათა უმეტესობას და არც ერთი მათგანი შიფრებზე არ არის. ღებულობს ქსელი TLS ხელის ჩამორთმევას ამ მისამართზე და ინარჩუნებს კლიენტი მარშრუტს საკუთარი გარსისკენ, სანამ გვირაბი აწეულია?

ხელის ჩამორთმევა ნომერზე მეტს ამხელს

მშობლიური VPN მსმენელი TCP 443-ზე საკუთარი პროტოკოლით ლაპარაკობს პირველი პაკეტიდანვე. 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-ზე. წაიკითხეთ კლიენტის ჟურნალი ყოველ ნაბიჯზე და გაჩერდით მაშინვე, როცა ქცევა შეიცვლება.

შეცვალეთ ერთი ელემენტი თითო ცდაზე. ახალი პორტი, ახალი გარსი და ახალი შიფრი ერთსა და იმავე გაშვებაში გიტოვებთ იმის თქმის გარეშე, სამიდან რომელი იყო მნიშვნელოვანი.

დაკავშირებული სტატიები