Δύο τοποθεσίες σε κυψελικές ζεύξεις αντιμετωπίζουν το ίδιο πρόβλημα και προς τις δύο κατευθύνσεις: καμία δεν μπορεί να δεχτεί μια αζήτητη σύνδεση IPv4, άρα καμία δεν μπορεί να παίξει τον διακομιστή σε ένα άμεσο τούνελ. Η αρχιτεκτονική που δουλεύει βάζει έναν προσβάσιμο τρίτο στη μέση: κάθε τοποθεσία καλεί προς τα έξω και η μέση προωθεί μόνο την κίνηση που εγκρίνετε. Αυτή η μέση μπορεί να είναι δρομολογητής που διαχειρίζεστε ή προϊόν που συστήνει ομότιμους, και αυτά δεν είναι το ίδιο. Τα βήματα παρακάτω είναι διατεταγμένα έτσι ώστε το καθένα να παράγει απόδειξη πριν εξαρτηθεί το επόμενο από αυτό.

Καμία τοποθεσία δεν μπορεί να δεχτεί κλήση, άρα και οι δύο πρέπει να καλέσουν προς τα έξω

Επιβεβαιώστε τον περιορισμό πριν σχεδιάσετε γύρω του. Αν ο πάροχος δώσει στη διεπαφή WAN μια ιδιωτική διεύθυνση, καμία προώθηση θύρας στον δρομολογητή της ίδιας της τοποθεσίας δεν θα την κάνει προσβάσιμη, γιατί η μετάφραση γίνεται πιο πάνω. Μια δημόσια διεύθυνση IPv6 μπορεί να υπάρχει στην ίδια ζεύξη και να αλλάξει εντελώς τον σχεδιασμό, γι’ αυτό ο έλεγχος καλύπτει και τις δύο οικογένειες. Γράψτε την απάντηση ανά τοποθεσία, γιατί οι δύο σπάνια έχουν ίδιους περιορισμούς ακόμη και όταν μοιράζονται πάροχο.

Η συνηθισμένη κυψελική περίπτωση μοιάζει με διεύθυνση από το μεταφρασμένο εύρος του παρόχου με μια προεπιλεγμένη διαδρομή μέσα από αυτό. Αυτό δεν είναι βλάβη προς επισκευή, είναι ο λόγος που υπάρχει ο κόμβος. Αυτό που ψάχνετε είναι οποιαδήποτε διεύθυνση μπορεί να φτάσει τρίτος χωρίς να έχει μιλήσει πρώτη η τοποθεσία.

Δύο εντολές απαντούν στο ερώτημα διευθυνσιοδότησης για την τοποθεσία μπροστά στην οποία στέκεστε. Εκτελέστε τις στον δρομολογητή της τοποθεσίας, όχι σε φορητό υπολογιστή πίσω από αυτόν:

ip -4 addr show scope global
ip -6 addr show scope global

Ποιος συστήνει ομότιμους και ποιος μεταφέρει τα πακέτα

Η σύσταση και η μεταφορά είναι ξεχωριστές εργασίες που τα προϊόντα συχνά δένουν μαζί χωρίς να κάνουν τη γραμμή ορατή. Ένας μηχανισμός συνάντησης βοηθά δύο ομότιμους να βρουν έναν υποψήφιο δρόμο, ενώ ένα ρελέ μεταφέρει τα πακέτα τους όταν δεν υπάρχει άμεσος δρόμος. Η αγορά υπηρεσίας που συστήνει ομότιμους δεν σας δίνει δρομολογητή, και αυτή η διαφορά καθορίζει αν ο σχεδιασμός χρειάζεται καθόλου κόμβο.

Η διάσχιση έχει το δικό της λεξιλόγιο, και οι λέξεις περιγράφουν ρόλους, όχι εγγυήσεις. Η προδιαγραφή ICE περιγράφει υποψηφίους και ελέγχους συνδεσιμότητας, το STUN περιγράφει έναν τρόπο να μάθετε για τη μετάφραση διευθύνσεων, και το TURN περιγράφει μεταφερόμενη κίνηση μέσω ρελέ για εφαρμογές που το υλοποιούν. Κανένας από αυτούς τους μηχανισμούς δεν εμφανίζεται σε ένα συνηθισμένο gateway, γιατί το κατευθύνατε σε διεύθυνση ανακάλυψης. Επαληθεύστε τη διάσχιση ως δυνατότητα προϊόντος και υποθέστε ρελέ μέχρι μια δοκιμή να δείξει το αντίθετο.

Μία διαδρομή ανά τοποθεσία, που την κατέχει ένας ομότιμος

Ο κόμβος χρειάζεται ένα τούνελ ανά τοποθεσία, ένα ξεχωριστό πρόθεμα LAN πίσω από κάθε μία και μια διαδρομή για κάθε πρόθεμα που ονομάζει τον ιδιοκτήτη της. Στο παράδειγμα ο κόμβος είναι 10.61.0.1, η τοποθεσία A είναι 10.61.0.11 με LAN 10.60.10.0/24, και η τοποθεσία B είναι 10.61.0.12 με LAN 10.60.20.0/24. Κάθε διαδρομή παρακάτω δείχνει στον ομότιμο που κατέχει το πρόθεμα και όχι στη διεπαφή του τούνελ:

