WireGuard PersistentKeepalive: κρατήστε την αντιστοίχιση NAT ζωντανή
Αν η αντίστροφη σύνδεση λειτουργεί μόνο αμέσως αφού ο ομότιμος στείλει κίνηση, η αντιστοίχιση λήγει. Ρυθμίστε το keepalive πίσω από τον δρομολογητή και μετά διαβάστε το πραγματικό όριο χρόνου.
Το οικιακό κουτί ανοίγει το τούνελ και φτάνει στον διακομιστή cloud χωρίς πρόβλημα. Ο διακομιστής cloud μπορεί να φτάσει την οικιακή εφαρμογή για ένα ή δύο λεπτά αφού το οικιακό κουτί έστειλε τελευταία φορά κάτι, και μετά σταματά. Δεν εμφανίζεται τίποτα στο αρχείο καταγραφής του WireGuard, δεν αναφέρεται σφάλμα χειραψίας, και η επανεκκίνηση του τούνελ το διορθώνει για λίγο. Αυτό το μοτίβο είναι μια αντιστοίχιση που λήγει, όχι ένα χαλασμένο τούνελ, και ο οδηγός παρακάτω το επιβεβαιώνει πριν αλλάξει οτιδήποτε.
Επιβεβαιώστε ότι το μοτίβο είναι λήξη αντιστοίχισης σε αδράνεια
Η χαρακτηριστική λεπτομέρεια είναι ο χρόνος. Αν η αντίστροφη σύνδεση λειτουργεί αμέσως αφού ο οικιακός ομότιμος στείλει κίνηση και αποτυγχάνει μετά από ένα ήσυχο διάστημα, η διαδρομή είναι εντάξει και η κατάσταση στη μέση δεν είναι. Αν δεν λειτούργησε ποτέ, ακόμη και αμέσως μετά την κίνηση, αυτή είναι λάθος διάγνωση.
sudo wg show wg0 latest-handshakes
sudo wg show wg0 endpoints
sudo wg show wg0 transfer
Εκτελέστε τις δύο πρώτες εντολές αμέσως αφού ο οικιακός ομότιμος στείλει κάτι, περιμένετε πέντε λεπτά και εκτελέστε τις ξανά. Μια χρονοσφραγίδα χειραψίας που ανανεώνεται σύμφωνα με το πρόγραμμα χωρίς νέο τελικό σημείο σας λέει ότι το τούνελ είναι ζωντανό. Αυτό που άλλαξε είναι η ικανότητα των μη ζητημένων πακέτων να φτάνουν από έξω, που είναι ιδιότητα της διαδρομής και όχι του τούνελ.
Στη συνέχεια κάντε μια αντίστροφη προσπάθεια και παρακολουθήστε τους μετρητές μεταφοράς. Αν η πλευρά cloud στέλνει byte και η οικιακή πλευρά δεν λαμβάνει κανένα, το πακέτο έφυγε από το cloud και πέθανε σε μια συσκευή που κρατά κατάσταση στη διαδρομή. Αυτή είναι η υπογραφή που ψάχνετε. Αν κινούνται και οι δύο μετρητές, το τούνελ παρέδωσε το πακέτο και ο ύποπτος είναι η εφαρμογή.
Βάλτε το keepalive στον ομότιμο πίσω από τον δρομολογητή
Τα μόνιμα keepalive κρατούν ζωντανή μια αντιστοίχιση NAT και οποιαδήποτε κατάσταση τείχους προστασίας στέλνοντας ένα μικρό πιστοποιημένο πακέτο σε τακτικό πρόγραμμα. Η ρύθμιση ανήκει στο μηχάνημα πίσω από τον δρομολογητή, στην καταχώρισή του για τον απομακρυσμένο ομότιμο, γιατί αυτή είναι η πλευρά της οποίας το εξερχόμενο πακέτο δημιουργεί την κατάσταση.
[Peer]
PublicKey = <cloud peer public key>
AllowedIPs = 10.71.0.1/32
PersistentKeepalive = 25
Συγχωνεύστε το στην υπάρχουσα ενότητα ομοτίμου. Η προσθήκη δεύτερου μπλοκ με το ίδιο δημόσιο κλειδί δεν είναι έγκυρος τρόπος προσθήκης επιλογών, και το wg-quick δεν θα τα συγχωνεύσει για εσάς. Τα τεκμηριωμένα 25 δευτερόλεπτα είναι ένα παράδειγμα που επιλέχθηκε για να βρίσκεται κάτω από συνηθισμένα όρια χρόνου UDP, όχι μια τιμή με ιδιαίτερη σημασία.
Η τοποθέτηση της ίδιας οδηγίας στην πλευρά cloud δεν βοηθά αυτό το πρόβλημα. Τα πακέτα αυτού του ομοτίμου φτάνουν ήδη από δημόσια διεύθυνση, οπότε δεν υπάρχει αντιστοίχιση να διατηρηθεί στην κατεύθυνση που έχει σημασία. Προσθέτει κίνηση και δεν αλλάζει τίποτα.
Διαβάστε τα χρονόμετρα αντί να μαντεύετε διάστημα
Τα 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 που έχει παρατηρηθεί μόνο προς μία κατεύθυνση, και η δεύτερη ισχύει όταν έχουν παρατηρηθεί απαντήσεις. Και οι δύο είναι συνήθως σύντομες, και μια αντιστοίχιση που σωπαίνει θα ακολουθήσει όποια ισχύει για τη ροή σας.
Συγκρίνετε αυτόν τον αριθμό με το διάστημά σας. Ένα keepalive 25 δευτερολέπτων κάτω από όριο 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
Αν ο υποδοχέας είναι δεσμευμένος μόνο στη διεύθυνση της φυσικής διασύνδεσης και όχι στη διεύθυνση του τούνελ, τα πακέτα που φτάνουν στο τούνελ απορρίπτονται πριν ερωτηθεί καν το τείχος προστασίας. Αυτή η αποτυχία μοιάζει από την πλευρά cloud ίδια με πρόβλημα αντιστοίχισης, και επιβιώνει από κάθε προσαρμογή keepalive.
Ο έλεγχος της λίστας επιτρεπόμενων είναι εξίσου σημαντικός και στην άλλη κατεύθυνση. Ο ομότιμος cloud πρέπει να επιτρέπει τη διεύθυνση του οικιακού τούνελ ως πηγή αν πρόκειται να απαντήσει, και ο οικιακός ομότιμος πρέπει να επιτρέπει τη διεύθυνση cloud ως προορισμό. Τα πακέτα keepalive είναι πιστοποιημένη κίνηση και εφαρμόζουν τους ίδιους κανόνες, γι’ αυτό ένα keepalive που φαίνεται να λειτουργεί μπορεί να συνυπάρχει με μια εφαρμογή που δεν λειτουργεί.
Κυκλοφορήστε την αλλαγή και γνωρίστε τα όριά της
Εφαρμόστε τη ρύθμιση, επανεκκινήστε τη διασύνδεση αν αυτός είναι ο τρόπος ενημέρωσής σας, και μετά επαναλάβετε τη δοκιμή αδράνειας αντί για την άμεση δοκιμή. Περιμένετε περισσότερο από το όριο χρόνου που διαβάσατε νωρίτερα, κάντε ένα αντίστροφο αίτημα και επιβεβαιώστε ότι οι μετρητές κινήθηκαν και στα δύο άκρα.
Καταγράψτε το διάστημα και το μετρημένο όριο χρόνου δίπλα του. Μια μελλοντική αλλαγή στο firmware του δρομολογητή, ή μια μετακίνηση σε κινητή σύνδεση, μπορεί να αλλάξει το όριο χρόνου. Η σημείωση είναι αυτό που επιτρέπει σε κάποιον να ξαναβγάλει την τιμή αντί να την αντιγράψει. Δύο αριθμοί σε μια γραμμή γλιτώνουν μια ολόκληρη έρευνα αργότερα.
Τα μόνιμα keepalive προστατεύουν κατάσταση. Δεν ανοίγουν θύρα, δεν προσθέτουν καταχώριση στη λίστα επιτρεπόμενων και δεν κάνουν έναν ακροατή να εμφανιστεί. Όταν η αντίστροφη σύνδεση δεν λειτουργεί καθόλου, το σφάλμα είναι ένα από αυτά τα τρία, και ο γρήγορος οδηγός του WireGuard περιγράφει τη ρύθμιση keepalive με τους ίδιους στενούς όρους.