OpenVPN-ის pull-filter უფრო მეტს ემთხვევა, ვიდრე გულისხმობდით
pull-filter თქვენს ტექსტს პრეფიქსად ადარებს გამოგზავნილ პარამეტრებს, ამიტომ route ასევე იჭერს route-gateway-სა და route-ipv6-ს. ჯერ ზმნები შეამოწმეთ, შემდეგ მარშრუტები.
თქვენ ამატებთ ერთ ხაზს, რომ შეინარჩუნოთ თქვენი ლოკალური ნაგულისხმევი მარშრუტი, და ამის შემდეგ გვირაბი აღარ აღწევს შიდა DNS სერვერამდე. ეს ხაზი იყო pull-filter ignore "route", რაც არ ნიშნავს „უგულებელყავი ეს მარშრუტი“. ეს ნიშნავს „გადააგდე ყოველი გამოგზავნილი პარამეტრი, რომლის ტექსტიც ამ ხუთი ასოთი იწყება“, და ჩვეულებრივ სერვერზე ეს მოიცავს route-gateway, route-metric და route-ipv6 პარამეტრებს თავად მარშრუტებთან ერთად. ქვემოთ მოცემული სია არის ის, რასაც გადავდივარ სანამ შევეხები პროფილს, რომელიც სხვამ უნდა გამოიყენოს.
ფილტრი მოქმედებს მხოლოდ გამოგზავნილ პარამეტრებზე
pull-filter მოქმედებს მხოლოდ იმ პარამეტრის ხაზებზე, რომლებსაც სერვერი აგზავნის გვირაბის დამყარების შემდეგ, და სხვა არაფერზე. თქვენს ლოკალურ ფაილში დაწერილი პარამეტრები მისგან არ იცვლება, არც აპლიკაციების ტრაფიკი. თუ იმედოვნებდით, რომ პროცესს გვირაბის გამოყენებას აუკრძალავდით, ეს სრულიად არასწორი ინსტრუმენტია და ფილტრების არცერთი კომბინაცია ამას არ გააკეთებს.
ეს მოცულობა სასარგებლოა, რადგან ნიშნავს, რომ შეგიძლიათ სერვერის კონფიგურაცია უშფოთველად დატოვოთ და მაინც უარყოთ მისი ნაწილი ლოკალურად. ეს ასევე შეზღუდვაა, რომლის ბილეთში ჩაწერაც ღირს: ფილტრი ცვლის იმას, რასაც ეს კლიენტი იღებს და არა იმას, რასაც სერვერი სთავაზობს. მას არანაირი გავლენა არ აქვს იმავე პროფილის სხვა მომხმარებლებზე. ის არც გადარჩება სხვა კლიენტზე გადასვლას, რომელიც ამ პარამეტრს არ ახორციელებს, რაც ღირს იცოდეთ სანამ მასზე სამუშაო პროცესს ააგებთ.
სანამ შაბლონს დაწერთ, დაადასტურეთ რას აგზავნის სერვერი სინამდვილეში. მაღალი დეტალურობისას კლიენტი ბეჭდავს მიღებულ გამოგზავნილ პარამეტრთა სტრიქონს და ეს არის ერთადერთი პატიოსანი წყარო ზუსტი ტექსტისთვის, რომელსაც ადარებთ:
sudo openvpn --config /etc/openvpn/corp.ovpn --verb 4
sudo grep -n 'pull-filter' /etc/openvpn/corp.ovpn
წაიკითხეთ გამოგზავნილი ხაზი, როგორც მძიმეებით გამოყოფილი პარამეტრების სია, და გაითვალისწინეთ, რომ პარამეტრების სახელები და მათი არგუმენტები გამოყოფილია ჰარებით. თქვენი ფილტრის ტექსტი შედარებულია ამ ნაკადთან, ამიტომ შემდეგ ნაბიჯში ჰარები ასე მნიშვნელოვანია.
შედარება პრეფიქსია, ამიტომ ჰარები ყველაფერს წყვეტს
შედარება სტრიქონის პრეფიქსია და არა გაანალიზებული პარამეტრის სახელი. ამიტომ "route" ემთხვევა route-gateway 10.8.0.1, route-ipv6 2001:db8::/32 და route-metric 100-ს. ბოლოში ერთი ჰარის დამატება ვიწროვებს მას სავარაუდო ოჯახამდე, ხოლო სრული პრეფიქსი კიდევ უფრო ავიწროებს კონკრეტულ დანიშნულებამდე.
| Filter text | What it actually matches | Typical outcome |
|---|---|---|
"route" | Every option beginning with those letters | Routes, gateway, metric and IPv6 routes all dropped |
"route " | Route entries only, not the hyphenated siblings | The routes go, the rest survives |
"route 10.60." | A single destination range | The narrowest rule, and the easiest to audit |
"dhcp-option DNS" | Pushed DNS settings | Resolver stays local, internal names stop resolving |
ბოლო რიგია ის, რომელიც იჭერს ადამიანებს გაყოფილი გვირაბის მუშაობისას. საკუთარი გადამწყვეტის შენარჩუნება ლეგიტიმური არჩევანია და ეს ნიშნავს, რომ ყოველი შიდა სახელი ახლა დამოკიდებულია გადამწყვეტზე, რომელიც ვერ ხედავს კერძო ზონას. ეს ის შედეგია, რომელიც განზრახ მიიღება და არა გვერდითი ეფექტი, რომელიც პროდუქციაში აღმოჩნდება.
პრეფიქსით შედარება ნიშნავს იმასაც, რომ წესი მოგვიანებით შეიძლება ჩუმად გაფართოვდეს. როცა სერვერი ამატებს ახალ პარამეტრს, რომელიც თქვენი ტექსტით იწყება, თქვენი ფილტრი იწყებს მასზე გავრცელებას ყოველგვარი პროფილის რედაქტირების გარეშე. ეს არის ის მარცხის რეჟიმი, რომლის წინააღმდეგაც უნდა დაპროექტდეს, და შემარბილებელი ზომაა პარამეტრის რაც შეიძლება დიდი ნაწილის დამთხვევა და არა რაც შეიძლება მცირესი.
სამი ზმნა, სამი განსხვავებული შედეგი
accept, ignore და reject ერთი იდეის სამი მართლწერა არ არის. ისინი განსხვავდებიან იმით, თუ რას აკეთებს კლიენტი დამთხვევისას და იმით, თუ ვინ გაიგებს ამას.
ignore ჩუმად აგდებს დამთხვეულ პარამეტრს, რაც გსურთ განზრახ შეცვლილი პარამეტრისთვის. reject აგდებს მას და აიძულებს კლიენტს ჩივილს, რაც გსურთ მაშინ, როცა მისი არქონა ჟურნალში უნდა ჩანდეს და არა მოგვიანებით აღმოჩნდეს. accept დადებითი ფორმაა, გამოიყენება მაშინ, როცა ნებადართულთა სიას აშენებთ და არა ცალკეულ პარამეტრებს აშორებთ.
რომელი ზმნაც არ უნდა გამოიყენოთ, ფილტრები გამოიყენება მათი გამოჩენის თანმიმდევრობით, ამიტომ ორი გადამფარავი წესი იძლევა თანმიმდევრობაზე დამოკიდებულ შედეგს, რომლის გადახედვაც ძალიან ძნელია. შეინახეთ ერთი წესი თითო განზრახვაზე და თითოეულში ჩადეთ ყველაზე კონკრეტული ტექსტი. თუ ნებადართულთა სია გჭირდებათ, ამჯობინეთ რამდენიმე accept წესი იმავეს რომ აჯამებს ignore წესების გროვას. მაშინ მიმომხილველებს შეუძლიათ ფაილის ზემოდან ქვემოთ წაკითხვა და შედეგის პროგნოზირება, და ეს არის ერთადერთი ტესტი, რომელიც ფართოვდება.
შეამოწმეთ გამოყენებული მარშრუტი და გადამწყვეტი, არა პროფილი
ფაილში სწორად მოჩვენებულმა ფილტრმა მაინც შეიძლება დაგტოვოთ გვირაბთან, რომელიც არამცირე სასარგებლოს არ მარშრუტიზებს. შეამოწმეთ ეფექტი მოქმედ სისტემაზე, სადაც გამოგზავნილი პარამეტრები უკვე გამოყენებული ან გადაგდებულია:
ip route show default
ip route show | grep -c 'proto static'
resolvectl status | grep -A4 'Link.*tun0'
curl -sS -o /dev/null -w '%{http_code}\n' --max-time 5 https://intranet.example.internal/
პირველი ორი ხაზი გეუბნებათ მივიდა თუ არა გამოგზავნილი ნაგულისხმევი მარშრუტი და რამდენი სტატიკური ჩანაწერი გადაურჩა. გადამწყვეტის მოთხოვნა აჩვენებს, თუ რომელ სერვერს იყენებს სინამდვილეში გვირაბის ინტერფეისი, და ჩვეულებრივ სწორედ იქ ჩნდება DNS-ის სიურპრიზი. ბოლო ხაზი პასუხობს ერთადერთ კითხვას, რომელიც მომხმარებლისთვის მნიშვნელოვანია.
სანამ იქ ხართ, ორივე მიმართულება შეამოწმეთ. წესი, რომელიც თქვენს ლოკალურ ინტერნეტს მუშაობაში ინარჩუნებს, მაგრამ შიდა სახელების გადაწყვეტას ჩუმად ამტვრევს, ზედაპირულ შემოწმებას გადის და პირველ რეალურ ამოცანაზე ვარდება, ამიტომ ერთსა და იმავე ტესტში შეიტანეთ ერთი შიდა რესურსი და ერთი საჯარო საიტი.
ჩაწერეთ გამონაკლისი და მისი მფლობელი
ფილტრი ოპერატორის დიზაინის გამონაკლისია, ამიტომ ჩაწერეთ იგი მიზეზით და გადახედვის წერტილით. „უგულებელყოფს გამოგზავნილ მარშრუტებს ლოკალური ნაგულისხმევის შესანარჩუნებლად“ გადასახედია; შიშველი ხაზი პროფილში — არა, და შემდეგი ადამიანი წაშლის ან გამოცნობით გააფართოვებს.
ვერსიას აქაც აქვს მნიშვნელობა. დამთხვევის ქცევა და ზუსტი მისაღები სინტაქსი გაუმჯობესდა OpenVPN 2.4, 2.5 და 2.6-ის განმავლობაში, ამიტომ შაბლონი დაადასტურეთ იმ ბილდის სახელმძღვანელოთი, რომელსაც აწვდით და არა ძველი ვერსიის შესახებ ფორუმის პოსტით. OpenVPN 2.6-ის სახელმძღვანელო ასახავს ამ პარამეტრს და მის დამთხვევის წესს.
ბოლოს, შეათანხმეთ გამონაკლისი მასთან, ვინც სერვერს მართავს. კლიენტის მხრიდან ფილტრი, რომელიც ეწინააღმდეგება განზრახ სერვერის პოლიტიკას, არის მხარდაჭერის ინციდენტი, რომელიც შემდეგ აუდიტს ელოდება, და გაცილებით იაფია მისი მოგვარება პროფილის გაგზავნამდე, ვიდრე მას შემდეგ, რაც ვინმე შეამჩნევს, რომ მარშრუტები აკლია.