Γιατί μια διαδρομή πλήρους τούνελ αποκόπτει τον διακομιστή που τη μεταφέρει
Μια προεπιλεγμένη διαδρομή μέσα από το τούνελ συλλαμβάνει και τα εξωτερικά πακέτα που το μεταφέρουν. Καρφιτσώστε το τελικό σημείο με διαδρομή κεντρικού υπολογιστή και κρατήστε τις απαντήσεις του διακομιστή έξω από αυτήν.
Ενεργοποιήστε ένα πλήρες τούνελ και κάθε προορισμός ανήκει πλέον στη διεπαφή VPN, συμπεριλαμβανομένου του μηχανήματος που το τερματίζει. Τα εξωτερικά πακέτα που μεταφέρουν το τούνελ απευθύνονται σε αυτό το μηχάνημα, οπότε η διαδρομή καταλήγει να καταναλώνει τη μεταφορά από την οποία εξαρτάται. Μία επιπλέον συγκεκριμένη διαδρομή το λύνει, και ο λόγος αξίζει να κατανοηθεί. Χωρίς αυτόν τον λόγο, η επόμενη ανακατασκευή επαναφέρει το σφάλμα.
Μια διαδρομή που τρώει τη δική της μεταφορά
Η ενθυλάκωση τυλίγει κάθε πακέτο σε μια δεύτερη κεφαλίδα. Η εξωτερική απευθύνεται από την τοπική φυσική διεύθυνση στη δημόσια διεύθυνση του διακομιστή και πρέπει να διασχίσει τον φυσικό σύνδεσμο πριν μπορέσει να υπάρξει οποιοδήποτε τούνελ.
Τώρα αφήστε την αναζήτηση για αυτή τη δημόσια διεύθυνση να επιλέξει το τούνελ. Για να στείλει το πακέτο, το μηχάνημα πρέπει να το ενθυλακώσει, κάτι που απαιτεί διαδρομή προς την ίδια διεύθυνση, η οποία επιστρέφει το τούνελ. Οι πελάτες το χειρίζονται με έναν από δύο τρόπους. Ένας προσεκτικός αρνείται να εγκαταστήσει την προεπιλεγμένη διαδρομή και αναφέρει σφάλμα, ενώ ένας λιγότερο προσεκτικός αναφέρει επιτυχία και μετά δεν μετακινεί τίποτα. Η σιωπηλή αποτυχία είναι αυτή που κοστίζει ένα απόγευμα.
Η αντιστοίχιση του μεγαλύτερου προθέματος αποφασίζει την αναζήτηση πριν εξεταστεί οποιοδήποτε μετρικό, οπότε μια διαδρομή μίας διεύθυνσης υπερτερεί κάθε προεπιλεγμένης διαδρομής στο μηχάνημα. Αυτός είναι ολόκληρος ο μηχανισμός πίσω από την επιδιόρθωση.
Εγκαταστήστε την εξαίρεση πριν από την προεπιλεγμένη
Δημιουργήστε μια διαδρομή μίας διεύθυνσης για τον διακομιστή, με τη φυσική πύλη ως επόμενο άλμα, πριν μετακινηθεί η προεπιλεγμένη διαδρομή. Η σειρά έχει σημασία: η εγκατάσταση εκ των υστέρων σημαίνει να ζείτε με σπασμένο τούνελ όσο πληκτρολογείτε.
Οι περισσότεροι πελάτες το κάνουν χωρίς να τους ζητηθεί. OpenVPN αναζητά την απομακρυσμένη διεύθυνση και την καρφιτσώνει πριν ξαναγράψει την προεπιλεγμένη πύλη, και η επιλογή route-delay υπάρχει για πλατφόρμες όπου αυτή η ακολουθία συναγωνίζεται. Το wg-quick ακολουθεί εντελώς διαφορετικό δρόμο, σημαδεύοντας πακέτα και συμβουλευόμενο έναν κανόνα πολιτικής αντί να προσθέσει μια εξαίρεση. Διαφορετικοί μηχανισμοί, ίδια απαίτηση: το εξωτερικό πακέτο πρέπει να ξεφύγει από το τούνελ που δημιουργεί.
ip route add 203.0.113.10/32 via 192.168.1.1 dev eth0
ip route get 203.0.113.10
Η έξοδος της αναζήτησης είναι το τεστ αποδοχής. Πρέπει να ονομάζει τη φυσική συσκευή και το φυσικό επόμενο άλμα. Μια συσκευή τούνελ σε αυτή την απάντηση σημαίνει ότι λείπει η εξαίρεση ή ότι τοποθετήθηκε μετά από κάτι που την υπερισχύει.
Το κατοπτρικό είδωλο στον διακομιστή
Η ίδια παγίδα περιμένει στην άλλη πλευρά, ανεστραμμένη. Δώστε στον διακομιστή μια προεπιλεγμένη διαδρομή μέσω άλλου τούνελ, ή σπρώξτε του μια διαδρομή που καλύπτει τις δημόσιες διευθύνσεις των πελατών, και οι απαντήσεις του αποκτούν συνήθεια λάθος κατεύθυνσης.
Φανταστείτε έναν πελάτη που συνδέεται και στέλνει ένα αίτημα. Η απάντηση απευθύνεται στη δημόσια διεύθυνση αυτού του πελάτη, η οποία τώρα ταιριάζει με διαδρομή τούνελ, οπότε φεύγει από διαφορετική διεπαφή κουβαλώντας μια πηγή που ο πελάτης δεν κάλεσε ποτέ. Ο πελάτης μπορεί να λάβει αυτό το πακέτο και παρόλα αυτά να το απορρίψει, γιατί τίποτα δεν το συνδέει με το αίτημα που έστειλε. Ξεκινήστε από την απόφαση δρομολόγησης του διακομιστή και όχι από το χρονικό όριο του πελάτη, αφού μόνο μία από τις δύο δείχνει την πραγματική επιλογή.
ip route get 198.51.100.44 from 10.90.0.1
ip rule show
sudo tcpdump -ni any host 198.51.100.44
Υπάρχουν τρεις επιδιορθώσεις και δεν είναι ίσες. Το καρφίτσωμα της υπηρεσίας στη φυσική διεύθυνση ή η μετάφραση της πηγής κρύβουν και τα δύο την απόφαση δρομολόγησης αντί να τη διορθώνουν. Η αποστολή κίνησης απαντήσεων για τη δεξαμενή του τούνελ μέσω ξεχωριστού πίνακα διορθώνει την αιτία, και οι άλλες δύο είναι αποδεκτές μόνο όσο ο σχεδιασμός δρομολόγησης είναι παγωμένος.
Εξαιρέσεις που το τούνελ συνεχίζει να κλέβει
Μια χούφτα εργασιών χρειάζονται το ανοιχτό διαδίκτυο ακόμη και όταν το τούνελ κατέχει την προεπιλεγμένη διαδρομή, και καθεμία χρειάζεται τη δική της εξαίρεση. Ο ενημερωτής δυναμικού DNS είναι συνήθως ο πρώτος που σπάει.
Επιλύει τον πάροχο, ανοίγει μια σύνδεση και ανακαλύπτει ότι τα δικά του πακέτα ταξιδεύουν μέσα από τούνελ του οποίου η διεύθυνση άλλαξε πριν από δευτερόλεπτα, οπότε η ενημέρωση αποτυγχάνει ή δημοσιεύει τη λάθος διεύθυνση. Τρεις διέξοδοι: καρφιτσώστε τον πάροχο με διαδρομή κεντρικού υπολογιστή μέσω της φυσικής πύλης, εκτελέστε την ενημέρωση πριν ανέβει το τούνελ, ή δώστε στον ενημερωτή έναν πίνακα πολιτικής που το τούνελ δεν αγγίζει ποτέ. Ο συγχρονισμός ώρας έχει την ίδια έκθεση σε μια συσκευή που ξεκινά χωρίς resolver, και τα τελικά σημεία επικύρωσης πιστοποιητικών ανήκουν στη λίστα για τον ίδιο λόγο.
Μια εξαίρεση που δεν έγραψε κανείς είναι μια εξαίρεση που η επόμενη ανακατασκευή θα ρίξει σιωπηλά.
Αποδείξτε το μετά από επανασύνδεση, όχι πριν
Δοκιμάστε τρεις προορισμούς, όχι έναν: το τελικό σημείο, μια ιδιωτική διεύθυνση πίσω από το τούνελ και μια δημόσια διεύθυνση πέρα από αυτό. Μία μόνο επιτυχημένη αναζήτηση δεν λέει σχεδόν τίποτα για τις άλλες δύο.
ip route get 203.0.113.10
traceroute -n 203.0.113.10
ip route get 10.90.0.5
ip route get 1.1.1.1
Στη συνέχεια επανεκκινήστε τη σύνδεση, γιατί ένας πελάτης που ξαναχτίζει τον πίνακα του στην επανασύνδεση θα πετάξει μια διαδρομή που πληκτρολογήσατε με το χέρι. Με kill switch σε ισχύ, ελέγξτε ότι το τελικό σημείο επιτρέπεται, αλλιώς το τούνελ δεν μπορεί να επιστρέψει μετά από αλλαγή δικτύου και το σύμπτωμα μοιάζει με διακοπή. Αποθηκεύστε την εξαίρεση στο προφίλ ή στο αρχείο unit και όχι στο ιστορικό του shell, ώστε η επανασύνδεση να τη δημιουργήσει ξανά αντί να τη σβήσει.