IPv6 μέσα από σήραγγα OpenVPN: μια περιήγηση στον οικιακό δρομολογητή
Το IPv6 πεθαίνει ή διαρρέει όταν η σήραγγα δίνει ένα πρόθεμα που ο δρομολογητής δεν μπορεί να δρομολογήσει. Δείτε με τη σειρά τον πελάτη, τη δεξαμενή, την προώθηση, το proxy NDP και την επιστροφή.
Ο φορητός υπολογιστής έχει διεύθυνση IPv6, η σήραγγα είναι ενεργή πάνω από IPv4, και όμως κάθε δοκιμή IPv6 αποτυγχάνει. Ή, ακόμη χειρότερα, η δοκιμή πετυχαίνει και η κίνηση βγήκε από τη διαδρομή του παρόχου χωρίς να μπει ποτέ στη σήραγγα. Και τα δύο αποτελέσματα ανάγονται σε μία απόφαση που λείπει: κανείς δεν έδωσε στον δρομολογητή ένα πρόθεμα που να μπορεί να δρομολογήσει προς τους πελάτες. Το περπάτημα της διαδρομής από τον πελάτη προς τα έξω βρίσκει ποιο κομμάτι λείπει.
Ξεκινήστε από εκεί που βρίσκεται ο πελάτης
Κοιτάξτε τον πελάτη πριν αγγίξετε τον διακομιστή. Το ip -6 addr θα πρέπει να δείχνει μια διεύθυνση σήραγγας από τη δεξαμενή, και το ip -6 route θα πρέπει να δείχνει το προωθημένο πρόθεμα που δείχνει στη συσκευή σήραγγας. Όταν η διεύθυνση υπάρχει αλλά η διαδρομή όχι, λείπει το push ή ο πελάτης το αγνόησε. Όταν δεν υπάρχει κανένα από τα δύο, ο διακομιστής δεν εκχώρησε απολύτως τίποτα.
Έπειτα ελέγξτε τι πιστεύει ο πελάτης για τον έξω κόσμο. Μια προεπιλεγμένη διαδρομή μέσω της σήραγγας διεκδικεί όλη την κίνηση IPv6, ενώ μια διαδρομή για το 2000::/3 διεκδικεί μόνο καθολικό unicast. Και οι δύο μπορεί να είναι σωστές, και απαντούν σε διαφορετικά ερωτήματα για τη διαρροή.
Ένας πελάτης χωρίς καθόλου προεπιλεγμένη διαδρομή IPv6 αποτυγχάνει σε κάθε δημόσια δοκιμή, ενώ η ίδια η σήραγγα είναι απόλυτα υγιής. Αυτό είναι κενό πολιτικής και όχι χαλασμένη σήραγγα.
Ελέγξτε τη δεξαμενή που ο διακομιστής μπορεί πραγματικά να δρομολογήσει
Ο διακομιστής μπορεί να εκχωρεί μόνο από ένα πρόθεμα που ελέγχει πραγματικά. Αν ο πάροχος εκχωρήσει ένα /56, κρατήστε ένα /64 για τη σήραγγα και αφήστε τα υπόλοιπα για το LAN. Όπου ο πάροχος δίνει μόνο ένα /64 στο WAN χωρίς περαιτέρω δρομολόγηση, αφήστε το πρόθεμα του LAN ήσυχο και δώστε στη σήραγγα ένα μοναδικό τοπικό εύρος, αποδεχόμενοι ότι οι πελάτες δεν θα έχουν καθολική έξοδο.
Η δεξαμενή και το push πάνε μαζί. Το server-ipv6 2001:db8:80:10::/64 εκχωρεί διευθύνσεις, και το push "route-ipv6 2000::/3" λέει στους πελάτες τι να στέλνουν στη σήραγγα. Το push του 2000::/3 καλύπτει το καθολικό unicast και αφήνει τα εύρη link-local και multicast έξω από τη σήραγγα.
Γράψτε το επιλεγμένο πρόθεμα στο αρχείο εγκατάστασης. Όποιος αλλάξει την παράδοση του παρόχου την επόμενη φορά πρέπει να ξέρει ποιο /64 καταλαμβάνει ήδη η σήραγγα.
Ενεργοποιήστε την προώθηση για τη δεύτερη οικογένεια
Η προώθηση IPv4 δεν συνεπάγεται προώθηση IPv6. Ορίστε το net.ipv6.conf.all.forwarding=1 και αντιγράψτε ό,τι επιτρέπει ήδη η πολιτική FORWARD του IPv4. Σε έναν δρομολογητή του οποίου η αλυσίδα FORWARD απορρίπτει εξ ορισμού, ένα σύνολο κανόνων που λείπει μοιάζει ακριβώς με νεκρή σήραγγα.
Η χειραψία πετυχαίνει, ο πελάτης παίρνει διεύθυνση και πίσω δεν έρχεται τίποτα. Προσθέστε κανόνες και για τις δύο κατευθύνσεις και για το σκέλος του WAN, γιατί μια σήραγγα που φτάνει στο LAN αλλά όχι στο διαδίκτυο αποτυγχάνει στην τρίτη δοκιμή. Μετά από μια αποτυχημένη προσπάθεια κοιτάξτε τους μετρητές της αλυσίδας, γιατί ένας κανόνας που δεν ταίριαξε ποτέ είναι διαφορετικό πρόβλημα από έναν που ταίριαξε και απέρριψε.
ip6tables -A FORWARD -i br0 -o tun0 -j ACCEPT
ip6tables -A FORWARD -i tun0 -o br0 -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT
ip6tables -A FORWARD -i tun0 -o wan0 -j ACCEPT
Μια παρενέργεια πιάνει όσους καταλήγουν να κατηγορούν τη σήραγγα. Η ενεργοποίηση της προώθησης κάνει τον πυρήνα να παραλείπει τη διαμόρφωση διεύθυνσης μέσω Router Advertisement, εκτός αν του πείτε διαφορετικά, και μια προεπιλεγμένη διαδρομή που μαθεύτηκε έτσι εξαφανίζεται μαζί της. Είτε καρφιτσώστε μια ρητή προεπιλεγμένη διαδρομή στη διεπαφή WAN, είτε ορίστε σκόπιμα το accept_ra σε 2 εκεί. Μετά από οποιαδήποτε αλλαγή, επιβεβαιώστε ότι ο δρομολογητής έχει ακόμη μια χρησιμοποιήσιμη διαδρομή IPv6 προς τα έξω πριν δοκιμάσετε ξανά τους πελάτες.
Απαντήστε στην ανακάλυψη γειτόνων όταν το ανάντη δεν δρομολογεί
Ο εξοπλισμός ανάντη μερικές φορές θεωρεί το εκχωρημένο /64 ως δικό του ζεύξης και αρνείται να δρομολογήσει οποιοδήποτε υποπρόθεμα προς το κουτί VPN. Όταν συμβεί αυτό, κάτι πρέπει να απαντά στις αιτήσεις γειτόνων για κάθε διεύθυνση πελάτη ξεχωριστά.
OpenVPN εκθέτει τη διεύθυνση που εκχωρήθηκε σε ένα hook client-connect, ώστε οι εγγραφές να ακολουθούν την πραγματική δεξαμενή αντί για λίστα που συντηρείται με το χέρι. Το hook προσθέτει το ip -6 neigh add proxy $ifconfig_pool_remote_ip6 dev eth0, και ένα αντίστοιχο hook client-disconnect το αφαιρεί. Χωρίς την αφαίρεση, ο πίνακας proxy παλιώνει και ένας μεταγενέστερος πελάτης μπορεί να κληρονομήσει εγγραφή για διεύθυνση που ποτέ δεν πήρε. Επιβεβαιώστε την κατάσταση με το ip -6 neigh show proxy.
Αντιμετωπίστε το proxying ως προσωρινή λύση. Μια στατική διαδρομή για το /64 της σήραγγας με κατεύθυνση τον δρομολογητή αντέχει τις αλλαγές πελατών και δεν χρειάζεται καθόλου hook κελύφους με δικαιώματα.
Ακολουθήστε τη διαδρομή προς τα έξω, άλμα-άλμα
Δοκιμάστε προς τα έξω σε τρία βήματα: πρώτα τη διεύθυνση σήραγγας του δρομολογητή, έπειτα έναν υπολογιστή στο LAN και τρίτο έναν δημόσιο προορισμό μέσω traceroute6. Η δεξαμενή αποδεικνύεται από το πρώτο, η προώθηση και το τείχος προστασίας του LAN από το δεύτερο, και η διαδρομή επιστροφής μέσω του ανάντη από το τρίτο. Κάθε αποτυχία περιορίζει την αναζήτηση σε μία συσκευή αντί να ανοίγει ξανά όλο τον σχεδιασμό.
Προσέξτε το MTU της σήραγγας, γιατί οι δρομολογητές IPv6 στη διαδρομή δεν θα κατατμήσουν για εσάς. Ένα υπερβολικά μεγάλο MTU εμφανίζεται ως σφάλμα packet-too-big και κολλημένο TLS αντί για καθαρή αποτυχία. Ορίστε το ρητά και δοκιμάστε με ωφέλιμο φορτίο κοντά στο όριο.