Η χειραψία του WireGuard λειτουργεί αλλά δεν υπάρχει internet: ακολουθήστε το πακέτο
Η χειραψία αποδεικνύει μόνο κλειδιά και προσβασιμότητα. Ακολουθήστε ένα πακέτο από το AllowedIPs μέσα από προώθηση, NAT και τη διαδρομή επιστροφής για να δείτε πού σταματά.
Το τούνελ είναι ενεργό, το wg show αναφέρει πρόσφατη χειραψία, μπορείτε να κάνετε ping στη διεύθυνση του τούνελ του διακομιστή, και τίποτα πέρα από αυτήν δεν απαντά. Το ένστικτο είναι να αναδημιουργήσετε κλειδιά ή να μοιραστείτε ξανά τη διαμόρφωση. Αυτό αλλάζει ακριβώς το τμήμα της διαδρομής που έχει ήδη αποδειχθεί ότι λειτουργεί.
Μια ολοκληρωμένη χειραψία λέει ότι τα δύο μέρη συμφωνούν στα κλειδιά, ότι το UDP φτάνει στο τελικό σημείο και ότι η κρυπτογραφική δρομολόγηση δέχεται το πακέτο. Δεν λέει τίποτα για το αν το πακέτο μπορεί να φύγει από τον διακομιστή μετά.
Ακολουθήστε λοιπόν ένα πακέτο αντί να μαντεύετε. Υπάρχουν τέσσερα σημεία όπου μπορεί να πεθάνει, και το καθένα αφήνει διαφορετικό ίχνος.
Τι αποδεικνύει στην πραγματικότητα η χειραψία
Το WireGuard είναι πρωτόκολλο UDP που στήνει συνεδρία με χειραψία Noise και μετά κρυπτογραφεί πακέτα για έναν ομότιμο. Όταν το wg show εμφανίζει χειραψία λίγων δευτερολέπτων και αυξανόμενο μετρητή μεταφοράς, το τελικό σημείο, τα κλειδιά και το δημόσιο κλειδί του ομότιμου είναι όλα σωστά.
Αυτό που δεν αποδεικνύει είναι ότι ο πελάτης σας στέλνει καθόλου κίνηση προς το internet στη διεπαφή, ότι ο διακομιστής δέχεται να την προωθήσει ή ότι μια απάντηση μπορεί να βρει τον δρόμο της επιστροφής. Αυτές είναι αποφάσεις δρομολόγησης του πυρήνα και του τείχους προστασίας, και λαμβάνονται έξω από το τούνελ.
Γι’ αυτό το ping στη διεύθυνση του τούνελ του διακομιστή είναι τόσο παραπλανητικό τεστ. Αυτό το πακέτο είναι απευθυνόμενο στον ίδιο τον διακομιστή, οπότε τερματίζεται τοπικά. Δεν χρειάζεται ποτέ προώθηση, ποτέ μετάφραση και ποτέ διαδρομή επιστροφής από το internet.
Το AllowedIPs είναι απόφαση δρομολόγησης
Στον πελάτη, το AllowedIPs κάνει δύο δουλειές. Είναι ο πίνακας κρυπτογραφικής δρομολόγησης που αποφασίζει ποιες διευθύνσεις προορισμού στέλνονται στο τούνελ αυτού του ομότιμου, και είναι η λίστα των διευθύνσεων προέλευσης που ο ομότιμος θα δεχτεί από εσάς. Αν η διαμόρφωση του πελάτη απαριθμεί μόνο το 10.8.0.0/24, οι δημόσιοι προορισμοί δεν μπαίνουν ποτέ στη διεπαφή και η κανονική προεπιλεγμένη διαδρομή σας τους μεταφέρει έξω από το τούνελ. Τότε το τούνελ λειτουργεί άψογα και δεν κάνει τίποτα από όσα θέλατε.
Κοιτάξτε τι εγκατέστησε πραγματικά ο πελάτης και όχι τι λέει το αρχείο διαμόρφωσης:
wg show wg0 allowed-ipsip route get 1.1.1.1
Η δεύτερη εντολή είναι η καθοριστική. Αν η απάντηση αναφέρει τη φυσική σας διεπαφή και την κανονική πύλη, το πακέτο δεν δρομολογείται μέσα στο τούνελ και καμία αλλαγή στην πλευρά του διακομιστή δεν θα το διορθώσει. Προσθέστε το 0.0.0.0/0 για IPv4 και το ::/0 για IPv6 χωριστά· ένας κανόνας που πιάνει τα πάντα για τη μία οικογένεια αφήνει την άλλη στην αρχική της διαδρομή, και αυτό είναι συχνή αιτία ενός τούνελ IPv4 που δουλεύει και μιας αναζήτησης IPv6 που έχει κολλήσει.
Πού πεθαίνει το πακέτο στην πύλη
Αν η διαδρομή είναι σωστή και το πακέτο εξακολουθεί να μην πηγαίνει πουθενά, φτάνει στον διακομιστή και σταματά εκεί. Τέσσερις έλεγχοι καλύπτουν τις περισσότερες πύλες.
Προώθηση. Το sysctl net.ipv4.ip_forward που επιστρέφει 0 είναι η κλασική απάντηση, και πολλές διανομές έχουν ακόμη 0 ως προεπιλογή. Πρέπει να είναι 1, και να οριστεί μόνιμα σε αρχείο sysctl αντί με εντολή που εξαφανίζεται στην επανεκκίνηση. Η προώθηση IPv6 είναι ξεχωριστός διακόπτης.
Η πολιτική φιλτραρίσματος. Μια αλυσίδα FORWARD με προεπιλεγμένη πολιτική απόρριψης θα πετάει την κίνηση του τούνελ ενώ θα επιτρέπει την κίνηση προς τον ίδιο τον υπολογιστή, κάτι που ταιριάζει ακριβώς με το σύμπτωμα. Διαβάστε το ζωντανό σύνολο κανόνων, όχι ένα αποθηκευμένο αρχείο: nft list ruleset ή iptables -S.
Μετάφραση ή δρομολόγηση. Οι πελάτες με ιδιωτικές διευθύνσεις τούνελ χρειάζονται είτε NAT προέλευσης στη διεπαφή εξόδου του διακομιστή είτε ένα δρομολογημένο πρόθεμα που το ανάντη δίκτυο ξέρει να επιστρέφει. Η επιλογή μεταξύ τους ακολουθεί το σχέδιο διευθύνσεων. Η προσθήκη MASQUERADE σε δίκτυο που ήδη δρομολογεί πίσω το πρόθεμά σας είναι ακίνδυνη αλλά άσκοπη, και η παράλειψή του εκεί όπου δεν υπάρχει διαδρομή αφήνει τις απαντήσεις να απευθύνονται σε μη δρομολογήσιμο ιδιωτικό εύρος.
Η διαδρομή επιστροφής. Σε δρομολογημένα σχέδια, ο ανάντη δρομολογητής χρειάζεται μια διαδρομή που δείχνει στον διακομιστή σας. Το δίκτυο του παρόχου μπορεί επίσης να το μπλοκάρει: αρκετά cloud ενεργοποιούν έλεγχο προέλευσης και προορισμού στο instance, ο οποίος ρίχνει αθόρυβα πακέτα των οποίων η προέλευση δεν είναι η δική του διεύθυνση του instance, μέχρι να απενεργοποιηθεί αυτός ο έλεγχος.
Το DNS αποτυγχάνει διαφορετικά από τη δρομολόγηση
Ένα πακέτο προς γνωστή διεύθυνση και μια αναζήτηση ονόματος είναι δύο ξεχωριστές αποτυχίες, και τα μηνύματα σφάλματος παραπλανούν σε αντίθετες κατευθύνσεις. Αν το ping 1.1.1.1 λειτουργεί και ο περιηγητής δεν φορτώνει τίποτα, η διαδρομή είναι εντάξει και η επίλυση ονομάτων δεν είναι. Αν αποτύχει το ίδιο το ping, το DNS είναι άσχετο και έχετε επιστρέψει στην προηγούμενη ενότητα.
Το wg-quick μπορεί να ορίσει resolver από τη γραμμή DNS = στη διαμόρφωση, και το systemd-resolved έχει τη δική του συμπεριφορά ανά σύνδεσμο. Ένα VPN που αντικαθιστά τον resolver με διεύθυνση προσβάσιμη μόνο μέσα στο τούνελ θα αποτυγχάνει σε κάθε αναζήτηση τη στιγμή που πέφτει το τούνελ, κάτι που μοιάζει με τούνελ που χαλάει το internet.
| Symptom | Layer to inspect |
|---|---|
| Tunnel address pings, nothing else does | Client route, then gateway forwarding |
| Public IP pings, hostnames fail | Resolver selection and reachability |
| Handshake completes, no reply ever | FORWARD policy or missing NAT on the server |
| Small requests work, large transfers stall | MTU and TCP MSS clamping |
Μια σειρά που παράγει αποδείξεις
Εκτελέστε πρώτα τον έλεγχο στην πλευρά του πελάτη, γιατί είναι μία εντολή και εξαλείφει τις μισές πιθανότητες. Μετά επιβεβαιώστε αν ο διακομιστής προορίζεται καθόλου ως έξοδος στο internet· μια πύλη φτιαγμένη για ιδιωτική πρόσβαση δεν είναι χαλασμένη όταν οι δημόσιοι προορισμοί αποτυγχάνουν.
Στον διακομιστή, παρακολουθήστε τη διεπαφή όσο στέλνετε ping από τον πελάτη: το tcpdump -ni wg0 icmp πρέπει να δείξει το αίτημα, και το tcpdump -ni eth0 icmp πρέπει να δείξει ότι φεύγει, μεταφρασμένο ή όχι. Αν εμφανιστεί στο πρώτο και ποτέ στο δεύτερο, η διακοπή είναι τοπική στον διακομιστή. Αν φύγει και δεν επιστρέψει απάντηση, το πρόβλημα είναι πιο πάνω, και αυτή είναι άλλη συζήτηση.
Τέλος, κάντε τη διόρθωση να επιβιώσει από επανεκκίνηση. Η προώθηση ανήκει σε αρχείο sysctl, οι κανόνες του τείχους προστασίας ανήκουν στην υπηρεσία που τους φορτώνει, και οι διαδρομές του πελάτη ανήκουν στη διαμόρφωση που ανεβάζει τη διεπαφή και όχι σε ένα κέλυφος που θα ξεχάσετε. Επανασυνδεθείτε, επαναλάβετε τα ίδια δύο τεστ και επιβεβαιώστε ότι οι μετρητές κινούνται.