პაკეტი ტოვებს ლეპტოპს, არასოდეს აღწევს VPN კარიბჭეს და არც ერთი firewall მრიცხველი არ იძვრის. მარშრუტების ცხრილმა უკვე გადაწყვიტა პაკეტის ბედი: blackhole ჩანაწერი დაემთხვა მას და ბირთვმა გადააგდო ის, სანამ რომელიმე ინტერფეისი დაინახავდა. ეს ქცევა სასარგებლოა, როცა დანიშნულების ადგილი დახურულად უნდა ჩავარდეს, მაგრამ ეს ვიწრო ფარგლების მარშრუტიზაციის მოქმედებაა. მისი სრულ kill switch-ად მიჩნევა სწორედ ის ადგილია, სადაც დიზაინები ცდებიან.

რას ემთხვევა სინამდვილეში გადაგდების მოქმედება

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

ამიტომ blackhole-ის ფარგლები ზუსტია და ადვილად ფორმულირდება: ის ფარავს პრეფიქსს, ცხრილში, იმ მისამართების ოჯახისთვის. ის არ ფარავს დანიშნულებას, რომელსაც სხვა ცხრილი მოიგებდა და არ ფარავს IPv6-ს მხოლოდ იმიტომ, რომ IPv4 პრეფიქსი გადაგდებულია.

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

blackhole არ არის იგივე, რაც unreachable ან prohibit

Linux გვთავაზობს გადაგდების მსგავს სამ მარშრუტის ტიპს და ისინი განსხვავდებიან იმით, რასაც გამომგზავნი ამჩნევს. blackhole პაკეტს პასუხის გარეშე ყრის, ამიტომ კლიენტი ხედავს დროის ამოწურვას. unreachable მარშრუტი აბრუნებს ICMP unreachable შეტყობინებას, ამიტომ კავშირი სწრაფად ვარდება ჰოსტის ან ქსელის შეცდომით. prohibit მარშრუტი აბრუნებს ადმინისტრაციული აკრძალვის შეცდომას, რაც უფრო ახლოსაა პოლიტიკის განზრახ უარყოფასთან.

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

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

როგორ შედარება kill switch-თან

kill switch პაკეტების ფილტრაციაა: firewall წესი, რომელიც ყრის გამავალ ტრაფიკს, რომელიც გვირაბის გარეთ გავიდოდა. blackhole მარშრუტი გადაცემის გადაწყვეტილებაა, რომელიც უფრო ადრე მიიღება სტეკში. ორივეს შეუძლია ტრაფიკის შეჩერება, მაგრამ ისინი სხვადასხვა რამეს ხედავენ და სხვადასხვა შემთხვევას უშვებენ.

MechanismWhat it blocksWhat it missesHow failure looks
Blackhole routeDestinations matching the prefix and tableOther tables, other address families, traffic with a different routeSilent timeout
Firewall kill switchEgress not bound to the tunnel interfaceRules that are too broad can break the endpoint or DHCPDropped packets with counters
WireGuard AllowedIPsDestinations not routed into the interfaceTraffic that never enters the interface at allNo tunnel route, direct egress

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

WireGuard-ის AllowedIPs კრიპტოგასაღების მარშრუტიზაციაა და არა firewall. ის წყვეტს, რომელი დანიშნულების პრეფიქსები მიიღება ინტერფეისში, და პროფილი, რომელიც მხოლოდ გვირაბის ქვექსელს ჩამოთვლის, უბრალოდ სხვა დანიშნულებებს ჩვეულებრივ ნაგულისხმევ მარშრუტს უტოვებს. ამიტომ სრული გვირაბის პროფილები იყენებენ 0.0.0.0/0-ს და ამიტომ wg-quick ასევე აყენებს firewall წესებს, როცა შეუძლია.

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

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

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

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

დანერგეთ ის ტაიმერით და უკუქცევით

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

sudo ip route replace blackhole 10.0.0.0/8
ip route get 10.1.2.3
sudo systemd-run --on-active=60 /sbin/ip route del blackhole 10.0.0.0/8

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

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

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