WireGuard PersistentKeepalive: შეინარჩუნეთ NAT რუკა ცოცხალი
თუ საპირისპირო კავშირი მუშაობს მხოლოდ პირის მიერ ტრაფიკის გაგზავნის მაშინვე შემდეგ, რუკა ვადაში გადის. დააყენეთ keepalive როუტერის უკან და შემდეგ წაიკითხეთ რეალური ვადა.
სახლის ყუთი ხსნის გვირაბს და ღრუბლოვან სერვერს უპრობლემოდ აღწევს. ღრუბლოვან სერვერს შეუძლია სახლის აპლიკაციამდე მიაღწიოს ერთი-ორი წუთის განმავლობაში მას შემდეგ, რაც სახლის ყუთმა ბოლოჯერ რამე გაგზავნა, და შემდეგ წყვეტს. WireGuard-ის ჟურნალში არაფერი ჩანს, ხელის ჩამორთმევის შეცდომა არ არის მოხსენებული, და გვირაბის ხელახლა გაშვება ცოტა ხნით ასწორებს. ეს ნიმუში ვადაგასული რუკაა, არა გატეხილი გვირაბი, და ქვემოთ მოცემული სახელმძღვანელო ამას ადასტურებს სანამ რამეს შევცვლით.
დაადასტურეთ, რომ ნიმუში უმოქმედობისას ვადის გასვლაა
განმასხვავებელი დეტალი დროა. თუ საპირისპირო კავშირი მუშაობს მაშინვე მას შემდეგ, რაც სახლის პირი ტრაფიკს გაგზავნის, და წარუმატებელია მშვიდი ინტერვალის შემდეგ, გზა რიგზეა და შუაში არსებული მდგომარეობა არა. თუ ის არასდროს მუშაობდა, თუნდაც ტრაფიკის მაშინვე შემდეგ, ეს არასწორი დიაგნოზია.
sudo wg show wg0 latest-handshakes
sudo wg show wg0 endpoints
sudo wg show wg0 transfer
გაუშვით პირველი ორი მაშინვე მას შემდეგ, რაც სახლის პირი რამეს გაგზავნის, დაელოდეთ ხუთ წუთს და კვლავ გაუშვით. ხელის ჩამორთმევის დროის ნიშანი, რომელიც განრიგის მიხედვით ახლდება ახალი ბოლო წერტილის გარეშე, გეუბნებათ, რომ გვირაბი ცოცხალია. რაც შეიცვალა, არის არამოთხოვნილი პაკეტების გარედან მოსვლის უნარი, რაც გზის, და არა გვირაბის თვისებაა.
შემდეგ გააკეთეთ საპირისპირო ცდა და დააკვირდით გადაცემის მთვლელებს. თუ ღრუბლის მხარე ბაიტებს აგზავნის, სახლის მხარე კი არაფერს იღებს, პაკეტმა ღრუბელი დატოვა და გზაზე მდგომარეობის შემნახველ მოწყობილობაში დაიღუპა. ეს არის ის ხელმოწერა, რომელსაც ეძებთ. თუ ორივე მთვლელი მოძრაობს, გვირაბმა პაკეტი ჩააბარა და ეჭვმიტანილი აპლიკაციაა.
განათავსეთ keepalive როუტერის უკან მდგომ პირზე
მუდმივი keepalive-ები ცოცხლად ინახავენ NAT რუკას და ნებისმიერ ფაირვოლის მდგომარეობას განრიგის მიხედვით პატარა ავთენტიფიცირებული პაკეტის გაგზავნით. პარამეტრი ეკუთვნის როუტერის უკან მდგომ მანქანას, მის ჩანაწერს დისტანციური პირისთვის, რადგან სწორედ ის მხარე ქმნის თავისი გამავალი პაკეტით მდგომარეობას.
[Peer]
PublicKey = <cloud peer public key>
AllowedIPs = 10.71.0.1/32
PersistentKeepalive = 25
შეაერთეთ იგი არსებულ პირის განყოფილებაში. იმავე საჯარო გასაღებით მეორე ბლოკის დამატება პარამეტრების დამატების სწორი გზა არ არის, და wg-quick მათ თქვენთვის არ გააერთიანებს. დოკუმენტირებული 25 წამი მაგალითია, შერჩეული იმისთვის, რომ ჩვეულებრივ UDP ვადებზე დაბლა იყოს, და არა განსაკუთრებული მნიშვნელობის მქონე მნიშვნელობა.
იმავე დირექტივის ღრუბლის მხარეს დადება ამ პრობლემას არ ეხმარება. იმ პირის პაკეტები უკვე საჯარო მისამართიდან მოდის, ამიტომ მნიშვნელოვანი მიმართულებით შესანახი რუკა არ არსებობს. ის ტრაფიკს ზრდის და არაფერს ცვლის.
წაიკითხეთ ტაიმერები, ნაცვლად ინტერვალის გამოცნობისა
keepalive-ები მუშაობენ, რადგან უფრო ხშირად მოდიან, ვიდრე მდგომარეობა ვადაში გადის. ეს ვადას აქცევს იმ რიცხვად, რომელიც ნამდვილად გჭირდებათ, და Linux-ზე ის იკითხება მოწყობილობაზე, რომელიც თარგმანს აკეთებს:
sysctl net.netfilter.nf_conntrack_udp_timeout
sysctl net.netfilter.nf_conntrack_udp_timeout_stream
sudo conntrack -L -p udp --dport 51820
პირველი მნიშვნელობა UDP ნაკადის ვადაა, რომელიც მხოლოდ ერთი მიმართულებით შეინიშნა, ხოლო მეორე მოქმედებს პასუხების დაკვირვების შემდეგ. ორივე ჩვეულებრივ მოკლეა, და გაჩუმებული რუკა მიჰყვება იმას, რაც თქვენს ნაკადს ეხება.
შეადარეთ ეს რიცხვი თქვენს ინტერვალს. 25 წამის keepalive 30 წამის ვადის ქვეშ მუშაობს; იგივე keepalive 15 წამის ვადის ქვეშ არ მუშაობს. გამეორების ნებისმიერი რაოდენობა ამ არითმეტიკას არ ცვლის. ზოგიერთი სამომხმარებლო როუტერი და მობილური ოპერატორი იყენებს გაცილებით მოკლე მნიშვნელობებს, ვიდრე Linux-ის ნაგულისხმევი, ამიტომ ერთ ქსელში მომუშავე კონფიგურაცია მეორეში ვარდება.
| Observation | What it means | Reasonable response |
|---|---|---|
| Works after traffic, dies when idle | Mapping or firewall state expiring | Lower the keepalive interval |
| Never works, even immediately | No return route, listener or firewall | Stop tuning keepalive |
| Works for hours, then dies once | Carrier-side translation or address change | Check the endpoint and logs together |
ცალკე შეამოწმეთ მსმენელი და ფაირვოლი
ცოცხალი რუკა აუცილებელია და არასაკმარისი. სახლის ყუთზე აპლიკაცია უნდა უსმენდეს სწორ მისამართს, და ჰოსტის ფაირვოლი უნდა დაუშვებდეს პაკეტს გაშიფვრის შემდეგ.
sudo ss -lntup | grep 8080
sudo wg show wg0 allowed-ips
curl -sS -m 5 http://10.71.0.2:8080/health
თუ სოკეტი მიბმულია მხოლოდ ფიზიკური ინტერფეისის მისამართზე და არა გვირაბის მისამართზე, გვირაბზე მომავალი პაკეტები იშლება ფაირვოლის კითხვამდე. ეს უკმარისობა ღრუბლის მხრიდან ზუსტად რუკის პრობლემას ჰგავს და უძლებს ნებისმიერ keepalive კორექტირებას.
დაშვებული სიის შემოწმება საპირისპირო მიმართულებით თანაბრად მნიშვნელოვანია. ღრუბლის პირმა, თუ პასუხის გაცემას აპირებს, სახლის გვირაბის მისამართი უნდა დაუშვას წყაროდ, ხოლო სახლის პირმა ღრუბლის მისამართი უნდა დაუშვას დანიშნულებად. keepalive პაკეტები ავთენტიფიცირებული ტრაფიკია და იგივე წესებს იყენებს, ამიტომ მომუშავედ რომ გამოიყურებოდეს keepalive, ის შეიძლება თანაარსებობდეს არამომუშავე აპლიკაციასთან.
გაავრცელეთ ცვლილება და იცოდეთ მისი საზღვრები
გამოიყენეთ პარამეტრი, გადატვირთეთ ინტერფეისი, თუ ეს თქვენი განახლების მეთოდია, და შემდეგ გაიმეორეთ უმოქმედობის ტესტი და არა დაუყოვნებელი ტესტი. დაელოდეთ უფრო მეტს, ვიდრე ადრე წაკითხული ვადა, გააკეთეთ საპირისპირო მოთხოვნა და დაადასტურეთ, რომ მთვლელები ორივე ბოლოში გადაადგილდა.
ჩაწერეთ ინტერვალი და გაზომილი ვადა მის გვერდით. როუტერის firmware-ის მომავალი ცვლილება, ან მობილურ კავშირზე გადასვლა, შეიძლება შეცვალოს ვადა. ჩანაწერია ის, რაც ვიღაცას საშუალებას აძლევს მნიშვნელობა ხელახლა გამოიყვანოს და არა დააკოპიროს. ერთ ხაზში ორი რიცხვი მოგვიანებით მთელ გამოძიებას დაზოგავს.
მუდმივი keepalive-ები იცავენ მდგომარეობას. ისინი არ ხსნიან პორტს, არ ამატებენ ჩანაწერს დაშვებულ სიაში და არ აიძულებენ მსმენელს გამოჩნდეს. როცა საპირისპირო კავშირი საერთოდ არ მუშაობს, ბრალი ამ სამიდან ერთ-ერთზეა, და WireGuard-ის სწრაფი დაწყება იმავე ვიწრო ტერმინებით აღწერს keepalive პარამეტრს.