ip route add 10.60.10.0/24 via 10.61.0.11 dev wg0
ip route add 10.60.20.0/24 via 10.61.0.12 dev wg0
sysctl net.ipv4.ip_forward
ip route get 10.60.20.55 from 10.60.10.77

Η προώθηση πρέπει να είναι ενεργοποιημένη, αλλιώς τα πακέτα σταματούν στον κόμβο χωρίς σφάλμα που να δείχνει την αιτία. Η τελευταία εντολή απαντά στο πραγματικό ερώτημα, γιατί ρωτά ποια διαδρομή θα έπαιρνε ένα πακέτο από το LAN της τοποθεσίας A στο LAN της τοποθεσίας B με την πηγή μέσα στην αναζήτηση. Θεωρήστε την αναζήτηση που ονομάζει τη διεπαφή του τούνελ ως απόδειξη και εκείνη που πέφτει στην προεπιλεγμένη διαδρομή ως διαδρομή που λείπει, όχι ως μυστήριο. Έπειτα περιορίστε τη διέλευση σκόπιμα, γιατί ένας κόμβος που προωθεί ανάμεσα σε κάθε ομότιμο μετατρέπει δύο τοποθεσίες σε επίπεδο δίκτυο και η πολιτική πρόσβασης που νομίζατε ότι είχατε παύει να ισχύει.

Αποφασίστε και πού τελειώνει η κρυπτογράφηση. Όταν ο κόμβος κρατά τις δύο απολήξεις των τούνελ, ο διαχειριστής εκείνης της μηχανής και το φορτίο εργασίας της μπαίνουν στο μοντέλο εμπιστοσύνης και διαθεσιμότητας, και το εύρος ζώνης της γίνεται μέρος της διαδρομής.

Κρατήστε κάθε αντιστοίχιση ζωντανή μέσα από τον πάροχο

Κάθε τοποθεσία ξεκινά το δικό της τούνελ, και καθεμία πρέπει να κρατά ζωντανή την αντιστοίχιση μετάφρασης αλλιώς ο πάροχος τη ξεχνά. Ένα μήνυμα διατήρησης στην πλευρά που ξεκινά διατηρεί αυτή την αντιστοίχιση ανάμεσα στις χειραψίες. Περιορίστε τα επιτρεπόμενα προθέματα στη διεύθυνση του κόμβου και στο απομακρυσμένο LAN, ώστε ένας παραβιασμένος ομότιμος να μην μπορεί να διεκδικήσει πρόθεμα που δεν κατέχει:

[Peer]
PublicKey = <hub public key>
Endpoint = 192.0.2.10:51820
AllowedIPs = 10.61.0.1/32, 10.60.20.0/24
PersistentKeepalive = 25

Καθρεφτίστε το μπλοκ στην άλλη τοποθεσία με το δικό της απομακρυσμένο πρόθεμα, και αντισταθείτε στην παρόρμηση να επιτρέψετε όλο το εύρος του τούνελ. Μια χειραψία που σταματά και ξαναρχίζει από νέα θύρα πηγής είναι η υπογραφή μιας ληγμένης αντιστοίχισης, και οι χρονικές σημάνσεις της χειραψίας είναι η απόδειξη ότι συνέβη. Ένα διάστημα μικρότερο από το χρονικό όριο του παρόχου αποτρέπει τη λήξη αντί να τη διορθώνει εκ των υστέρων. Όταν ο πάροχος αλλάζει τη συμπεριφορά μετάφρασης, περιμένετε αυτοί οι χρόνοι να αλλάξουν μαζί του.

Αποδείξτε και τις δύο κατευθύνσεις, μετά αποδείξτε την ανάκτηση

Η επαλήθευση έχει κατεύθυνση, οπότε ένα ping από το A στο B αποδεικνύει το μισό του σχεδιασμού και τίποτα για τη διαδρομή επιστροφής. Ελέγξτε τη διαδρομή απάντησης με την ίδια αναζήτηση που λαμβάνει υπόψη την πηγή στον κόμβο, και μετά επαναλάβετε τη δοκιμή από την άλλη πλευρά. Οι φρέσκες χειραψίες ανήκουν επίσης στις αποδείξεις, γιατί ένα τούνελ που έμεινε αδρανές μία ώρα μπορεί να δοκιμάζει παλιά αντιστοίχιση:

wg show wg0 latest-handshakes
ping -c 3 10.60.20.55
traceroute -n 10.60.20.55

Έπειτα δοκιμάστε την αποτυχία που περιμένετε και όχι την επιτυχία που θέλετε. Επανεκκινήστε τη ζεύξη μιας τοποθεσίας και επιβεβαιώστε ότι το τούνελ επιστρέφει χωρίς άνθρωπος να αγγίξει κανένα άκρο, γιατί ένας σχεδιασμός που χρειάζεται διαχειριστή μετά από κάθε αλλαγή του παρόχου είναι ημιτελής. Καταγράψτε την κύρια διαδρομή, την εναλλακτική IPv6 όταν υπάρχει, και τη συμπεριφορά όταν ο κόμβος δεν είναι διαθέσιμος. Ο κόμβος είναι πλέον μέρος του μοντέλου διαθεσιμότητάς σας, οπότε γράψτε το αντί να το ανακαλύψετε κατά τη διάρκεια μιας διακοπής.

Σχετικά άρθρα