WireGuard-ის სრული გვირაბი: AllowedIPs 0.0.0.0/0 საკმარისი არ არის
0.0.0.0/0 და ::/0 მხოლოდ იმას ირჩევს, თუ რას ატარებს წყვილი. კლიენტის მენეჯერი, კარიბჭეზე გადაცემა, DNS და წარუმატებლობის პოლიტიკა მაინც უნდა დაყენდეს.
წყვილის AllowedIPs-ში 0.0.0.0/0, ::/0 ჩასმა ის ნაბიჯია, რომელიც ყველას ახსოვს, და ის მხოლოდ იმას წყვეტს, თუ რა ტრაფიკის ტარება შეიძლება წყვილმა. ეს პრეფიქსები არ ქმნიან მარშრუტებს, მეორე მხარეს არაფერს გადასცემენ და ყოველი აპლიკაციის რეზოლვერს ზუსტად იქ ტოვებენ, სადაც იყო. ოთხი ცალკე რამ ერთდროულად უნდა იყოს ჭეშმარიტი, რომ სრული გვირაბი ნამდვილად სრული იყოს, და უმჯობესია მათი შემოწმება ქვემოთ მოცემული თანმიმდევრობით, რადგან გვიანი შემოწმება ვერ იხსნის ადრინდელს. ქვემოთ ყოველი შემოწმება ფაქტია, რომლის წაკითხვაც მანქანიდან შეიძლება, და არა პარამეტრი, რომლის გამოყენების იმედი გაქვთ.
რას ირჩევს წყვილის პრეფიქსი და რას არა
AllowedIPs ერთდროულად სელექტორიც არის და უფლებამოსილებაც. ის ადგილობრივ მხარეს ეუბნება, თუ რომელი დანიშნულებები შეიძლება გაიგზავნოს ამ წყვილზე, და მიმღებ მხარეს ეუბნება, თუ რომელი წყაროს მისამართები შეიძლება წარმოადგინოს ამ წყვილმა. ეს არის მთელი სამუშაო. ამ აღწერაში არაფერი ქმნის მარშრუტს ჰოსტზე, არ რთავს გადაცემას შორეულ მხარეს და არ ეხება სახელების გარჩევას.
ამიტომ კონფიგურაცია შეიძლება სრულად გამოიყურებოდეს და გაყოფილი გვირაბივით მოიქცეს. პრეფიქსი ამბობს, რომ წყვილი ყველაფერს მიიღებდა; ჰოსტის მარშრუტიზაციის ცხრილი წყვეტს, თუ რა აღწევს იქ რეალურად, და კარიბჭე წყვეტს, გამოდის თუ არა რამე გარეთ. ამ სამი გადაწყვეტილებიდან არცერთი არ ცხოვრობს წყვილის ნაწილში.
კლიენტის მარშრუტიზაცია და არა მხოლოდ წყვილების სია
მენეჯერები, როგორიცაა wg-quick პროგრამავენ ჰოსტის მარშრუტიზაციის ცხრილს თქვენ ნაცვლად, ამიტომ ორი იდენტური კონფიგურაციის ფაილი სხვადასხვაგვარად იქცევა იმის მიხედვით, თუ როგორ ავიდა ინტერფეისი. მინიმალური პროფილი საკმარისად მოკლეა, რომ ერთ ჯერზე წაიკითხოთ:
[Interface]
Address = 10.8.0.2/32
DNS = 10.8.0.1
[Peer]
AllowedIPs = 0.0.0.0/0, ::/0
Endpoint = vpn.example.net:51820
სამუშაოს ორი დეტალი ატარებს. Address ველი ერთი ჰოსტის პრეფიქსია და არა ქვექსელი, რომელსაც კლიენტი საკუთარად მიიჩნევს, და სწორედ მენეჯერი აქცევს ნაგულისხმევ AllowedIPs-ს რეალურ ნაგულისხმევ მარშრუტად. ასწიეთ იგივე ფაილი ip link და wg setconf -ით და არცერთი მარშრუტი არ გამოჩნდება, რაც გატეხილ გვირაბს ჰგავს და სინამდვილეში ჯანმრთელი გვირაბია მარშრუტიზაციის ნაბიჯის გამოტოვებით. wg-quick -ის სახელმძღვანელო აღწერს მარშრუტიზაციას და Table ქცევას, რომელსაც ეს მენეჯერები ამატებენ.
წაიკითხეთ შედეგი და არა ფაილი: ip route get 1.1.1.1 უნდა ასახელებდეს გვირაბის ინტერფეისს და wg show უნდა იტყობინებოდეს ბოლო ხელის ჩამორთმევას მოძრავი გადაცემის მთვლელით. მარშრუტის გარეშე ხელის ჩამორთმევა ნიშნავს, რომ მენეჯერი არასოდეს გაშვებულა, და პროფილის ხელახლა რედაქტირება ამას არ გამოასწორებს. გაუშვით ინტერფეისი ისე, როგორც მომხმარებელი გაუშვებს, თორემ ტესტი თქვენს shell-ს გაზომავს განლაგების ნაცვლად.
საბოლოო წერტილი გვირაბის გარეთ შენარჩუნება
სრული გვირაბი იჭერს ყველა დანიშნულებას, მათ შორის იმას, რომელთანაც უნდა ისაუბროს არსებობისთვის. მენეჯერები ამას წყვეტენ საბოლოო წერტილისთვის ჰოსტის მარშრუტის დამატებით საწყისი კარიბჭის გავლით, ამიტომ სწორი კონფიგურაცია თითქმის ყოველთვის შეიცავს ერთ განზრახ გამონაკლისს. კონფიგურაციის ნახევრის მენეჯერით და მეორე ნახევრის ხელით გამოყენება იმის ჩვეული გზაა, რომ ეს გამონაკლისი დაიკარგოს.
თუ საბოლოო წერტილი ჰოსტის სახელია, რომელიც რამდენიმე მისამართზე ან იმ ოჯახზე იხსნება, რომელსაც თქვენ არ ატარებთ, გამონაკლისი ცუდად ბერდება და გვირაბი შეიძლება ჩავარდეს ჩვეულებრივად მოჩვენებული ხელახალი დაკავშირების შემდეგ. მიამაგრეთ საბოლოო წერტილი თქვენ მიერ კონტროლირებულ მისამართს, ან დაადასტურეთ, რომ მენეჯერი მას ხელახლა აფასებს, და ყოველი ქსელური ცვლილების შემდეგ ხელახლა წაიკითხეთ ჰოსტის მარშრუტი.
იგივე მექანიზმი ხსნის, თუ რატომ ეჯიბრება სრული გვირაბი ხელის პორტალს. პორტალი მოელის თქვენი გვირაბის მიერ ახლა დაჭერილი ტრაფიკის ჩაჭერას, ამიტომ სასტუმროსა და აეროპორტის ქსელებში გვირაბს პორტალში შესვლის შემდეგ ასწევთ და არასოდეს მანამდე.
გადაცემა და უკან დაბრუნების გზა კარიბჭეზე
კარიბჭეზე ჩართეთ გადაცემა იმ ოჯახისთვის, რომელსაც ატარებთ, ნება დართეთ forward ჯაჭვს ორივე მიმართულებით, როცა თარგმნით, და დაადასტურეთ უკან დაბრუნების გზა წყაროზე სპეციფიკური ძებნით. აქედან არაფერი გამომდინარეობს წარმატებული ხელის ჩამორთმევიდან, რადგან ხელის ჩამორთმევა მხოლოდ იმას ამტკიცებს, რომ ორ წყვილს შეუძლია UDP-ის გაცვლა. ის არაფერს ამბობს იმაზე, თუ რა ხდება შემდეგ დეკაფსულირებულ პაკეტთან.
sysctl net.ipv4.ip_forward net.ipv6.conf.all.forwarding
ip route get 1.1.1.1 from 10.8.0.2
ძებნა სრულდება კარიბჭეზე და არა კლიენტზე, თორემ სხვა მარშრუტიზაციის ცხრილს წაიკითხავთ. თუ ის ასახელებს არასწორ ინტერფეისს ან იტყობინება, რომ მარშრუტი არ არის, მაშინ კლიენტის მხარეს ვერც ერთი ცვლილება ვერ შექმნის ინტერნეტიდან გასასვლელს. როცა კარიბჭე გარეთ გასვლისას თარგმნის კლიენტების მისამართებს, პასუხი დამოკიდებულია ამ თარგმნის მდგომარეობაზე, ამიტომ წესი უნდა არსებობდეს ნაკადის ორივე მიმართულებისთვის და არა მხოლოდ გამავალი.
DNS და წარუმატებლობის მდგომარეობა, ცალ-ცალკე შემოწმებული
თავად პროტოკოლი არ აყენებს არცერთი აპლიკაციის რეზოლვერს. wg-quick იყენებს DNS ხაზს დისტრიბუციის რეზოლვერის ინტეგრაციის გავლით, საკუთარი სტეკების მქონე კონტეინერებმა და ბრაუზერებმა შეიძლება უგულებელყონ ის, და ამიტომ სახელი შეიძლება ჩავარდეს, სანამ გვირაბი პაკეტებს იდეალურად ატარებს. შეამოწმეთ ჰოსტის სახელით და არა მისამართით, და ჩაწერეთ, რომელი სერვერი გასცა პასუხი, იმის ნაცვლად რომ ჩათვალოთ, თითქოს პროფილის სერვერმა გასცა.
მისამართების ოჯახები ცალკე პასუხის მქონე ცალკე ტესტია. v4-ის ნაგულისხმევი არაფერს ამბობს იმაზე, თუ რას გააკეთებს აპლიკაციის v6 კავშირი, და გვირაბი, რომელიც ჩუმად ჟონავს მეორე ოჯახს, უარესია, ვიდრე ის, რომელიც ხმამაღლა ვარდება. იკითხეთ სახელი ყოველი ოჯახის გავლით, წაიკითხეთ ინტერფეისი, რომელიც ყოველმა მოთხოვნამ გამოიყენა, და შეამოწმეთ თარგმნის მთვლელები მანამდე და შემდეგ, რადგან წესი, რომელიც არაფერს ემთხვევა, ზუსტად ისე გამოიყურება, როგორც დაკარგული წესი.
და ბოლოს, შეამოწმეთ ის მდგომარეობა, რომელიც გსურთ, როცა გვირაბი ჩერდება. სრული გვირაბი უნდა ჩავარდეს დახურულად იმ ტრაფიკისთვის, რომელსაც აცხადებს: თუ ინტერფეისი ვარდება და აპლიკაციები ჩუმად აგრძელებენ ფიზიკური კავშირით, დიზაინი დამატებითი ნაბიჯებით გაყოფილი გვირაბია. ჩაწერეთ განზრახული წარუმატებლობის ქცევა, შეამოწმეთ ის განზრახ, და დაასრულეთ ოთხი პასუხის ჩაწერით — რომელი მენეჯერი ასწევს ინტერფეისს, რომელი მარშრუტი ატარებს ნაგულისხმევს, ვინ გადასცემს და თარგმნის კარიბჭეზე, და რომელი რეზოლვერი პასუხობს.