Δύο άνθρωποι μου ζήτησαν τον περασμένο μήνα αντίθετα αποτελέσματα: ο ένας ήθελε το IPv6 να καλύπτεται από το VPN, ο άλλος ήθελε ο εκτυπωτής του γραφείου να συνεχίσει να λειτουργεί. Μία μόνο διαδρομή ::/0 δεν μπορεί να προσφέρει και τα δύο μόνη της. Το αν αυτή η διαδρομή ανήκει μέσα στη σήραγγα εξαρτάται από τρεις προϋποθέσεις, και η πρώτη την αποκλείει για τις περισσότερες εμπορικές εξόδους. Αν η έξοδος δεν μεταφέρει IPv6, η δρομολόγηση της προεπιλεγμένης διαδρομής προς αυτή κρύβει την κίνησή σας σε μια σήραγγα που δεν έχει πού να τη στείλει.

Τρεις προϋποθέσεις καθορίζουν την απάντηση

Η προεπιλεγμένη διαδρομή είναι μία γραμμή, ::/0, και ταιριάζει με κάθε προορισμό IPv6 χωρίς ειδικότερη διαδρομή (RFC 4291). Η εγκατάστασή της είναι εύκολη. Το αν πρέπει να το κάνετε καταλήγει σε τρεις προϋποθέσεις.

Προϋπόθεση πρώτη: η έξοδος στην οποία συνδέεστε έχει λειτουργικό IPv6 και είναι πρόθυμη να το προωθήσει. Προϋπόθεση δεύτερη: ο πελάτης σας μπορεί να κρατήσει διαδρομή προς το τελικό σημείο της σήραγγας, που συνήθως βρίσκεται μέσα στο εύρος που πρόκειται να δρομολογήσετε. Προϋπόθεση τρίτη: μπορείτε να ονομάσετε τους τοπικούς προορισμούς IPv6 που πρέπει να μείνουν έξω από τη σήραγγα.

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

What you seeDecision
Exit answers IPv6 probes, no local IPv6 devices to protectRoute ::/0 into the tunnel
Exit answers IPv6 probes, printer or NAS reachable by a global addressRoute ::/0, then give those prefixes a route of their own
Exit is IPv4-only inside the tunnelDo not route ::/0; block IPv6 on the client
Endpoint is reached over IPv6 and sits inside ::/0Install a host route for the endpoint first

Μεταφέρει πράγματι η έξοδος IPv6;

Μια διεπαφή σήραγγας με διεύθυνση IPv6 δεν αποδεικνύει τίποτα για την άλλη πλευρά. Πολλά εμπορικά προφίλ είναι μόνο IPv4 στο εσωτερικό: ο διακομιστής σας δίνει μια διεύθυνση v4 και απορρίπτει όλα τα άλλα. Εγκαταστήστε από πάνω μια προεπιλεγμένη διαδρομή από το AllowedIPs και ο πυρήνας θα στείλει ευχαρίστως IPv6 σε μια διεπαφή που το απέναντι άκρο δεν το βλέπει ποτέ.

Δοκιμάστε από τον πελάτη όσο η σήραγγα είναι ενεργή. Τα ping -6 -c 3 2001:4860:4860::8888 και ip -6 route get 2001:4860:4860::8888 απαντούν σε διαφορετικά ερωτήματα: αν επιστρέφει απάντηση και ποια συσκευή επέλεξε ο πυρήνας. Όταν το δεύτερο ονομάζει τη σήραγγά σας και το πρώτο δεν επιστρέφει τίποτα, το πρόβλημα είναι η έξοδος, όχι η διαδρομή.

Αν διαχειρίζεστε εσείς την έξοδο, η δοκιμή του πελάτη μπορεί να περάσει και η διαδρομή να καταλήξει σε αδιέξοδο. Επιβεβαιώστε το net.ipv6.conf.all.forwarding=1 στην πύλη και ότι το τείχος προστασίας της δέχεται πακέτα που προωθούνται έξω από τη σήραγγα. Ένα σωστά δρομολογημένο πακέτο σε μια έξοδο που αρνείται να αναμεταδώσει μοιάζει από την πλευρά του πελάτη ακριβώς με σφάλμα δρομολόγησης.

Μπορεί ο πελάτης να κρατήσει τη διαδρομή του προς το τελικό σημείο;

