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

Τι καρφιτσώνει ο κανόνας και τι επιστρέφει το DNS

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

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

Τρεις τρόποι με τους οποίους σπάει η αντιστοίχιση

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

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

Διαβάστε τον προορισμό που χρησιμοποιεί πραγματικά η εφαρμογή

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

getent ahosts api.example.com
dig +short api.example.com A
dig +short api.example.com AAAA
ss -tnp | grep -F api
ip route get 203.0.113.40

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

Επισκευάστε τον μηχανισμό, όχι το σύμπτωμα

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

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

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

Επαληθεύστε και τα δύο μισά της πρόθεσης

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

curl -sv --max-time 5 https://api.example.com/ -o /dev/null 2>&1 | grep -E 'Trying|Connected to'
curl -sS --max-time 5 https://public.example/ -o /dev/null -w '%{http_code}\n'

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

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