Πρώτη εκκίνηση: εγγραφή για έναν στόλο συσκευών WireGuard
Μία εικόνα, ένα κλειδί ανά πλακέτα και ένα βήμα εξουσιοδότησης που δεν εμπιστεύεται τον ισχυρισμό της ίδιας της συσκευής. Τέσσερα στάδια από την εκκίνηση σε έναν κατοχυρωμένο peer.
Η πλακέτα εκκινεί από την κοινή εικόνα, παίρνει μίσθωση DHCP, και ένα σενάριο προετοιμασίας εκτελείται πριν αγγίξει κανείς τη συσκευή. Κάπου σε αυτό το σενάριο πρέπει να αποκτήσει ταυτότητα WireGuard που ανήκει σε αυτή την πλακέτα και σε καμία άλλη, να κάνει αυτή την ταυτότητα εξουσιοδοτημένη, και να γράψει ένα προφίλ που θα δεχτεί η πύλη. Η εικόνα μπορεί να μεταφέρει το λογισμικό πελάτη, ένα ελεγμένο πρότυπο και το δημόσιο κλειδί της πύλης. Αυτό που δεν πρέπει ποτέ να μεταφέρει είναι ένα ιδιωτικό κλειδί κοινόχρηστο σε όλο τον στόλο, γιατί αυτό μετατρέπει μία κλεμμένη πλακέτα σε περιστατικό για όλο τον στόλο. Η σειρά παρακάτω κρατά την ταυτότητα τοπική και την εξουσιοδότηση ρητή.
Τι μεταφέρει η εικόνα και τι όχι
Στείλτε το πακέτο, το πρότυπο με θέσεις κράτησης, το δημόσιο κλειδί της πύλης και τον πελάτη εγγραφής. Το πρότυπο είναι σχήμα, όχι μυστικό: πρέπει να είναι αναγνώσιμο από τον χρήστη προετοιμασίας και να μην περιέχει υλικό κλειδιού.
Το ιδιωτικό κλειδί παράγεται στη συσκευή στην πρώτη εκκίνηση και δεν την εγκαταλείπει ποτέ. Μόνο το δημόσιο μισό ταξιδεύει, μέσα σε ένα αίτημα εγγραφής που εξουσιοδοτείται από κάτι άλλο εκτός από τον ισχυρισμό της ίδιας της συσκευής για το ποια είναι. Αυτή η διάκριση είναι που εμποδίζει μια κλεμμένη πλακέτα να γίνει πρόβλημα για όλο τον στόλο. Είναι επίσης το σημείο όπου τα περισσότερα σενάρια πρώτης εκκίνησης κάνουν λάθος.
Βήμα 1: δημιουργία του κλειδιού τοπικά
Εκτελέστε τη δημιουργία σε προστατευμένο κατάλογο αφού εγκριθεί και λειτουργήσει η υποκείμενη σύνδεση δικτύου. Το υποκέλυφος κρατά την αλλαγή umask τοπική σε αυτή τη λειτουργία, και το set -C αρνείται να αντικαταστήσει ένα υπάρχον αρχείο:
(
umask 077
set -C
wg genkey > /etc/wireguard/device.key &&
wg pubkey < /etc/wireguard/device.key > /etc/wireguard/device.pub
)
Γρήγορη εκκίνηση του WireGuard τεκμηριώνει τη σχέση δημιουργίας κλειδιών στην οποία στηρίζονται αυτές οι δύο εντολές. Αν η δημιουργία διακοπεί, αφήστε τη συσκευή χωρίς εγγραφή και αφήστε τη ροή εργασίας να συμβιβάσει τα αρχεία. Μη διαγράφετε μια υπάρχουσα ταυτότητα μόνο και μόνο για να τρέξει το σενάριο καθαρά από την αρχή.
Διατηρήστε το εκκρεμές κλειδί ανάμεσα στις επαναλήψεις. Η αναδημιουργία ταυτότητας μετά από κάθε προσωρινή αποτυχία δικτύου είναι ο τρόπος με τον οποίο ένας στόλος καταλήγει με ορφανά peer που κανείς δεν μπορεί να αντιστοιχίσει σε συσκευή.
Βήμα 2: εξουσιοδότηση μιας εγγραφής συσκευής
Υποθέστε ότι το απόθεμα ονομάζει αυτή την πλακέτα device-042 και της εκχωρεί 10.90.0.42/32. Η υπηρεσία εγγραφής πρέπει να επαληθεύσει ότι αυτός ο αιτών δικαιούται εκείνη την εγγραφή. Ένας σειριακός αριθμός πληκτρολογημένος σε φόρμα δεν είναι απόδειξη, γιατί οι σειριακοί αριθμοί είναι τυπωμένοι στο εξωτερικό του κουτιού.
Ένα διαπιστευτήριο εκκίνησης ανά συσκευή, μια έγκριση χειριστή ή μια βεβαίωση με υλική υποστήριξη μπορούν να θεμελιώσουν τον ισχυρισμό. Προστατέψτε την ακεραιότητα του αιτήματος και τη γνησιότητα της απάντησης, και μην αντικαθιστάτε ένα κοινόχρηστο μυστικό VPN με ένα κοινόχρηστο διαπιστευτήριο εργοστασίου.
Η καταχωρισμένη εγγραφή δεσμεύει τη συσκευή, το δημόσιο κλειδί της, τη διεύθυνση που της εκχωρήθηκε και τον επιτρεπόμενο ρόλο διαχείρισής της. Το ίδιο το WireGuard δεν ορίζει API εγγραφής, οπότε αυτή η υπηρεσία είναι κάτι που χτίζετε και λειτουργείτε συνειδητά.
Βήμα 3: γράψτε δύο ταιριαστές διαμορφώσεις
Η συσκευή χρειάζεται ένα προφίλ που δρομολογεί τα προθέματα διαχείρισης στη σήραγγα, και η πύλη χρειάζεται μια καταχώριση peer που επιτρέπει μόνο τη δική της διεύθυνση προέλευσης αυτής της συσκευής. Με πύλη στο 10.90.0.1 και δίκτυο διαχείρισης 10.60.0.0/16, η πλευρά της συσκευής μοιάζει έτσι:
[Interface]
PrivateKey = <device-042 private key>
Address = 10.90.0.42/32
[Peer]
PublicKey = <trusted gateway public key>
Endpoint = vpn.example.com:51820
AllowedIPs = 10.90.0.1/32, 10.60.0.0/16
PersistentKeepalive = 25
Οι τιμές μέσα στις αγκύλες είναι θέσεις κράτησης, όχι κλειδιά. Το keepalive έχει σημασία όταν η πλακέτα βρίσκεται πίσω από NAT και πρέπει να παραμένει προσβάσιμη· δεν απαιτείται παντού, και η προσθήκη του από συνήθεια κρατά έναν ασύρματο δέκτη ξύπνιο χωρίς λόγο.
Στην πύλη, η καταχώριση peer είναι στενή εκ σχεδιασμού:
[Peer]
PublicKey = <device-042 public key>
AllowedIPs = 10.90.0.42/32
Μην αντιγράψετε τη λίστα προορισμών της συσκευής στην καταχώριση peer της πύλης. Στη συσκευή η λίστα λέει τι δρομολογείται στη σήραγγα· στην πύλη λέει ποιες διευθύνσεις προέλευσης επιτρέπεται να χρησιμοποιεί αυτό το peer, και αυτές είναι διαφορετικές δηλώσεις.
Η προώθηση, οι κανόνες του τείχους προστασίας και η διαδρομή επιστροφής προς το δίκτυο διαχείρισης πρέπει ακόμη να επιτρέπουν την εγκεκριμένη πρόσβαση. Ένα καταχωρισμένο peer δεν είναι άδεια για κάθε εφαρμογή πίσω του.
Βήμα 4: κατοχύρωση της εγγραφής ως κατάσταση κύκλου ζωής
Εφαρμόστε την εγγραφή της πύλης και το προφίλ της συσκευής μέσω όποιου κατέχει την αντίστοιχη διαμόρφωση, και μετά σημειώστε την εγγραφή ως ολοκληρωμένη μόνο όταν η επιδιωκόμενη ταυτότητα και διεύθυνση γίνουν δεκτές. Οι επαναλήψεις πρέπει να συμβιβάζουν την ίδια εγγραφή αντί να εκχωρούν δεύτερο peer ή δεύτερη διεύθυνση.
Κρατήστε μια διαδρομή ανάκτησης για διακοπείσα προετοιμασία, συμπεριλαμβανομένης της περίπτωσης όπου η πύλη δέχτηκε το κλειδί και η συσκευή δεν έγραψε ποτέ το προφίλ της.
Όταν μια πλακέτα αντικαθίσταται ή αποσύρεται, αφαιρέστε το δημόσιο κλειδί και την εξουσιοδότησή της μαζί. Ένα νέο κλειδί είναι ένα σκόπιμο γεγονός επανεγγραφής, όχι παρενέργεια μιας νέας εικόνας. Σειρά εργασίας: δημιουργία τοπικά, εξουσιοδότηση έναντι του αποθέματος, γράψιμο και των δύο πλευρών, κατοχύρωση της κατάστασης και μετά δοκιμή ενός αιτήματος διαχείρισης μέσω της σήραγγας.