ადმინის გვერდი პასუხობს მობილური მონაცემების ტელეფონიდან და დროის ამოწურვით სრულდება VPN-ზე შეერთებული ლეპტოპიდან. გვირაბში არაფერია გატეხილი, რადგან მოთხოვნა მასში არასოდეს შედის. ჰოსტის სახელი წყდება გეითვეის საჯარო მისამართზე, და ეს მისამართი ხელმისაწვდომია მხოლოდ იმ გვირაბის გარედან, რომელსაც იგი ამთავრებს. ამის გასწორება ნიშნავს სერვისს მივცეთ შიდა შესასვლელი, და არა გარე ბოლო წერტილის გადაადგილება.

გვერდი იტვირთება გარედან და არა გვირაბის გავლით

შედარებულია ორი განსხვავებული მოთხოვნა. მობილური მონაცემებიდან ბრაუზერი პირდაპირ აღწევს საჯარო მისამართს. გვირაბის შიგნიდან იგივე სახელი წყდება იმავე საჯარო მისამართზე, და პაკეტმა ახლა უნდა გავიდეს გვირაბიდან, რომ მიაღწიოს მისამართს თავად გვირაბის მოშორებულ მხარეს. იგივე სახელი, იგივე მისამართი, ორი სრულიად განსხვავებული პოზიცია.

დანიშნულების მარშრუტი ირჩევს მისამართს და არა პორტს. მარშრუტიზაციის ცხრილში არაფერმა არ იცის, რომ პორტი 443 ადმინისტრირებისთვისაა, ხოლო პორტი 1194 ტრანსპორტია, ამიტომ ორივე ერთსა და იმავე დანიშნულებად განიხილება.

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

შეინარჩუნეთ გარე ბოლო წერტილი ხელმისაწვდომი

სრული გვირაბის პროფილებს სჭირდება გამონაკლისი მარშრუტი VPN-ის ბოლო წერტილისთვის, და OpenVPN-ის redirect-gateway პარამეტრი სწორედ ამას აღწერს: დისტანციური ბოლო წერტილი ინარჩუნებს მარშრუტს უკვე არსებული გეითვეის გავლით, რათა გვირაბი საკუთარ თავში არ მარშრუტირდეს. მოხსენით ეს გამონაკლისი და დაშიფრული ტრანსპორტი მიჰყვება გვირაბს, რაც სესიას ციკლში ამთავრებს. სწორედ ამ გამონაკლისის გამო რჩება ბოლო წერტილის მისამართი ხელმისაწვდომი გვირაბის შიგნიდან.

შედეგი ისაა, რომ საჯარო მისამართი რჩება ხელმისაწვდომი კლიენტიდან, და ამიტომაც შეუძლია ამ მისამართზე ბრაუზერის მოთხოვნას იმავე გამონაკლისის გავლა და გვირაბში შესვლის გარეშე გასვლა. გამონაკლისი თავის საქმეს აკეთებს, ზიანს კი სახელი აყენებს.

სანამ რამეს შეცვლით, წაიკითხეთ მარშრუტის გადაწყვეტილება და არა ინტერფეისების სია. ქვემოთ მოცემული ბრძანებები ბეჭდავენ გადაწყვეტილებას და არა ინვენტარს. გაუშვით ისინი იმ კლიენტიდან, რომელმაც ვერ შეძლო.

ip -4 route get 203.0.113.77
ip -4 rule show
ip -4 route show table all

თუ ძიება აჩვენებს ბოლო წერტილის მარშრუტს ფიზიკური გეითვეის გავლით, ქცევა სწორია და ადმინის გვერდი უბრალოდ არასწორ გზაზე იგზავნება. სწორედ აქ ხდება სახელების ამოხსნა გასწორებად.

მიეცით სერვისს პირადი სახელი

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

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

შეამოწმეთ მისამართების ორივე ოჯახიც, რადგან დარჩენილმა AAAA ჩანაწერმა შეიძლება ბრაუზერი გაგზავნოს იქ, სადაც პირადი გეგმა არასოდეს არ მიმდებარეობდა.

dig +short admin.hq.internal
dig +short -t AAAA admin.hq.internal
curl -sS -o /dev/null -w '%{http_code} %{remote_ip}\n' https://admin.hq.internal/

შეუსაბამეთ პოლიტიკა იმ ადგილს, სადაც პროცესი მუშაობს

გეითვეიზე მოასმენელ მშობლიურ პროცესს აღწევენ ლოკალური შესვლის გზით, ამიტომ შესვლის ჯაჭვი და სოკეტის მიბმა წყვეტს, მიიღება თუ არა მოთხოვნა. გადაცემის წესები და IP გადაცემა ლოკალურ მსმენელს პასუხის გაცემას არ აიძულებს. დაუშვით გვირაბის წყაროები შესვლის პოლიტიკაში და დაადასტურეთ, რომ პროცესი მიბმულია მისამართზე, რომელსაც გვირაბი მიაღწევს.

ჰოსტის პორტზე გამოქვეყნებული კონტეინერი სხვა გზას მიჰყვება, რადგან პაკეტი დანიშნულების მიხედვით ითარგმნება და გადაეცემა. ეს მოთხოვნა ხვდება ჰოსტის გადაცემის პოლიტიკას და Docker-ის საკუთარ წესებს, ამიტომ მუშა მშობლიური მსმენელი შეიძლება თანაარსებობდეს კონტეინერთან, რომელიც იმავე პორტს უარყოფს.

გაშვების თანმიმდევრობა მნიშვნელოვანია ორივე შემთხვევაში, რადგან მისამართზე მიბმა, რომელიც მხოლოდ გვირაბის ამოსვლის შემდეგ ჩნდება, ჩატვირთვისას ჩუმად ვარდება.

შეამოწმეთ პირადი წვდომა და უარყოფილი საჯარო გზა

გააკეთეთ ახალი დასახელებული მოთხოვნა უფლებამოსილი კლიენტიდან, აპლიკაციის საკუთარი იდენტობის შემოწმებების ხელუხლებლად დატოვებით. შემდეგ სცადეთ იგივე სერვისი გვირაბის გარედან და დაადასტურეთ, რომ ის არ პასუხობს. პირადი სახელი კომფორტია და არა შეზღუდვა, ხოლო საჯარო მისამართზე ჯერ კიდევ მიბმული მსმენელი ჯერ კიდევ ღიაა. სწორედ ეს ბოლო შემოწმება გამორჩება უმეტეს მიმოხილვას.

წაიკითხეთ მიბმები და ფილტრის მდგომარეობა და არა ის ჰოსტის სახელი, რომელიც მომხმარებლებმა მიიღეს. გამოვლენა სოკეტის თვისებაა და არა სახელის. ეს განსხვავება გადაურჩება ყოველ DNS ცვლილებას.

ss -lntp | grep ':443'
nft list ruleset | grep -n 443
curl -sS -m 5 -o /dev/null -w '%{http_code}\n' https://203.0.113.77/

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

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