Αυτή είναι η περίπτωση που με έπιασε σε φορητό υπολογιστή με τελικό σημείο WireGuard μόνο IPv6. Η διεύθυνση του τελικού σημείου είναι μια συνηθισμένη καθολική διεύθυνση, άρα πέφτει μέσα στο ::/0. Δρομολογήστε ολόκληρο το πρόθεμα στη διεπαφή και τα πακέτα χειραψίας θα κυνηγήσουν τον εαυτό τους μέσα στη σήραγγα που ακόμη προσπαθούν να χτίσουν. Η σήραγγα δεν ανεβαίνει ποτέ, και τίποτα στην έξοδο του πελάτη δεν λέει γιατί.

Το wg-quick το χειρίζεται στο Linux. Αντλεί διαδρομές από το AllowedIPs, τις εγκαθιστά σε δικό του πίνακα και προσθέτει έναν κανόνα πολιτικής ώστε η κίνηση προς το τελικό σημείο να επιλύεται πρώτα μέσω του κύριου πίνακα: τον κανόνα suppress_prefixlength 0 που βρίσκετε στο ip -6 rule. Γι' αυτό το wg-quick up πετυχαίνει εκεί όπου ένα χειροκίνητο ip -6 route add default dev wg0 σας αποκόπτει.

Ελέγξτε και τις δύο καταστάσεις με το ip -6 route get <endpoint-v6>, πριν και αφού ανεβάσετε τη σήραγγα. Αν η απάντηση αλλάξει προς τη συσκευή σήραγγας, αφαιρέσατε τη διαδρομή που χρειάζεται η σήραγγα. Όταν γράφετε εσείς τις διαδρομές, προσθέστε μια διαδρομή υπολογιστή προς το τελικό σημείο μέσω της αρχικής πύλης, ή συνδεθείτε στο τελικό σημείο μέσω IPv4 και αφήστε το IPv6 στο φορτίο.

Τι πρέπει να μείνει έξω από τη σήραγγα;

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

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

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

Αν η απάντηση είναι όχι, μπλοκάρετέ το

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

Διαλέξτε ένα και γράψτε ποιο διαλέξατε. Δρομολογήστε την προεπιλεγμένη και δεχτείτε τους συμβιβασμούς παραπάνω, ή απενεργοποιήστε το IPv6 για όσο διαρκεί η σήραγγα. Η παράλειψη του προθέματος από το AllowedIPs δεν αρκεί από μόνη της, γιατί το λειτουργικό σύστημα κρατά τη δική του προεπιλεγμένη. Στο Linux η ωμή εκδοχή είναι sysctl -w net.ipv6.conf.all.disable_ipv6=1· η λεπτότερη ρίχνει το IPv6 έξω από τη σήραγγα με κανόνα τείχους προστασίας. Οι πελάτες τηλεφώνων διαθέτουν ρητό διακόπτη αποκλεισμού IPv6 που κάνει την ίδια δουλειά.

Επαληθεύστε το σαν διαρροή

Ανεβάστε τη σήραγγα και διαβάστε την κατάσταση αντί να εμπιστεύεστε τον διακόπτη. Το ip -6 route show default πρέπει να δείχνει μία προεπιλεγμένη, και το ip -6 route get για προορισμό έξω από το LAN σας πρέπει να ονομάζει τη συσκευή σήραγγας. Επαναλάβετε και τα δύο μετά από αποσύνδεση: μια προεπιλεγμένη που επιβιώνει της σήραγγας είναι το σφάλμα που ψάχνατε.

Έπειτα δοκιμάστε την άλλη κατεύθυνση. Από έναν κεντρικό υπολογιστή στο τοπικό δίκτυο, φτάστε στον πελάτη στην τοπική διεύθυνση IPv6 του. Αν αυτό σταματήσει να λειτουργεί, η τρίτη προϋπόθεση δεν ικανοποιήθηκε ποτέ, ό,τι κι αν ισχυριζόταν τότε ο πίνακας δρομολόγησης.

Γράψτε το αποτέλεσμα εκεί που θα το βρει ο επόμενος: ποια προθέματα μένουν τοπικά, γιατί, και τι κάνει ο πελάτης μετά από αποσύνδεση. Δύο γραμμές σε ένα runbook γλιτώνουν τον επόμενο μηχανικό από το να ξαναβρεί τον βρόχο του τελικού σημείου τα μεσάνυχτα.

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