Χώροι ονομάτων δικτύου του Linux για VPN: τι δεν απομονώνουν
Ένας χώρος ονομάτων μετακινεί διεπαφές, διαδρομές και sockets, όχι αρχεία ή λογαριασμούς. Δείτε τι καλύπτει ένα VPN στο δικό του netns και πού διαφεύγει ακόμη η κίνηση.
Ξεκινήστε το VPN μέσα στον δικό του χώρο ονομάτων, εκτελέστε εκεί μία εφαρμογή, και η κίνηση εξακολουθεί να βγαίνει από τη διαδρομή του κεντρικού υπολογιστή. Τίποτα δεν είναι χαλασμένο: ο χώρος ονομάτων διέπει μόνο τις διεργασίες που μπαίνουν σε αυτόν, και η διαρροή ήρθε από μία που δεν μπήκε ποτέ. Διεπαφές, διευθύνσεις, διαδρομές, κανόνες τείχους προστασίας και sockets είναι ό,τι κατέχει ο χώρος ονομάτων. Τα αρχεία, οι λογαριασμοί και οι υπηρεσίες που ήδη εκτελούνται δεν είναι, και από εκεί προέρχονται οι περισσότερες εκπλήξεις.
Τι κατέχει ο χώρος ονομάτων και πού γεννιέται το socket
Μετακινήστε μια διεπαφή σε έναν χώρο ονομάτων και ο κεντρικός υπολογιστής τη χάνει· φτιάξτε μια σήραγγα μέσα και δεν μπορεί να τη δει. Αυτός είναι ο μηχανισμός πίσω από ένα VPN περιορισμένο σε χώρο ονομάτων: η συσκευή και οι διαδρομές προς αυτήν ζουν σε ένα πλαίσιο που μόνο οι επιλεγμένες διεργασίες μπορούν να φτάσουν. Ο κεντρικός υπολογιστής κρατά την προεπιλεγμένη διαδρομή του, οπότε ό,τι βρίσκεται έξω μένει ανέγγιχτο.
Για το WireGuard, το πλαίσιο δημιουργίας μετρά όσο και η τρέχουσα θέση: το socket UDP δεσμεύεται στον χώρο ονομάτων όπου δημιουργήθηκε η διεπαφή, ακόμη και αφού η συσκευή μετακινηθεί αλλού. Ποιος πίνακας δρομολόγησης ακολουθεί τα κρυπτογραφημένα πακέτα εξαρτάται από αυτόν τον τόπο γέννησης. Όταν το socket μένει σε ένα πλαίσιο χωρίς διαδρομή προς τον ομότιμο, η διεπαφή αναζητά και η χειραψία δεν βγαίνει ποτέ. Ελέγξτε τον τόπο γέννησής του και μετά την τρέχουσα θέση του.
Τι δεν απομονώνει ένας χώρος ονομάτων
Τίποτα εδώ δεν χωρίζει συστήματα αρχείων, λογαριασμούς ή μυστικά, και κανένα από αυτά τα όρια δεν εμφανίζεται επειδή δημιουργήσατε έναν χώρο ονομάτων. Η ρύθμιση του resolver είναι ένα αρχείο, οπότε μια διεργασία μέσα μπορεί ακόμη να διαβάσει μια ρύθμιση που δείχνει στον resolver του κεντρικού υπολογιστή και να στείλει το ερώτημά της μέσω της διαδρομής που αυτό συνεπάγεται. Μια εφαρμογή που παραδίδει το αίτημα σε έναν ήδη εκτελούμενο μεσάζοντα ή υπηρεσία συστήματος εμπλέκει μια διεργασία σε εντελώς διαφορετικό πλαίσιο. Και τα δύο είναι αιτήματα που το όριο δεν προοριζόταν ποτέ να απαντήσει.
Η λύση είναι ένα αρχείο ανά χώρο ονομάτων στο /etc/netns/<name>/resolv.conf, ή ένα bind mount ενός έτοιμου αρχείου, στραμμένο σε έναν resolver προσβάσιμο από μέσα. Η επεξεργασία του /etc/resolv.conf στον κεντρικό υπολογιστή δεν αλλάζει τίποτα από όσα βλέπει ο χώρος ονομάτων.
Η τοποθέτηση των διεργασιών είναι ο έλεγχος
Η απομόνωση που παίρνετε είναι ακριβώς η απομόνωση των διεργασιών που ξεκινάτε μέσα. Ένα κέλυφος που ξεκίνησε μέσω του βοηθού exec του χώρου ονομάτων, και ό,τι αυτό γεννήσει, μένει μέσα· μια επιτραπέζια εφαρμογή που εκκινήθηκε από τη συνεδρία του κεντρικού υπολογιστή, όχι. Δημιουργήστε το πλαίσιο, μετακινήστε τη συσκευή και μετά αποδείξτε και τις δύο πλευρές:
ip netns add vpn1
ip link set wg0 netns vpn1
ip netns exec vpn1 wg show
wg show
Διαβάστε το πρώτο wg show από μέσα στον χώρο ονομάτων και το δεύτερο από τον κεντρικό υπολογιστή, και περιμένετε μόνο ένα από τα δύο να εμφανίζει τον ομότιμο. Αν το κάνουν και τα δύο, η συσκευή δεν μετακινήθηκε ποτέ· αν δεν το κάνει κανένα, πήγε κάπου αλλού. Όταν ο εκκινητής είναι διαχειριστής υπηρεσιών, το αρχείο μονάδας είναι αυτό που πρέπει να επεξεργαστείτε, όχι η συντόμευση της επιφάνειας εργασίας. Μια μονάδα χωρίς τη ρύθμιση του χώρου ονομάτων ξεκινά τον δαίμονα στο πλαίσιο του κεντρικού υπολογιστή και ακυρώνει ήσυχα τον σχεδιασμό.
Δοκιμάστε από το πλαίσιο της εφαρμογής
Εκτελέστε τον έλεγχο με το ίδιο εκτελέσιμο και τον ίδιο χρήστη που χρησιμοποιεί η εφαρμογή, μέσα στον χώρο ονομάτων. Συμπεριλάβετε το DNS και τις δύο οικογένειες διευθύνσεων, γιατί μια διαδρομή IPv6 που δεν σκεφτήκατε ποτέ είναι συνήθης διέξοδος. Ένας έλεγχος από το δικό σας κέλυφος αποδεικνύει μόνο ότι το δικό σας κέλυφος είναι απομονωμένο.
Έπειτα εκτελέστε τον ίδιο έλεγχο στον κεντρικό υπολογιστή και επιβεβαιώστε ότι οι απαντήσεις διαφέρουν: διεύθυνση σήραγγας και προβλεπόμενη έξοδος μέσα, διαδρομή κεντρικού υπολογιστή και έξοδος γραφείου έξω, και ο resolver ονομαστικά. Ονομάστε τους χώρους ονομάτων με βάση την ανάπτυξη, όχι το πρωτόκολλο, ώστε ένα σενάριο καθαρισμού να μην μπερδέψει δύο από αυτούς.
Προώθηση, πολιτική αποτυχίας και καθαρισμός
Για μια πύλη, ενεργοποιήστε την προώθηση σκόπιμα και αποφασίστε τι πρέπει να συμβεί όταν πέσει η σήραγγα. Ένας χώρος ονομάτων δεν μπλοκάρει τις διαδρομές που εγκαθιστάτε μέσα του, οπότε μια εφεδρική διαδρομή προς τον κεντρικό υπολογιστή θα χρησιμοποιηθεί αν δημιουργήσετε μία. Είναι απόφαση πολιτικής και θα πρέπει να γραφτεί πριν τη δοκιμάσει μια διακοπή.
Καταγράψτε τα ονόματα των χώρων ονομάτων, τις διεπαφές και ποιος κατέχει τη διαμόρφωση, ώστε ο καθαρισμός να αφαιρεί μόνο ό,τι δημιούργησε η ανάπτυξη. Η επαναφορά της δικτύωσης του κεντρικού υπολογιστή κατά την επαναφορά κάνει τον καθαρισμό διακοπή. Η σελίδα network_namespaces(7) είναι σύντομη και αξίζει να τη διαβάσετε πριν σχεδιάσετε αυτή τη διαδρομή.