როგორ გადავიტანოთ Raspberry Pi VPN სერვერი Ethernet-ზე
გადაიტანეთ Raspberry Pi VPN სერვერი Wi-Fi-დან Ethernet-ზე ბოლო წერტილის სახელის, მსმენელის მიბმის, პორტის გადამისამართებისა და ერთნაბიჯიანი დაბრუნების გზის შეცვლის გარეშე.
Pi-ის Wi-Fi-დან კაბელზე გადართვა ხუთწუთიან სამუშაოდ გვეჩვენება და ასე რჩება მხოლოდ მაშინ, თუ გადატანას ოთხ ცალკე პარამეტრად განიხილავთ და არა ერთად. ბოლო წერტილის სახელი, რომელსაც თქვენი კლიენტები იძახებენ, შეიძლება ზუსტად იგივე დარჩეს, სანამ მის ქვეშ არსებული მისამართი იცვლება. სინამდვილეში იშლება ძველ მისამართზე მიბმული მსმენელი, ჯერ კიდევ უსადენო იჯარაზე მიმართული პორტის გადამისამართება ან დაბრუნების გზა, რომელიც გადის იმ ინტერფეისიდან, რომელიც, როგორც ფიქრობდით, უკვე ამოღებული გქონდათ. ეს სახელმძღვანელო ყოველ ნაბიჯზე ღიად ტოვებს აღდგენის გზას, ამიტომ წარუმატებელი გადასვლა მხოლოდ ერთ გადატვირთვად ღირს.
ჩაწერეთ ოთხი პასუხისმგებელი, სანამ რამეს გამორთავთ
ოთხი პარამეტრი წყვეტს, გადაიტანს თუ არა გადასვლა: Pi-ის მისამართი, მიბმის მისამართი OpenVPN, როუტერის გადამისამართების სამიზნე და გზა, რომლითაც მიდიან პასუხები. ჩაწერეთ ოთხივე კაბელის შეხებამდე, რადგან უსადენო იჯარის გაქრობის შემდეგ ძველ მნიშვნელობებს ვეღარ წაიკითხავთ მანქანიდან. საკაბელო ინტერფეისი არ მემკვიდრეობს უსადენო პროფილს, და Bookworm-ზე მისამართი NetworkManager-ში ცხოვრობს, ხოლო Bullseye მას dhcpcd.conf-ში ინახავს. რეზერვაცია, რომელმაც უსადენო MAC მისამართი დაამაგრა, არაფერს ამბობს eth0-ზე. ახალ მისამართს მოეპყარით როგორც ახალ მინიჭებას, რომელსაც საკუთარი მტკიცებულება სჭირდება.
Old wireless lease: 10.42.7.24/24 on wlan0
New wired address: 10.42.7.31/24 on eth0
Client endpoint: vpn.lab.example:1194/udp
მსმენელი მეორე პასუხისმგებელია. თუ სერვისი კონკრეტული მიბმის მისამართით გაეშვა, სოკეტი ძველ ინტერფეისთან ერთად კვდება; თუ ის ყველა მისამართს აბამს, სოკეტი გადარჩება და როუტერის წესი გახდება ერთადერთი, რაც დასაწესებელია.
გადამისამართების სამიზნე და დაბრუნების გზა ის პასუხისმგებლები არიან, რომლებსაც ხალხი გამოტოვებს. გადამისამართება, რომელიც ჯერ კიდევ 10.42.7.24-ზე მიუთითებს, მომდინარე ხელის ჩამორთმევებს აგზავნის მისამართზე, რომელიც Pi-ს აღარ აქვს, ამიტომ კლიენტები დროის ამოწურვით სრულდება სერვერის მხარეს ერთი ჟურნალის ხაზის გარეშე. დაბრუნების გზა მნიშვნელოვანია, როცა ორივე კავშირი ხანმოკლედ აქტიურია, რადგან Pi პასუხობს იმ ინტერფეისიდან, რომელსაც მარშრუტების ცხრილი ანიჭებს უპირატესობას, და ეს ყოველთვის არ არის ის, რომლითაც პაკეტი მოვიდა. ქვემოთ მოცემული მარშრუტის ძებნა აჩვენებს, რომელ წყაროს ირჩევს ბირთვი.
წაიკითხეთ ნამდვილი სოკეტი, სანამ ახალ მისამართს დაეყრდნობით
კონფიგურაციის ფაილები აღწერენ განზრახვას, სოკეტი კი რეალობას. ჰკითხეთ გაშვებულ სერვისს, რაზეა იგი მიბმული, ნაცვლად იმისა, რომ გახსენებულ კონფიგურაციას დაეყრდნოთ. OpenVPN 2.6-ის სახელმძღვანელო --local განსაზღვრავს როგორც ერთ მისამართზე მიბმას და აღნიშნავს, რომ მისი გამოტოვება ყველა ინტერფეისს აბამს.
sudo systemctl cat openvpn-server@server | grep -n -- '--local'
sudo ss -lunp '( sport = :1194 )'
წაიკითხეთ ლოკალური მისამართის სვეტი და არა მდგომარეობის სვეტი. სტრიქონი, სადაც ჩანს 10.42.7.24:1194, ნიშნავს, რომ სოკეტი მიბმულია იმ მისამართზე, რომელსაც ახლა ამოიღებთ, ხოლო 0.0.0.0:1194 ან *:1194 ნიშნავს, რომ დემონი თავად მიჰყვება ინტერფეისის ცვლილებას. თუ მისამართი მიბმულია, შეცვალეთ პროფილი და გადატვირთეთ ერთეული იმის ნაცვლად, რომ ცოცხალი სოკეტი ხელით გადაწეროთ, შემდეგ კი დაადასტურეთ, რომ სერვისი კვლავ აღწევს თავის სერტიფიკატისა და გასაღების ფაილებს.
გაიარეთ გადატანა იმ თანმიმდევრობით, რომელიც გაკავშირებად გიტოვებთ
თანმიმდევრობა აქ უფრო მნიშვნელოვანია ვიდრე სიჩქარე. ასწიეთ საკაბელო კავშირი, სანამ უსადენო ჯერ კიდევ მუშაობს, დაადასტურეთ ახალი მისამართი და დაბრუნების გზა, და მხოლოდ ამის შემდეგ ამოიღეთ უსადენო პროფილი. ეს თანმიმდევრობა ღიად ინახავს მუშა სესიას, სანამ ჩანაცვლება დამტკიცდება.
ip -br addr show eth0
ip route get 203.0.113.10
nmcli -g ipv4.method,ipv4.addresses con show "Wired connection 1"
პირველი ბრძანება პასუხობს, მიიღო თუ არა eth0-მ თქვენ მიერ განზრახული მისამართი, ხოლო მეორე ბეჭდავს წყაროს მისამართს, რომელსაც ბირთვი გამოიყენებდა გარე დანიშნულებისთვის, ამიტომ გაუშვით ის ცვლილებამდე და შემდეგ. თუ ეს წყარო ჯერ კიდევ უსადენო მისამართია, საკაბელო კავშირი ჯერ არ არის სასურველი გზა და გარე ტესტი ჩავარდება მიზეზით, რომელსაც OpenVPN-თან არაფერი აქვს საერთო. გაასწორეთ მარშრუტიზაციის უპირატესობა, სანამ გადამისამართებას შეეხებით.
როცა ორივე კავშირი აქტიურია, Pi შეიძლება უპირატესობა მიანიჭოს უსადენო ნაგულისხმევ მარშრუტს, რადგან ის პირველი დაყენდა ან რადგან საკაბელო კავშირს უფრო მაღალი მეტრიკა აქვს. Bookworm-ზე მხარდაჭერილი პარამეტრია ipv4.route-metric კავშირზე, ხოლო Bullseye-ზე ეკვივალენტია ინტერფეისისთვის დამახასიათებელი metric ხაზი dhcpcd.conf ფაილში. შეამცირეთ უსადენო კავშირის პრიორიტეტი მისი გამორთვის ნაცვლად, რომ დაბრუნების გზა ერთი ბრძანების მოშორებით დარჩეს.
დაამტკიცეთ გვირაბი გარედან და არა LAN-იდან
დივანიდან მომუშავე VPN კავშირი ნაკლებს ამტკიცებს, ვიდრე ჩანს. ტრაფიკი LAN-ის შიგნიდან საჯარო მისამართისკენ გადის hairpin ან არეკვლის წესებზე, რომლებსაც როუტერები არათანმიმდევრულად ახორციელებენ, ამიტომ წარმატებული LAN ტესტი შეიძლება თანაარსებობდეს გატეხილ გარე გზასთან. მისაღები ტესტისთვის გამოიყენეთ მობილური მონაცემებით მომუშავე ტელეფონი ან ქსელის გარეთ არსებული ნებისმიერი ჰოსტი. LAN-ის მცდელობა შეინახეთ ცალკე არასავალდებულო დიაგნოსტიკად.
შემდეგ წაიკითხეთ ჟურნალი იმ თანმიმდევრობით, რომლითაც პაკეტები მოდიან. სრულიად არაფერი ნიშნავს, რომ ხელის ჩამორთმევა Pi-მდე არასდროს მისულა, ამიტომ გადამისამართების სამიზნე ან ჰოსტის ფაილუოლი არასწორია. დაწყებული და ჩარჩენილი ხელის ჩამორთმევა მიუთითებს გასაღებებზე, სერტიფიკატებზე ან MTU-ზე. დასრულებული და ჩავარდნილი სესია ჩვეულებრივ ნიშნავს დაბრუნების გზას ან მეორე ნაგულისხმევ მარშრუტს, და კლიენტის ჟურნალის ხაზი Initialization Sequence Completed გეუბნებათ, რომ თავად გვირაბი ავიდა.
sudo journalctl -u openvpn-server@server -n 40 --no-pager
sudo tcpdump -ni any udp port 1194 -c 20
თუ სერვერის ჟურნალში არაფერი ჩნდება, სანამ კლიენტი ხელახლა ცდილობს, შეწყვიტეთ OpenVPN-ის კონფიგურაციის კითხვა და დაუბრუნდით გადამისამართების სამიზნეს. ჩაჭერა პასუხობს ჩამოსვლის კითხვას წამებში, ხოლო უპასუხო შემომავალი პაკეტები ავიწროებს პრობლემას მარშრუტამდე.
შეინარჩუნეთ ერთნაბიჯიანი დაბრუნება და ამოიღეთ უსადენო პროფილი
დატოვეთ უსადენო პროფილი დაყენებული, სანამ საკაბელო კონფიგურაცია გადატვირთვას გადაიტანს. nmcli con show ჩამოთვლის პროფილების სახელებს, რომლებიც დაგჭირდებათ, და წაშლილი პროფილი ყველაზე ცუდ მომენტში მეხსიერებიდან უნდა აღდგეს. ჩაწერეთ ინტერფეისის სახელი, მისამართების მეთოდი და მეტრიკა დანარჩენი ოთხი მნიშვნელობის გვერდით. ჩანაწერიდან აკრეფადი დაბრუნება უფრო ღირებულია, ვიდრე ის, რაც თავიდან უნდა აეწყოთ.
უსადენო დამოკიდებულების ამოღება თვისების ცვლილებაა და არა წაშლა. connection.autoconnect no-ის დაყენებით სერტიფიკატები და მისამართების ისტორია უცვლელი რჩება, ხოლო Pi-ს ეკრძალება ხელახლა დაუკავშირდეს იმ ქსელს, საიდანაც წახვედით.
nmcli con show
sudo nmcli con up "Wired connection 1"
sudo nmcli con mod "previously-used-wifi" connection.autoconnect no
სანამ სამუშაოს დასრულებულად გამოაცხადებთ, დაადასტურეთ ოთხი რამ: გადამისამართების სამიზნე ემთხვევა საკაბელო მისამართს, მსმენელმა გადატვირთვას გაუძლო, გარე კლიენტი ასრულებს ხელის ჩამორთმევას, და Pi გადატვირთვის შემდეგ კვლავ პასუხობს საკაბელო მისამართზე. გადატვირთვა ყველაზე იაფი გზაა იმ მინიჭების დასაჭერად, რომელიც მხოლოდ გაშვებულ ბირთვში არსებობდა. თუ ოთხიდან რომელიმე ჩავარდა, ხელახლა ასწიეთ უსადენო პროფილი sudo nmcli con up ბრძანებით და შეადარეთ ჩაწერილი მნიშვნელობები აქტიურებს.