Το duplicate-cn δίνει σε δύο συσκευές μία ταυτότητα, όχι δύο
Το duplicate-cn επιτρέπει δεύτερη ταυτόχρονη σύνοδο κάτω από ένα κοινό όνομα. Δεν δημιουργεί ποτέ δεύτερη ταυτότητα συσκευής, δεύτερη διεύθυνση ή ξεχωριστή ανάκληση.
Αντιγράψτε το προφίλ στο tablet, συνδεθείτε, και το laptop πέφτει. Προσθέστε το duplicate-cn, μένουν και τα δύο συνδεδεμένα, και το πρόβλημα μοιάζει λυμένο μέχρι οι δύο συσκευές να μαλώσουν για την ίδια διεύθυνση σήραγγας ή μέχρι ένα χαμένο tablet να βγάλει offline ολόκληρο τον λογαριασμό. Η επιλογή αλλάζει ένα πράγμα και μόνο ένα: αν ο διακομιστής επιτρέπει δεύτερη σύνοδο κάτω από ένα όνομα που έχει ήδη δει. Ό,τι περιμένουν οι άνθρωποι να διορθώσει, από την ανεξαρτησία συσκευών μέχρι τη διευθυνσιοδότηση ανά συσκευή και την επιλεκτική ανάκληση, εξακολουθεί να γίνεται μέσω ταυτότητας, και ταυτότητα εδώ είναι το πιστοποιητικό.
Ο μύθος: μια δεύτερη σύνοδος είναι δεύτερη ταυτότητα
Η διαίσθηση λέει ότι δύο συνδέσεις πρέπει να είναι δύο πελάτες, και δύο πελάτες θα έπρεπε να είναι δύο συσκευές με δικά τους δικαιώματα. Ο διακομιστής δεν το μοντελοποιεί έτσι. Βλέπει ένα κοινό όνομα και, με το duplicate-cn ενεργό, δέχεται περισσότερες από μία ζωντανές συνόδους που φέρουν αυτό το όνομα, καθεμία με τη δική της κατάσταση συνόδου στον daemon.
Τίποτα σε αυτή την αποδοχή δεν αγγίζει την επαλήθευση πιστοποιητικού. Το ίδιο πιστοποιητικό παραμένει το διαπιστευτήριο, το ίδιο κλειδί παραμένει το ιδιωτικό κλειδί, και οποιαδήποτε πολιτική βασίζεται στο υποκείμενο του πιστοποιητικού εξακολουθεί να καταλήγει δύο φορές στην ίδια τιμή. Μια δεύτερη σύνοδος είναι δεύτερο socket, όχι δεύτερη ταυτότητα.
Αυτή η διάκριση είναι αόρατη όσο όλα δουλεύουν. Γίνεται πολύ ορατή τη στιγμή που πρέπει να ξεχωρίσετε τις δύο συσκευές, που συνήθως είναι η μέρα που χάνεται η μία από τις δύο.
Τι αλλάζει πραγματικά όταν δύο σύνοδοι μοιράζονται ένα όνομα
Χωρίς την επιλογή, μια νέα σύνδεση κάτω από ένα κοινό όνομα που είναι ήδη συνδεδεμένο εκτοπίζει την προηγούμενη σύνοδο. Γι' αυτό πέφτει το laptop όταν συνδέεται το tablet, και πρόκειται για σκόπιμη προστασία κατά της ασάφειας, όχι για σφάλμα. Με την επιλογή, και οι δύο σύνοδοι μένουν ζωντανές και ο διακομιστής τις παρακολουθεί χωριστά ανά σύνοδο, όχι ανά συσκευή.
Κάθε σύνοδος εξακολουθεί να έχει τη δική της εξωτερική σύνδεση και τα δικά της διαπραγματευμένα κλειδιά, άρα η ταυτόχρονη ροή είναι πραγματικά ταυτόχρονη. Αυτό που μοιράζονται είναι ό,τι παράγεται από το διαπιστευτήριο: αναζητήσεις πολιτικής, διαμόρφωση ειδική για τον πελάτη, ταυτότητα στα αρχεία καταγραφής και ανάκληση. Η κατάσταση συνόδου ανήκει στη σύνδεση και πεθαίνει μαζί της, ενώ τα δεδομένα σε επίπεδο διαπιστευτηρίου παραμένουν και για τις δύο. Γι' αυτό η έξοδος κατάστασης μπορεί να απαριθμήσει το ίδιο όνομα δύο φορές, ενώ οι μετρητές μένουν χωριστοί.
Επιβεβαιώστε τι κάνει πραγματικά η έκδοσή σας πριν σχεδιάσετε πάνω σε αυτό, γιατί το αποτέλεσμα της επιλογής ορίζεται από την ίδια την επιλογή και όχι από λαϊκές δοξασίες:
grep -n 'duplicate-cn\|client-config-dir\|username-as-common-name' /etc/openvpn/server.conf
Η στατική διεύθυνση που νομίζατε ότι εκχωρήσατε
Η διαμόρφωση ανά πελάτη αναζητείται με βάση το όνομα, και εκεί είναι η παγίδα. Ένα αρχείο client-config-dir με όνομα από το κοινό όνομα εφαρμόζεται σε κάθε συσκευή που χρησιμοποιεί αυτό το όνομα, οπότε ένα ifconfig-push μέσα του δίνει και στις δύο συσκευές την ίδια διεύθυνση σήραγγας. Η δεύτερη σύνοδος είτε δεν εγκαθίσταται είτε συγκρούεται με τρόπο που μοιάζει με βλάβη δρομολόγησης.
Μια δυναμική δεξαμενή συμπεριφέρεται καλύτερα κατά τύχη, γιατί σε κάθε σύνοδο εκχωρείται ανεξάρτητα μια διεύθυνση από τη δεξαμενή. Αυτό δεν σας δίνει ακόμη σταθερή διεύθυνση ανά συσκευή, και σίγουρα δεν σας δίνει πολιτική ανά συσκευή συνδεδεμένη με αυτή τη διεύθυνση.
Αν η ανάπτυξη χρησιμοποιεί username-as-common-name, το κλειδί αναζήτησης γίνεται το πιστοποιημένο όνομα χρήστη αντί για το υποκείμενο του πιστοποιητικού, και η ίδια σύγκρουση ακολουθεί για όποιον συνδεθεί δύο φορές. Το όνομα που οδηγεί τη διαμόρφωση πρέπει να είναι μοναδικό ανά συσκευή για να έχει νόημα η διαμόρφωση ανά συσκευή.
Τι δεν μπορεί να κάνει μια κοινή ταυτότητα κατά την αφαίρεση
Η ανάκληση λειτουργεί στο πιστοποιητικό, όχι στο εμφανιζόμενο όνομα και όχι στη σύνοδο. Ανακαλέστε αυτό το πιστοποιητικό και κάθε συσκευή που κρατά αντίγραφο χάνει αμέσως την πρόσβαση, μαζί και εκείνη στο γραφείο που κανείς δεν θέλει να ενοχλήσει. Κρατήστε το και η χαμένη συσκευή συνεχίζει να δουλεύει, γιατί τίποτα στο πρωτόκολλο δεν τη ξεχωρίζει από το εγκεκριμένο αντίγραφο.
Τα αρχεία καταγραφής κληρονομούν την ίδια ασάφεια. Η έξοδος κατάστασης δείχνει ένα κοινό όνομα και μια πραγματική διεύθυνση, και τα δύο μπορούν να ανήκουν σε οποιαδήποτε από τις δύο συσκευές. Μια έρευνα περιστατικού που χρειάζεται να ξέρει ποιο μηχάνημα έκανε τι δεν μπορεί να απαντήσει από τα ίδια τα αρχεία του VPN, όση λεπτομέρεια κι αν παρέχει το επίπεδο καταγραφής.
Δεν υπάρχει κρυπτογραφική παράκαμψη γι' αυτό. Δύο συσκευές που παρουσιάζουν το ίδιο πιστοποιητικό είναι, για τον διακομιστή, ο ίδιος συμμετέχων δύο φορές, και κάθε σχήμα που ισχυρίζεται το αντίθετο είναι σύμβαση ονομασίας και όχι έλεγχος.
Πότε ο διαμοιρασμός είναι σωστός και πώς να τον περιορίσετε
Ο διαμοιρασμός έχει νόμιμες χρήσεις: ένας λογαριασμός εργαστηρίου που τον χρησιμοποιούν πολλά μηχανήματα δοκιμών, ή ένα νοικοκυριό όπου οι συσκευές διαχειρίζονται μαζί και η λεπτομέρεια της ανάκλησης δεν έχει σημασία. Σε αυτές τις περιπτώσεις ενεργοποιήστε την επιλογή σκόπιμα, κρατήστε το κοινό διαπιστευτήριο έξω από την πολιτική ανά συσκευή και δώστε χώρο στη δεξαμενή ώστε οι σύνοδοι να μην συγκρούονται σε μια διεύθυνση.
Για ό,τι χρειάζεται ξεχωριστές διευθύνσεις, ξεχωριστά αρχεία καταγραφής ή ξεχωριστή αφαίρεση, εκδώστε ξεχωριστά πιστοποιητικά μέσω της κανονικής διαδικασίας εγγραφής. Αυτό δίνει σε κάθε επόμενο σύστημα ένα διακριτό αντικείμενο πάνω στο οποίο να βασιστεί, και η επιλογή παύει να έχει σημασία επειδή τα ονόματα είναι ήδη μοναδικά.
Όποιο δρόμο κι αν επιλέξετε, δοκιμάστε το μοντέλο διαχείρισης και όχι τη σύνδεση. Συνδέστε και τις δύο συσκευές, επιβεβαιώστε ότι έχουν διαφορετικές διευθύνσεις, μετά προσομοιώστε μια απώλεια και ελέγξτε ότι μπορείτε να αφαιρέσετε ακριβώς μία από αυτές. Το εγχειρίδιο openvpn(8) ορίζει το εύρος της επιλογής· η διαδικασία αφαίρεσης που ακολουθείτε ορίζει αν ο διαμοιρασμός είναι πράγματι αποδεκτός.