Δοκιμάστε τη δρομολόγηση VPN σε χώρους ονομάτων χωρίς να αγγίξετε τις διαδρομές του κεντρικού υπολογιστή
Τρεις προσομοιωμένοι ρόλοι, τρία απομονωμένα περιβάλλοντα και ένα veth ανά σύνδεσμο. Συγκρίνετε ένα εργαστήριο χώρων ονομάτων με ένα εργαστήριο διαδρομών κεντρικού υπολογιστή πριν αγγίξετε τον κεντρικό υπολογιστή.
Δύο εργαστήρια μπορούν να μοντελοποιήσουν την ίδια τοπολογία VPN και να αποτύχουν με εντελώς διαφορετικούς τρόπους: το ένα ζει σε χώρους ονομάτων δικτύου, το άλλο στις δικές του διαδρομές του κεντρικού υπολογιστή. Η έκδοση με χώρους ονομάτων κρατά κάθε διεπαφή, διαδρομή και υποδοχή σε ένα περιβάλλον που μπορείτε να διαγράψετε, ενώ η έκδοση με τον κεντρικό υπολογιστή ξεκινά γρηγορότερα και αφήνει κατάσταση πίσω της. Αυτή η υπολειπόμενη κατάσταση είναι ο λόγος που το δεύτερο εργαστήριο είναι δύσκολο να επαναληφθεί ένα μήνα αργότερα. Συγκρίνετε πρώτα τον καθαρισμό, γιατί αυτός αποφασίζει αν μπορείτε να εκτελέσετε το πείραμα δύο φορές.
Δύο τρόποι να χτίσετε το ίδιο εργαστήριο, και πότε κερδίζει ο καθένας
Σε ένα εργαστήριο διαδρομών κεντρικού υπολογιστή προσθέτετε μια διεπαφή σήραγγας και διαδρομές στο μηχάνημα όπου εργάζεστε, ώστε το πείραμα να μοιράζεται τη μοίρα με το κέλυφός σας, τον διαχειριστή πακέτων σας και κάθε άλλη σύνδεση. Σε ένα εργαστήριο χώρων ονομάτων κάθε ρόλος παίρνει τη δική του στοίβα διεπαφών, διευθύνσεων, διαδρομών και υποδοχών, και η διαγραφή του χώρου ονομάτων τα αφαιρεί όλα. Κανένα μοντέλο δεν είναι πιο σωστό, γιατί απαντούν σε διαφορετικές ερωτήσεις. Επιλέξτε χώρους ονομάτων όταν το θέμα είναι η δρομολόγηση και η προώθηση, και εργαστήριο κεντρικού υπολογιστή όταν το θέμα είναι πώς ενσωματώνεται ένας πελάτης επιφάνειας εργασίας.
| Aspect | Namespace lab | Host-route lab |
|---|---|---|
| Isolation | Full stack per role | Shares the host stack |
| Cleanup | Delete named namespaces | Manual route and rule removal |
| Realism | Strong for routing | Needed for GUI clients |
Το να ανακατεύετε τα δύο είναι το συνηθισμένο λάθος: ένα εργαστήριο χώρων ονομάτων που δοκιμάζεται απέναντι σε πελάτη μόνο του κεντρικού υπολογιστή δεν αποδεικνύει τίποτα για καμία από τις δύο διατάξεις. Αποφασίστε ποια ερώτηση κάνετε πριν δημιουργήσετε τον πρώτο σύνδεσμο.
Ένα περιβάλλον ανά ρόλο, συνδεδεμένο επίτηδες
Δημιουργήστε έναν χώρο ονομάτων ανά ρόλο και μεταφέρετε κάθε άκρο κάθε ζεύγους veth στο περιβάλλον που το κατέχει. Οι πρώτες τέσσερις εντολές αρκούν για να δείτε το σχήμα:
ip netns add client
ip netns add gateway
ip link add veth-c type veth peer name veth-g
ip link set veth-c netns clientΔώστε στο εργαστήριο περιοχές που δεν επικαλύπτουν τίποτα στον κεντρικό υπολογιστή, και σημειώστε πριν ξεκινήσετε ποιος χώρος ονομάτων κατέχει ποια διεύθυνση. Ένα εργαστήριο που λειτουργεί χρειάζεται δύο χωριστές διαδρομές: μία εξωτερική ώστε το τελικό σημείο VPN να φτάνει στον ομόλογό του, και μια διαδρομή επιστροφής για τον πόρο που προστατεύεται. Μοντελοποιήστε τις ως δύο αποφάσεις, γιατί ένα εργαστήριο που χτίζει μόνο το εξερχόμενο μισό περνά μια δοκιμή χειραψίας και αποτυγχάνει σε μια δοκιμή εφαρμογής.
Ο ρόλος προώθησης είναι εκεί όπου τα εργαστήρια γίνονται ενδιαφέροντα
Ένας ρόλος πρέπει να προωθεί, που σημαίνει να ενεργοποιήσετε την προώθηση μέσα σε αυτόν τον χώρο ονομάτων και να προσθέσετε τον κανόνα που χρειάζεται ο σχεδιασμός. Η κατάσταση προώθησης είναι ανά χώρο ονομάτων, οπότε η ρύθμιση του κεντρικού υπολογιστή είναι άσχετη με το εργαστήριο και η ρύθμιση του εργαστηρίου δεν διαρρέει προς τα έξω, όπως περιγράφει η τεκμηρίωση για τους χώρους ονομάτων δικτύου. Το WireGuard τεκμηριώνει ότι μια διεπαφή και η εξωτερική της υποδοχή μπορούν να ζουν σε διαφορετικούς χώρους ονομάτων, που είναι ένα χρήσιμο τέχνασμα και ένας εξαιρετικός τρόπος να μπερδέψετε τον εαυτό σας. Μην υποθέσετε ότι η μετακίνηση μιας διεπαφής μετακινεί κάθε μέρος της σύνδεσης με τον ίδιο τρόπο.
Ελέγξτε τον μετρητή προώθησης μετά από ένα πακέτο δοκιμής, γιατί ένας κανόνας που δεν ταίριαξε ποτέ και ένας κανόνας που απέριψε φαίνονται ίδιοι στον πίνακα δρομολόγησης. Μόνο οι μετρητές τους ξεχωρίζουν.
Καταγράψτε μια βάση, και μετά σπάστε μία διαδρομή
Ξεκινήστε καταγράφοντας τι υπάρχει, με το περιβάλλον γραμμένο δίπλα σε κάθε γραμμή. Διαβάστε τους χώρους ονομάτων, μετά τη διαδρομή που θα ακολουθούσε ένας προορισμός δοκιμής μέσα σε έναν από αυτούς, μετά τους μετρητές στον σύνδεσμο που τη μεταφέρει:
ip netns list
ip -n client route get 10.0.0.5
ip -n gateway -s link show veth-gΗ τρίτη εντολή είναι αυτή που οι άνθρωποι παραλείπουν, και εκεί ζουν τα στοιχεία: οι μετρητές απορρίψεων και σφαλμάτων σας λένε αν ένα πακέτο έφτασε καθόλου στον ρόλο προώθησης. Καταγράψτε τις ίδιες τρεις όψεις μετά από μια αλλαγή, και αφήστε το diff να είναι το στοιχείο και όχι η μνήμη σας γι’ αυτό. Μετά σπάστε ακριβώς ένα πράγμα, είτε διαγράφοντας μια διαδρομή είτε προσθέτοντας έναν κανόνα άρνησης στη διαδρομή προώθησης, και επιβεβαιώστε το σύμπτωμα που προβλέψατε: μια ολοκληρωμένη χειραψία χωρίς απάντηση, ή μια αποτυχία επίλυσης αντί για λήξη χρόνου. Ένα εργαστήριο που δείχνει μόνο επιτυχία διδάσκει ελάχιστα.
Ο καθαρισμός είναι αυτό που κάνει την επόμενη εκτέλεση επαναλήψιμη
Κρατήστε τον καθαρισμό περιορισμένο στους πόρους που ονομάσατε, γιατί ένα καθολικό reset του τείχους προστασίας ή η αφαίρεση μιας διαδρομής κεντρικού υπολογιστή δεν είναι αναπαραγωγιμότητα, είναι δεύτερο περιστατικό. Αποθηκεύστε την τοπολογία, τις ακριβείς εντολές και τις παρατηρήσεις που περιμένατε, ώστε η επόμενη εκτέλεση να αναπαράγει την ίδια αποτυχία αντί να μαντεύει ποιο περιβάλλον κρατούσε την προηγούμενη κατάσταση. Χωρίς αυτό το αρχείο το εργαστήριο είναι ιστορία, όχι διαδικασία.
Χρησιμοποιήστε διαπιστευτήρια που παράγονται τοπικά για το εργαστήριο, και κρατήστε τους λογαριασμούς παραγωγής έξω από κοινά παραδείγματα. Μετά διαγράψτε κάθε χώρο ονομάτων και επιβεβαιώστε ότι η όψη του κεντρικού υπολογιστή είναι αμετάβλητη, που είναι ολόκληρος ο λόγος για την επιλογή αυτού του μοντέλου. Ένα εργαστήριο που δεν μπορείτε να αφαιρέσετε καθαρά είναι μια αλλαγή στον κεντρικό υπολογιστή με επιπλέον βήματα.