Σχεδιασμός IPv6 για κόμβο WireGuard δύο τοποθεσιών: πρόθεμα, ομότιμοι, διαδρομές
Δουλέψτε έναν ιδιωτικό κόμβο IPv6 για δύο LAN: επιλέξτε πρόθεμα, κρατήστε διευθύνσεις σήραγγας και αφήστε το AllowedIPs να εκφράσει ποιος ομότιμος κατέχει κάθε υποδίκτυο.
Δύο LAN, ένας κόμβος WireGuard και ένα σχέδιο διευθύνσεων IPv6 που πρέπει να απαντήσει σε τρεις ξεχωριστές ερωτήσεις: ποιο πρόθεμα, ποια διεύθυνση ανήκει σε κάθε δρομολογητή και ποιος ομότιμος κατέχει ποιο υποδίκτυο. Ένα λάθος σε οποιοδήποτε από αυτά παράγει σήραγγα που κάνει χειραψία και δεν δρομολογεί τίποτα. Το σχέδιο παρακάτω περνά μια ιδιωτική σχεδίαση δύο τοποθεσιών με αυτή τη σειρά. Σκόπιμα δεν παρέχει πρόσβαση στο διαδίκτυο μέσω IPv6.
Αποφασίστε για τι χρησιμεύει το πρόθεμα
Ένα μοναδικό τοπικό πρόθεμα από το fd00::/8 είναι η φυσική επιλογή όταν ο στόχος είναι ιδιωτική προσβασιμότητα μεταξύ τοποθεσιών. Παραμένει σταθερό ανεξάρτητα από το ποιος πάροχος εξυπηρετεί κάθε θέση και δεν διαφημίζεται στον παγκόσμιο πίνακα δρομολόγησης, άρα δεν μπορεί να διαρρεύσει την εσωτερική σας αρίθμηση στο διαδίκτυο.
Η ίδια ιδιότητα είναι ο περιορισμός. Ένα ULA δεν δίνει δημόσια διαδρομή επιστροφής, γιατί κανένα ανάντη δίκτυο δεν ξέρει να το δρομολογήσει προς την πύλη σας. Αν η απαίτηση περιλαμβάνει έξοδο στο διαδίκτυο μέσω IPv6, χρειάζεστε μια εκχώρηση από πάροχο που τη δρομολογεί προς εσάς, και αυτή είναι ξεχωριστή σχεδιαστική απόφαση με δικό της μέγεθος προθέματος.
Μην υποθέσετε ότι κάθε ανάπτυξη χρειάζεται /48. RFC 6177 απομακρύνθηκε από ένα υποχρεωτικό μέγεθος τελικής τοποθεσίας, και το σωστό μέγεθος ακολουθεί τον αριθμό των δικτύων που θα λειτουργείτε. Δημιουργήστε το ULA με τη διαδικασία RFC 4193 αντί να επινοήσετε πρόθεμα που μπορεί να χρησιμοποιήσει και άλλος οργανισμός. Γράψτε το αποτέλεσμα στο σχέδιο διευθύνσεων πριν διαμορφωθεί οποιαδήποτε συσκευή, γιατί πρόθεμα που δεν κατέγραψε κανείς είναι πρόθεμα που κάποιος θα ξαναχρησιμοποιήσει.
Χωρίστε το πρόθεμα σε ρόλους
Το παρακάτω παράδειγμα χρησιμοποιεί το fd7c:2e91:4a00::/48 και ο πίνακας είναι οργανωμένος κατά το πού γράφεται κάθε μπλοκ, όχι κατά τοποθεσία. Θεωρήστε τις τιμές δείγμα και δημιουργήστε τις δικές σας πριν αναπτύξετε οτιδήποτε.
| Where it is written | What appears there | Block used | What it establishes |
|---|---|---|---|
| Hub wg0.conf, interface address | A single host address on the tunnel | fd7c:2e91:4a00:ff00::1/128 | The hub's own tunnel identity |
| Hub wg0.conf, Site A peer | Two ranges in one AllowedIPs line | ::2/128 and :10::/64 | That A owns its tunnel address and its LAN |
| Hub wg0.conf, Site B peer | Two ranges in one AllowedIPs line | ::3/128 and :20::/64 | That B owns its tunnel address and its LAN |
| Site A wg0.conf, interface address | A single host address on the tunnel | fd7c:2e91:4a00:ff00::2/128 | A's identity as the hub sees it |
| Site B wg0.conf, interface address | A single host address on the tunnel | fd7c:2e91:4a00:ff00::3/128 | B's identity as the hub sees it |
Τα μπλοκ LAN είναι /64 επειδή το συνηθισμένο SLAAC περιμένει αναγνωριστικό διασύνδεσης 64 bit. Ο διαχωρισμός ενός LAN σε μικρότερο μπλοκ σπάει αυτή την παραδοχή στους περισσότερους κεντρικούς υπολογιστές, και το λειτουργικό κόστος δεν αξίζει την εξοικονόμηση διευθύνσεων σε ιδιωτικό σχέδιο. Και τα δύο μπλοκ LAN προέρχονται από το μέσο του /48, αφήνοντας το χαμηλό εύρος ελεύθερο για μεταγενέστερες τοποθεσίες.
Οι διευθύνσεις σήραγγας είναι ένα διοικητικό απόθεμα, όχι δίκτυο πάνω στη ζεύξη. Κάθε διασύνδεση παίρνει μία /128 από αυτό, ώστε κανένας κεντρικός υπολογιστής να μην υποθέτει κοινό υποδίκτυο στη σήραγγα και να μην τρέχει ανακάλυψη γειτόνων όπου δεν χρειάζεται. Κρατήστε τους ρόλους ασυνεχείς και καταγράψτε τους στο σχέδιο διευθύνσεων του οργανισμού ώστε μια μεταγενέστερη τοποθεσία να μην ξαναχρησιμοποιήσει μπλοκ.
Δώστε σε κάθε δρομολογητή μία διεύθυνση σήραγγας
Εκχωρήστε μία /128 ανά δρομολογητή και κρατήστε τα υπάρχοντα κλειδιά και τα τελικά σημεία του κόμβου που λειτουργεί. Οι τρεις τιμές παρακάτω διαφέρουν μόνο στο τμήμα του κεντρικού υπολογιστή.
Hub: Address = fd7c:2e91:4a00:ff00::1/128
Site A: Address = fd7c:2e91:4a00:ff00::2/128
Site B: Address = fd7c:2e91:4a00:ff00::3/128
Αυτή η /128 περιγράφει τη μοναδική διεύθυνση που εκχωρείται σε αυτή τη διασύνδεση. Δεν λέει τίποτα για το πόσους προορισμούς επιτρέπεται να δρομολογεί ο ομότιμος, γιατί η προσβασιμότητα εκφράζεται στο AllowedIPs και όχι στο πρόθεμα της διασύνδεσης.
Κάθε δρομολογητής τοποθεσίας χρειάζεται επίσης διεύθυνση στο μπλοκ LAN του και τρόπο διανομής της, συνήθως αγγελίες δρομολογητή για SLAAC. Το WireGuard δεν στέλνει αυτές τις αγγελίες για εσάς και δεν γεφυρώνει τα δύο LAN. Ο δρομολογητής τοποθεσίας είναι δρομολογητής και προς τις δύο κατευθύνσεις.
Βάλτε την κυριότητα υποδικτύου στο AllowedIPs
Η καταχώριση ομοτίμου του κόμβου για την Τοποθεσία A κατέχει τη διεύθυνση σήραγγας της A και το LAN της A, και αυτό το ζεύγος είναι ολόκληρη η δήλωση κυριότητας. Τίποτα άλλο σε αυτή την ενότητα ομοτίμου δεν χρειάζεται να περιγράφει την τοποθεσία.
AllowedIPs = fd7c:2e91:4a00:ff00::2/128, fd7c:2e91:4a00:10::/64
Η καταχώριση ομοτίμου για την Τοποθεσία B κατέχει το αντίστοιχο ζεύγος, και η συμμετρία εδώ μετράει περισσότερο από τη συντομία. Διαβάστε τις δύο γραμμές μαζί και ο διαχωρισμός κυριότητας γίνεται ορατός με μια ματιά.
AllowedIPs = fd7c:2e91:4a00:ff00::3/128, fd7c:2e91:4a00:20::/64
Είναι δύο ξεχωριστές ενότητες ομοτίμου, όχι δύο λίστες που ανταγωνίζονται για έναν ομότιμο. Το WireGuard χρησιμοποιεί το AllowedIPs και προς τις δύο κατευθύνσεις: επιλέγει τον ομότιμο για έναν εξερχόμενο προορισμό και απορρίπτει ένα εισερχόμενο πακέτο του οποίου η πηγή δεν ταιριάζει με το εύρος που έχει εκχωρηθεί στον ομότιμο που το αποκρυπτογράφησε. Το να δοθεί ολόκληρο το /48 σε δύο ομοτίμους θα απενεργοποιούσε αυτόν τον δεύτερο έλεγχο και θα θόλωνε ποια τοποθεσία κατέχει ποιο μπλοκ. Ακριβώς αυτή η διάκριση κάνει μια λανθασμένη διεύθυνση πηγής ορατή αντί να γίνεται σιωπηρά δεκτή.
Κάθε τοποθεσία χρειάζεται μόνο τους προορισμούς που είναι προσβάσιμοι μέσω του ομοτίμου κόμβου της: η Τοποθεσία A απαριθμεί τη διεύθυνση του κόμβου, τη διεύθυνση σήραγγας της Τοποθεσίας B και το LAN της B, και η Τοποθεσία B απαριθμεί το αντίστροφο σύνολο. Οι λίστες είναι ασύμμετρες σκόπιμα, γιατί κάθε δρομολογητής βλέπει διαφορετική πλευρά της τοπολογίας. Γράψτε και τις δύο από το σχέδιο διευθύνσεων και όχι από τη διαμόρφωση της άλλης τοποθεσίας, γιατί έτσι ένα παρωχημένο εύρος επιβιώνει από μια αναρίθμηση.
Με το wg-quick αυτά τα εύρη δημιουργούν και διαδρομές. Με το systemd-networkd ή χειροκίνητη ρύθμιση, προσθέστε τις αντίστοιχες διαδρομές μόνοι σας· αλλιώς η σήραγγα μεταφέρει πακέτα που ο πυρήνας δεν στέλνει ποτέ σε αυτή.
Ολοκληρώστε την προώθηση και δοκιμάστε τις δύο κατευθύνσεις
Ενεργοποιήστε την προώθηση IPv6 στον κόμβο και στους δύο δρομολογητές τοποθεσίας και επιτρέψτε τις απαιτούμενες υπηρεσίες μεταξύ τοποθεσιών στην πολιτική προώθησης. Κρατήστε τα μηνύματα ICMPv6 Packet Too Big χρησιμοποιήσιμα, γιατί η απόρριψή τους σπάει την ανακάλυψη MTU διαδρομής και δημιουργεί κολλήματα σε μεγάλες μεταφορές που μοιάζουν με σφάλματα εφαρμογής. Ένας κόμβος που προωθεί χωρίς την άδεια του τείχους προστασίας ρίχνει το πακέτο ανάμεσα στη δρομολόγηση και τη σήραγγα. Αυτή η λειτουργία αποτυχίας αξίζει να τη γνωρίζετε, γιατί η σήραγγα μένει ενεργή και πεθαίνουν μόνο μερικές ροές.
sysctl net.ipv6.conf.all.forwarding
ip -6 route
ping -6 -c 3 fd7c:2e91:4a00:20::1
Δοκιμάστε από κεντρικό υπολογιστή στην Τοποθεσία A προς κεντρικό υπολογιστή στην Τοποθεσία B και μετά προς την αντίθετη κατεύθυνση. Ένα ping στη διεύθυνση σήραγγας του κόμβου ασκεί μόνο το πρώτο άλμα και θα περάσει ακόμα και όταν οι διαδρομές LAN είναι λάθος. Η ροή από κεντρικό υπολογιστή σε κεντρικό υπολογιστή είναι αυτή που αποδεικνύει το σχέδιο.
Η εξωτερική σύνδεση WireGuard μπορεί να τρέχει πάνω από IPv4 ενώ η εσωτερική κίνηση είναι IPv6, και αυτή η ανεξαρτησία είναι χρήσιμη κατά τη μετάβαση. Αν προστεθεί αργότερα παγκόσμια έξοδος IPv6, επανεξετάστε την εκχώρηση παρόχου, την επιλογή διεύθυνσης πηγής και τη δρομολόγηση επιστροφής ως νέο σχεδιαστικό βήμα· το παραπάνω ιδιωτικό σχέδιο παραμένει έγκυρο για κίνηση μεταξύ τοποθεσιών.