Δύο VPN σε ένα μηχάνημα Linux: δοκιμάστε το καθένα χωρίς να αναμειγνύετε αποτελέσματα
Δύο πράσινα εικονίδια δεν είναι σύγκριση. Βάλτε κάθε τούνελ στον δικό του χώρο ονομάτων, γράψτε πρώτα την προσδοκία και αποδείξτε τη διαδρομή πριν εμπιστευτείτε το αποτέλεσμα.
Δύο πράσινα εικονίδια σύνδεσης μοιάζουν με σύγκριση και συνήθως είναι σύμπτωση. Αν το αίτημα δοκιμής μπορούσε να χρησιμοποιήσει οποιοδήποτε από τα δύο τούνελ, το αποτέλεσμα περιγράφει στην καλύτερη περίπτωση το ένα από αυτά και στη χειρότερη κανένα. Δώστε σε κάθε παρατήρηση ένα δικτυακό πλαίσιο, έναν προορισμό και μια προσδοκία γραμμένη πριν τρέξει η δοκιμή. Σε ένα μηχάνημα Linux που διαχειρίζεστε μόνοι σας, οι ονομασμένοι δικτυακοί χώροι ονομάτων είναι ο φθηνότερος τρόπος να αγοράσετε αυτόν τον διαχωρισμό.
Δύο πράσινα φώτα δεν είναι σύγκριση
Ένας χώρος ονομάτων διαχωρίζει πίνακες δρομολόγησης, διασυνδέσεις και την κατάσταση της στοίβας δικτύου, ώστε ένα αίτημα που ξεκίνησε μέσα σε έναν δεν μπορεί να δανειστεί σιωπηλά το τούνελ ενός άλλου. Αυτό που δεν διαχωρίζει είναι ένας επεξεργαστής, ένα φυσικό κανάλι ανόδου ή ο δαίμονας επίλυσης ονομάτων που τρέχει στον κεντρικό υπολογιστή. Σε αυτό ακριβώς το τελευταίο κενό αποτυγχάνουν οι περισσότερες τέτοιες δοκιμές χωρίς να το προσέξει κανείς. Μια αναζήτηση που φεύγει από τον χώρο ονομάτων και ρωτά τον επιλυτή του κεντρικού υπολογιστή επιστρέφει απάντηση χωρίς καμία σχέση με το τούνελ υπό δοκιμή.
Αυτή η διαδικασία προϋποθέτει δύο ήδη προετοιμασμένους και εγκεκριμένους χώρους ονομάτων δοκιμής με λειτουργική εξωτερική συνδεσιμότητα και υποστηριζόμενους πελάτες. Δεν δημιουργεί τίποτα, δεν καταχωρεί τίποτα και δεν αντικαθιστά καμία διαμόρφωση. Οι ξεχωριστές εικονικές μηχανές παραμένουν η έντιμη επιλογή όταν ένας πελάτης χρειάζεται πλήρη συνεδρία επιφάνειας εργασίας ή αρνείται να τρέξει έξω από μία.
Καθορίστε την προσδοκία πριν από την πρώτη εκτέλεση
Αποφασίστε για κάθε πλαίσιο πώς μοιάζει η επιτυχία: ο επιλυτής, το όνομα της υπηρεσίας, η αναμενόμενη διεύθυνση και η συμπεριφορά που απαιτείται όταν πέσει το τούνελ. Κρατήστε αυτές τις σχεδιασμένες τιμές στη δική τους στήλη, γιατί ένα αρχείο που αναμειγνύει σχέδιο και παρατήρηση είναι μυθοπλασία με χρονική σφραγίδα. Η λίστα ελέγχου παρακάτω είναι η μορφή που χρειάζεται το αρχείο, και κάθε γραμμή πρέπει να μπορεί να συμπληρωθεί πριν από την πρώτη σύνδεση.
| Tunnel | Owner | Client interface inside the namespace | Proof command | Required on disconnect |
|---|---|---|---|---|
| vpn-a | the identity that owns profile A, recorded by name | its own tun device, never the host's | ip -n vpn-a -4 route get 10.55.10.20 | traffic stops; no host-side fallback |
| vpn-b | a separate owner, even when both run on one box | its own tun device in its own namespace | ip -n vpn-b -4 route get 10.55.20.20 | verified separately, never inferred from A |
Η καλωδίωση του επιλυτή χρειάζεται τη δική της γραμμή σε αυτό το αρχείο, γιατί είναι το πεδίο που πιθανότατα λέει ψέματα. Τα αρχεία που είναι δεσμευμένα στον χώρο ονομάτων, όπως /etc/netns/vpn-a/resolv.conf εμφανίζονται στις συνηθισμένες διαδρομές τους όταν μια εντολή τρέχει μέσα στον χώρο ονομάτων, όπως περιγράφει η αναφορά του iproute2 για τους χώρους ονομάτων, αλλά η διαμόρφωση εναλλαγής της υπηρεσίας ονομάτων και οποιοσδήποτε τοπικός επιλυτής που αυτή ξεκινά μπορούν ακόμη να τραβήξουν μια αναζήτηση πίσω στον κεντρικό υπολογιστή.
Ένα τούνελ κάθε φορά, το άλλο αποσυνδεδεμένο
Συνδέστε το A μέσω του υπάρχοντος ιδιοκτήτη του ενώ το B παραμένει κάτω, και μετά εξετάστε την πολιτική, τις διαδρομές και την επιλεγμένη διαδρομή από το πλαίσιο διαχείρισης. Τρεις από τις εντολές παρακάτω διαβάζουν κατάσταση· μόνο η τελευταία επικοινωνεί με υπηρεσία ονομάτων, και καμία από αυτές δεν στέλνει αίτημα εφαρμογής.
sudo ip -n vpn-a -4 rule show
sudo ip -n vpn-a -4 route show table all
sudo ip -n vpn-a -4 route get 10.55.10.20
sudo ip netns exec vpn-a getent ahostsv4 svc-a.lab.internalΜια αναζήτηση διαδρομής απαντά σε μια υποθετική ερώτηση για έναν προορισμό, οπότε δεν μπορεί να δείξει ότι η υπηρεσία δέχεται κίνηση. Κρατήστε αυτά τα δύο είδη αποδεικτικών σε ξεχωριστές στήλες, γιατί μια υγιής διαδρομή δίπλα σε μια απορριφθείσα σύνδεση είναι πραγματικό και συνηθισμένο αποτέλεσμα. Στη συνέχεια στείλτε ένα αβλαβές εξουσιοδοτημένο αίτημα με την πραγματική εφαρμογή, ξεκινώντας στο πλαίσιο του A ως ο κανονικός του χρήστης χωρίς προνόμια, με την επικύρωση πιστοποιητικών και τον έλεγχο ταυτότητας εφαρμογής άθικτα, και καταγράψτε το αποτέλεσμα μαζί με τη διεύθυνση προέλευσης που παρατήρησε η υπηρεσία. Αποσυνδέστε το A μέσω του ιδιοκτήτη του και επαναλάβετε ολόκληρη τη βασική γραμμή για το B, σημειώνοντας κάθε αλλαγή διαμόρφωσης που κάνετε, αλλιώς οι δύο βασικές γραμμές παύουν να είναι συγκρίσιμες.
Και τα δύο πάνω, μετά ένα κάτω κάθε φορά
Η σταθερή κατάσταση είναι το εύκολο μέρος. Με τα δύο τούνελ συνδεδεμένα, επαναλάβετε την αναζήτηση και το αίτημα εφαρμογής κάθε πλαισίου, μετά σπάστε το ένα τούνελ και ελέγξτε το άλλο. Επανασυνδεθείτε με την αντίστροφη σειρά όταν η ίδια η σειρά σύνδεσης είναι το ερώτημα.
sudo ip netns exec vpn-a tcpdump -ni any port 443 -c 5
sudo ip netns exec vpn-b getent ahostsv4 svc-b.lab.internal
sudo ip -n vpn-b -4 route get 10.55.20.20Η καταγραφή λύνει διαφωνίες που ένα αποτέλεσμα εφαρμογής δεν μπορεί: δείχνει αν το αίτημα έφυγε από τη διασύνδεση που περιμένατε ή από κάτι εντελώς άλλο. Για κάθε μετάβαση καταγράψτε την ενέργεια του ιδιοκτήτη, τη χρονική σφραγίδα, το αποτέλεσμα διαδρομής, το αποτέλεσμα ονόματος και την έκβαση της εφαρμογής. Έπειτα ελέγξτε την απαίτηση ασφαλούς κλεισίματος μέσα στον επηρεαζόμενο χώρο ονομάτων, γιατί η απομόνωση δεν είναι διακόπτης. Ένας χώρος ονομάτων κρατά δύο τούνελ χωριστά· δεν εμποδίζει κανένα από τα δύο να μεταφέρει κίνηση όταν το προφίλ του λέει ότι η κίνηση πρέπει να σταματήσει.
Τι μπορεί και τι δεν μπορεί να ισχυριστεί αυτό το αρχείο
Μια επιτυχία αποδεικνύει αυτές τις παρατηρήσεις για αυτή τη διάταξη, σε αυτόν τον κεντρικό υπολογιστή, εκείνη τη στιγμή. Δεν λέει τίποτα για δύο πελάτες που μοιράζονται έναν πίνακα δρομολόγησης επιφάνειας εργασίας, ούτε για τη ρυθμαπόδοση όσο και τα δύο τούνελ μεταφέρουν φορτίο. Αυτά είναι ξεχωριστά ερωτήματα με ξεχωριστές δοκιμές, και μια σύγκριση είναι τόσο καλή όσο το πλαίσιο που επισυνάπτεται σε κάθε γραμμή.
Κρατήστε τις αποτυχίες στο αρχείο δίπλα στις επιτυχίες, με σήμανση ποιο τούνελ ήταν πάνω εκείνη τη στιγμή. Μια καθαρή σελίδα που κρύβει την κατάσταση τη στιγμή της μέτρησης είναι χειρότερη από μια άσχημη που τη δείχνει. Αυτό που κάνει το αρχείο επαναχρησιμοποιήσιμο αργότερα είναι το πλαίσιο, όχι η βαθμολογία.
Δύο τούνελ σε ένα μηχάνημα μπορούν να συγκριθούν έντιμα, αλλά μόνο μέσα σε τόσα πλαίσια όσα ελέγξατε πραγματικά. Οτιδήποτε πέρα από αυτό είναι μια ευχή με ένα πράσινο εικονίδιο δίπλα της.