Κάντε την προώθηση IPv4 να επιμείνει μετά από επανεκκίνηση της πύλης VPN
Ορίστε το ip_forward στον χώρο ονομάτων που μεταφέρει τα πακέτα των πελατών, δώστε στη ρύθμιση έναν ιδιοκτήτη και αποδείξτε ότι επιβιώνει από επανεκκίνηση αντί να επεξεργάζεστε απλώς ένα αρχείο.
Το ping στην πύλη λειτουργεί και η πρόσβαση σε οτιδήποτε πίσω της όχι, και αυτό είναι η μορφή προβλήματος προώθησης και όχι προβλήματος σήραγγας. Η τοπική παράδοση στην πύλη αποδεικνύει ότι η σήραγγα σηκώθηκε και ότι η ανάθεση διεύθυνσης δούλεψε· δεν λέει τίποτα για το αν ο πυρήνας θα περάσει ένα πακέτο από μια διεπαφή σε μια άλλη. Πριν αγγίξετε οποιοδήποτε sysctl, επιβεβαιώστε ότι το μηχάνημα προορίζεται να δρομολογεί αυτή την κίνηση και εντοπίστε το δικτυακό περιβάλλον που κρατά τη διεπαφή προς τον πελάτη. Στη συνέχεια διαβάστε την τιμή εκεί, όχι όπου έτυχε να κοιτάξει ο τελευταίος οδηγός που διαβάσατε.
Το να φτάνετε στην πύλη δεν είναι το ίδιο με την προώθηση
Δύο ξεχωριστές αποφάσεις λαμβάνονται μέσα στον πυρήνα. Η παράδοση σε μια τοπική διεύθυνση τερματίζει το ταξίδι του πακέτου· η προώθηση το στέλνει ξανά έξω από άλλη διεπαφή, και αυτή η δεύτερη απόφαση ρυθμίζεται ανά χώρο ονομάτων δικτύου. Μια πύλη μπορεί να είναι απόλυτα προσβάσιμη ενώ η προώθηση είναι κλειστή, και από μια γραμμή ping οι δύο αστοχίες φαίνονται ίδιες.
Σημειώστε σε ποια διεπαφή φτάνει το πακέτο του πελάτη και από ποια διεπαφή βγαίνει η επόμενη διαδρομή. Και οι δύο ανήκουν σε έναν χώρο ονομάτων, και αυτός ο χώρος ονομάτων κρατά τη ρύθμιση που μετράει.
Διαβάστε την τιμή εκεί όπου βρίσκονται πραγματικά τα πακέτα
Σε μια πύλη που δρομολογεί στον χώρο ονομάτων του κεντρικού υπολογιστή, μία εντολή απαντά στο ερώτημα: sysctl net.ipv4.ip_forward. Όταν η εισερχόμενη και η επόμενη διαδρομή ζουν σε έναν ονομασμένο χώρο ονομάτων, ρωτήστε εκείνον: ip netns exec vpn-gw sysctl net.ipv4.ip_forward. Η τιμή του κεντρικού υπολογιστή δεν υποκαθιστά την τιμή του χώρου ονομάτων, και ένα ένα στον κεντρικό υπολογιστή δεν αποδεικνύει τίποτα.
Δεν έχει κάθε περιβάλλον δρομολόγησης μια ετικέτα που μπορείτε να περάσετε στο ip netns. Τα περιβάλλοντα εκτέλεσης κοντέινερ και οι υπηρεσίες δημιουργούν χώρους ονομάτων που δεν καταχωρούνται ποτέ με φιλικό όνομα, και για εκείνους χρησιμοποιείτε τα εργαλεία επιθεώρησης του περιβάλλοντος εκτέλεσης. Αντικαταστήστε το vpn-gw με το πραγματικό όνομα ή με τον μηχανισμό του περιβάλλοντος που φτάνει το ίδιο πλαίσιο, και σταματήστε να μαντεύετε σε επίπεδο κεντρικού υπολογιστή.
Δώστε στη ρύθμιση έναν μόνο ιδιοκτήτη
Σε μια συμβατική πύλη κεντρικού υπολογιστή με systemd, η ανθεκτική μορφή είναι ένα αρχείο drop-in με όνομα που επιλέγει ο διαχειριστής, όπως /etc/sysctl.d/60-vpn-forwarding.conf, που περιέχει net.ipv4.ip_forward = 1. Γράψτε το αρχείο και μετά φορτώστε αυτό ακριβώς το αρχείο ώστε να αλλάξει και η ζωντανή κατάσταση: sudo sysctl -p /etc/sysctl.d/60-vpn-forwarding.conf, ακολουθούμενο από ανάγνωση επαλήθευσης. Το όνομα αρχείου είναι παράδειγμα και όχι δεσμευμένη διαδρομή VPN, και ο αρχικός αριθμός μετράει επειδή τα αρχεία που ταξινομούνται αργότερα κερδίζουν.
Η προτεραιότητα είναι το σημείο όπου η μονιμότητα σπάει σιωπηλά. Ελέγξτε και τον φορτωτή της διανομής και το δικό σας drop-in, γιατί το procps sysctl --system διαβάζει επίσης το /etc/sysctl.conf στο τέλος, ενώ η σειρά sysctl.d του systemd είναι μια εντελώς διαφορετική ακολουθία. Μια μεταγενέστερη ανάθεση μπορεί να επαναφέρει το ίδιο κλειδί αμέσως, αφήνοντας το αρχείο σας σωστό και την πραγματική τιμή λάθος. Μην αντικαθιστάτε ένα υπάρχον αρχείο διαχειριστή για να κερδίσετε αυτή τη διαμάχη· βρείτε τον ιδιοκτήτη και αλλάξτε το εκεί.
Ένας χώρος ονομάτων που δημιουργήθηκε μετά την εκκίνηση δεν διέπεται καθόλου από drop-in του κεντρικού υπολογιστή. Η ρύθμισή του ανήκει σε ό,τι τον δημιουργεί, είτε είναι το περιβάλλον εκτέλεσης κοντέινερ είτε η μονάδα παροχής του χώρου ονομάτων. Το να δώσετε σε ένα κοντέινερ ευρεία δικαιώματα κεντρικού υπολογιστή για να αποφύγετε το ερώτημα είναι χειρότερη συναλλαγή από το να περάσετε δέκα λεπτά εντοπίζοντας τον σωστό ιδιοκτήτη.
Μάθετε τι κοστίζει ο διακόπτης πριν τον γυρίσετε
Το ip_forward δεν είναι ακίνδυνο boolean. Η τεκμηρίωση του πυρήνα σημειώνει ότι η αλλαγή του επαναφέρει αρκετές άλλες παραμέτρους IPv4 στις προεπιλογές κεντρικού υπολογιστή ή δρομολογητή, οπότε μια διαγνωστική αλλαγή μπορεί να πετάξει ρυθμίσεις που έγιναν αλλού και να μην το αναφέρει ποτέ. Αντιμετωπίστε το ως αλλαγή διαμόρφωσης με παρενέργειες και όχι ως δοκιμή που τρέχει στα πεταχτά.
Αυτό αποκλείει επίσης το να το σβήνετε και να το ανάβετε κάθε φορά που ένας πελάτης δεν φτάνει έναν κεντρικό υπολογιστή. Αν η τιμή είναι ήδη ένα, η βλάβη είναι αλλού στη διαδρομή, και το να ξαναγράψετε το ίδιο κλειδί τρίτη φορά δεν θα το μετακινήσει.
Αποδείξτε τη μονιμότητα και μετά δοκιμάστε το υπόλοιπο της διαδρομής
Διαβάστε την τιμή πίσω σε τέσσερις στιγμές: αμέσως μετά την αλλαγή, αφού εμφανιστεί η διεπαφή VPN, μετά από επανασύνδεση και μετά από προγραμματισμένη επανεκκίνηση. Μια τιμή που επιστρέφει σε οποιοδήποτε από αυτά τα σημεία έχει δεύτερο ιδιοκτήτη, και άλλη μια εφάπαξ εγγραφή απλώς το κρύβει μέχρι την επόμενη επανεκκίνηση.
Η ενεργοποιημένη προώθηση αφήνει ακόμη τρία πράγματα να επαληθεύσετε. Ο πελάτης χρειάζεται διαδρομή προς τον προορισμό, η πύλη χρειάζεται επόμενη διαδρομή συν άδεια να τη χρησιμοποιεί, και ο προορισμός χρειάζεται διαδρομή επιστροφής προς τη διεύθυνση σήραγγας του πελάτη. Ένα ιδιωτικό δρομολογημένο LAN δεν χρειάζεται NAT αυτόματα, οπότε μην προσθέτετε masquerading πριν μάθετε ποιο από τα τρία λείπει, και δοκιμάστε από τον προβλεπόμενο πελάτη και όχι από την ίδια την πύλη, γιατί ένα αίτημα που ξεκίνησε στην πύλη δεν αγγίζει ποτέ τη διαδρομή προώθησης που μόλις ενεργοποιήσατε. Το IPv6 φέρει τη δική του πολιτική προώθησης και δρομολόγησης, οπότε μια λειτουργική δοκιμή IPv4 δεν λέει τίποτα γι' αυτό.
Κρατήστε τη διαδρομή του drop-in, τον ιδιοκτήτη του χώρου ονομάτων και την εντολή ανάγνωσης μαζί στο runbook. Όποιος το αναλάβει μετά πρέπει να μπορεί να διαβάσει την τιμή, να δει ποιος την κατέχει και να αποφασίσει μέσα σε ένα λεπτό αν το πρόβλημα είναι η μονιμότητα ή το υπόλοιπο της διαδρομής.