Το WireGuard κολλάει: όριο MTU ή κανόνας προώθησης που λείπει;
Ό,τι βρίσκεται πέρα από τον διακομιστή είναι πρόβλημα προώθησης ή διαδρομής επιστροφής. Τα μικρά αιτήματα που δουλεύουν ενώ τα μεγάλα κολλάνε είναι το αποτύπωμα του μεγέθους πακέτου.
Η συνήθεια είναι να μειώνεται το MTU μόλις το WireGuard αρχίσει να συμπεριφέρεται άσχημα, και αυτή η συνήθεια κρύβει ένα άλλο σφάλμα. Μια πύλη που δεν προωθεί και μια διαδρομή που δεν μεταφέρει μεγάλα πακέτα παράγουν διακριτά μοτίβα: το ένα αποτυγχάνει και στις δύο κατευθύνσεις και σε κάθε μέγεθος, το άλλο επιβιώνει στα μικρά αιτήματα και πεθαίνει στα μεγάλα. Προσδιορίστε ποια μορφή έχετε πριν αλλάξετε οποιονδήποτε αριθμό. Η δοκιμή είναι φθηνή και αφαιρεί τις μισές πιθανές αιτίες.
Δύο βλάβες, δύο διαφορετικές μορφές
Ένα πρόβλημα προώθησης εμφανίζεται αμέσως μετά τον διακομιστή. Η χειραψία πετυχαίνει, η διεύθυνση της σήραγγας απαντά, και τίποτα πίσω από την πύλη δεν είναι προσβάσιμο ούτε με ελάχιστο αίτημα. Το πακέτο έφτασε στον διακομιστή και δεν προωθήθηκε, ή η απάντηση δεν είχε διαδρομή επιστροφής.
Ένα πρόβλημα μεγέθους εμφανίζεται μόνο πάνω από ένα κατώφλι. Το DNS, μια χειραψία TCP και μια μικρή κλήση API δουλεύουν, ενώ η λήψη αρχείου ή μια μεγάλη απάντηση κολλάει. Τα πακέτα που χωρούσαν ταξίδεψαν από άκρη σε άκρη, και εκείνα που δεν χωρούσαν απορρίφθηκαν κάπου χωρίς χρήσιμη αναφορά.
Αυτές οι περιγραφές δείχνουν σε διαφορετικούς ανθρώπους και διαφορετικά αρχεία ρυθμίσεων, γι’ αυτό το να μετρήσετε τη μορφή αξίζει περισσότερο από μια εικασία. Ένα μόνο ping προς την πύλη δεν μπορεί να τις ξεχωρίσει.
Αποκλείστε την προώθηση πριν μικρύνετε οτιδήποτε
Δοκιμάστε έναν προορισμό πέρα από την πύλη, όχι την ίδια την πύλη. Ένα ping στη διεύθυνση της σήραγγας του διακομιστή αποδεικνύει μόνο ότι η διεπαφή είναι ενεργή και ότι φτάνετε στο μηχάνημα που τερματίζει τη σήραγγα. Η κίνηση για το ευρύτερο δίκτυο εξαρτάται από το αν η προώθηση IP είναι ενεργοποιημένη σε εκείνο το μηχάνημα και από ένα τείχος προστασίας που επιτρέπει τη ροή που προωθείται. Και τα δύο πρέπει να ισχύουν, και αν ένα είναι ψευδές, προκύπτει η ίδια σιωπή.
Η δρομολόγηση επιστροφής έχει την ίδια σημασία. Αν το δίκτυο προορισμού δεν ξέρει πώς να φτάσει στη διεύθυνση σήραγγας του πελάτη, το αίτημα φτάνει και η απάντηση εξαφανίζεται, και ο πελάτης αναφέρει λήξη χρόνου που μοιάζει ίδια με προώθηση που απορρίφθηκε.
Όπου ο σχεδιασμός χρησιμοποιεί μετάφραση διευθύνσεων, ο κανόνας μετάφρασης είναι μέρος αυτής της διαδρομής επιστροφής. Η αφαίρεσή του ενώ κυνηγάτε πρόβλημα MTU μετατρέπει έναν σχεδιασμό που δουλεύει σε σπασμένο, γι’ αυτό διαβάστε τους υπάρχοντες κανόνες πριν τους αλλάξετε.
Μετρήστε πού αρχίζει η διακοπή
Διαβάστε πρώτα την κατάσταση προώθησης και τους κανόνες φιλτραρίσματος. Είναι έλεγχοι μόνο για ανάγνωση και απαντούν στο φθηνό ερώτημα:
sysctl net.ipv4.ip_forward
sudo iptables -S FORWARD
ip route get 10.30.0.9
Έπειτα δοκιμάστε μεγέθη με το bit don’t-fragment, από τον πελάτη, προς έναν υπολογιστή πέρα από την πύλη:
ping -M do -s 1200 10.30.0.9
ping -M do -s 1400 10.30.0.9
Αν η πρώτη δοκιμή δουλεύει και η δεύτερη αποτυγχάνει με σφάλμα κατακερματισμού, η διαδρομή σας λέει το χρησιμοποιήσιμο μέγεθός της. Αν δεν δουλεύει καμία, κοιτάτε προώθηση ή δρομολόγηση, και το MTU δεν είναι η μεταβλητή που πρέπει να αλλάξει.
| Observation | Points toward | Where to look |
|---|---|---|
| Nothing beyond the gateway works | Forwarding or return route | Forwarding flag, filter rules, routing table |
| Small works, large stalls | Packet size on the path | Tunnel MTU and the link underneath |
| Only names fail | DNS resolution | The resolver configured for the tunnel |
| Works sometimes | Multiple paths or state expiry | Flow selection and NAT state |
Διορθώστε το επίπεδο που αποδείξατε
Όταν η προώθηση είναι η βλάβη, η διόρθωση είναι ένας κανόνας προώθησης ή μια διαδρομή, διατυπωμένος όσο στενά επιτρέπει ο σχεδιασμός. Όταν το μέγεθος είναι η βλάβη, η διόρθωση είναι ένα MTU που λαμβάνει υπόψη την ενθυλάκωση σε αυτή τη συγκεκριμένη διαδρομή, εφαρμοσμένο στη διεπαφή που το χρειάζεται και όχι σε κάθε προσαρμογέα του στόλου.
Όπως και να έχει, επαναλάβετε μετά την ίδια εργασία προς τον ίδιο προορισμό. Αν η αρχική μεγάλη μεταφορά ολοκληρώνεται τώρα, η αλλαγή αντιμετώπισε το επίπεδο που αποτύγχανε. Αν βελτιώθηκε μόνο η μικρή δοκιμή, θεραπεύσατε ένα σύμπτωμα και το πραγματικό όριο είναι ακόμα στη θέση του.
Γράψτε ποια μορφή παρατηρήσατε πριν την αλλαγή. Αυτή η μία γραμμή, καταγεγραμμένη δίπλα στη διόρθωση, είναι αυτό που εμποδίζει τον επόμενο να μειώσει ένα MTU που ποτέ δεν ήταν το πρόβλημα.