Περνάει πραγματικά η κίνηση μέσα από το VPN; Πώς να το επαληθεύσετε
Η αναζήτηση διαδρομής, το πρώτο άλμα, μια καταγραφή στον φυσικό προσαρμογέα και ένας έλεγχος διεύθυνσης από έξω απαντούν σε διαφορετικά μέρη της ερώτησης.
Δύο βλάβες φαίνονται ίδιες από το εικονίδιο του δίσκου: κίνηση που μπαίνει στη σήραγγα και κίνηση που την παρακάμπτει ήσυχα. Ο πελάτης δείχνει Connected και στις δύο περιπτώσεις, γιατί το Connected σημαίνει μόνο ότι η διεπαφή της σήραγγας υπάρχει και ότι ο πελάτης εγκατέστησε τις διαδρομές που ήθελε. Το αν ένα πακέτο μιας εφαρμογής χρησιμοποίησε αυτές τις διαδρομές είναι ξεχωριστό ερώτημα, που απαντιέται αλλού στη στοίβα. Τέσσερις μετρήσεις λύνουν το μεγαλύτερο μέρος — η αναζήτηση διαδρομής, το πρώτο άλμα, μια καταγραφή στον φυσικό προσαρμογέα και μια παρατήρηση από έξω — και η προβολή συνεδρίας στον διακομιστή καλύπτει τα υπόλοιπα.
Ξεκινήστε από τη διαδρομή που θα πάρει το πακέτο
Ο πίνακας δρομολόγησης είναι η απόφαση, οπότε ρωτήστε τον για έναν προορισμό αντί να τον διαβάσετε όλο και να μαντέψετε. Στο Linux, το ip route get ονομάζει τη διεπαφή και τη διεύθυνση προέλευσης που επέλεξε ο πυρήνας:
ip route get 203.0.113.10
ip route get 10.20.5.7Στα Windows, το Find-NetRoute -RemoteIPAddress 203.0.113.10 είναι πιο χρήσιμο από το route print -4 για τον ίδιο λόγο: αναφέρει τη διαδρομή που κέρδισε, όχι όλες τις διαδρομές που υπάρχουν. Διαβάστε πάντως τον πίνακα μία φορά για τη γραμμή 0.0.0.0. Ένα ζεύγος /1 εκεί σημαίνει ότι ένας πελάτης πλήρους σήραγγας ξανάγραψε την προεπιλεγμένη διαδρομή: η επιλογή redirect-gateway def1 του OpenVPN εγκαθιστά τα 0.0.0.0/1 και 128.0.0.0/1 μέσα από τη σήραγγα, κάτι που κερδίζει το υπάρχον 0.0.0.0/0 στην αντιστοίχιση του μεγαλύτερου προθέματος χωρίς να διαγράψει τη φυσική προεπιλεγμένη διαδρομή. Γι' αυτό δύο προεπιλεγμένες διαδρομές μπορούν να συνυπάρχουν ενώ όλα εξακολουθούν να πηγαίνουν στη σήραγγα.
Δύο λεπτομέρειες κάνουν τον πίνακα ψεύτη. Πρώτον, κοιτάξτε το πρόθεμα που αντιστοίχισε και όχι το πλήθος των προεπιλεγμένων διαδρομών, γιατί η μετρική της διεπαφής ή ένα ζεύγος /1 αποφασίζουν τον νικητή. Δεύτερον, μια σύνδεση που υπάρχει ήδη κρατά τη διαδρομή με την οποία στήθηκε· αφού σηκωθεί η σήραγγα, μια ανοιχτή συνεδρία μπορεί να συνεχίσει να χρησιμοποιεί την παλιά διαδρομή μέχρι να επαναφερθεί, και γι' αυτό η επανασύνδεση μοιάζει να διορθώνει πρόβλημα δρομολόγησης. Ένας πελάτης που τρέχει — ps ax | grep openvpn — αποδεικνύει μόνο ότι η διεργασία ξεκίνησε.
Ιχνηλατήστε ένα εσωτερικό και ένα δημόσιο όνομα
Η αναζήτηση διαδρομής δείχνει πρόθεση· η διαδρομή δείχνει παράδοση. Ιχνηλατήστε ένα όνομα που πρέπει να είναι εσωτερικό και ένα που δεν πρέπει, ενώ είστε συνδεδεμένοι, και συγκρίνετε το πρώτο άλμα:
traceroute intranet.corp.example
traceroute 1.1.1.1Το ίδιο πρώτο άλμα και για τα δύο σημαίνει ότι το εσωτερικό όνομα δεν μπήκε ποτέ στη σήραγγα και η βλάβη βρίσκεται από πάνω, συνήθως ένα όνομα που επιλύεται σε δημόσια διεύθυνση ή μια διαδρομή που δεν εγκαταστάθηκε ποτέ. Αν η εσωτερική κίνηση βγαίνει μέσω 10.8.0.1 ενώ η δημόσια βγαίνει μέσω 192.168.1.1, η διαχωρισμένη σήραγγα κάνει ακριβώς αυτό για το οποίο ρυθμίστηκε. Ένα ίχνος που φτάνει στην πύλη VPN και μετά επιστρέφει μόνο λήξεις χρόνου είναι συνήθως πρόβλημα διαδρομής επιστροφής ή τείχους προστασίας του διακομιστή, όχι διαδρομή προώθησης που λείπει.
Το φιλτραρισμένο ICMP κάνει αυτόν τον έλεγχο ψεύτη: αστέρια και στα δύο ίχνη μοιάζουν με νεκρή σήραγγα και συνήθως είναι τείχος προστασίας. Δοκιμάστε μια θύρα TCP όπου μπορείτε — traceroute -T -p 443 στο Linux — και θυμηθείτε ότι το ίχνος δεν λέει ποιος επιλυτής απάντησε: ένα όνομα μπορεί να επιλυθεί τοπικά και να είναι ακόμη προσβάσιμο μέσω της σήραγγας.
Καταγράψτε στον φυσικό προσαρμογέα, όχι στη σήραγγα
Ο φυσικός σύνδεσμος είναι το μόνο σημείο που δείχνει τι βλέπει πραγματικά το δίκτυο. Με τη σήραγγα σηκωμένη, μια συνεδρία προς το γραφείο θα πρέπει να εμφανίζεται ως κρυπτογραφημένο ωφέλιμο φορτίο που απευθύνεται στον διακομιστή VPN, όχι ως σύνδεση προς 10.20.5.7:
sudo tcpdump -ni eth0 udp port 53
sudo tcpdump -ni eth0 host 10.20.0.5Το πρώτο φίλτρο πιάνει την επίλυση ονομάτων που βγαίνει τοπικά, που είναι η πιο συνηθισμένη και η πιο ήσυχη διαρροή — η σελίδα φορτώνει ακόμη, απλώς ο επιλυτής είδε το ερώτημα. Το δεύτερο πιάνει απλή κίνηση προς εσωτερική διεύθυνση που θα έπρεπε να υπάρχει μόνο μέσα στη σήραγγα. Στα Windows, το pktmon κάνει την ίδια δουλειά χωρίς πρόγραμμα οδήγησης: pktmon filter add -p 53, μετά pktmon start --capture --pkt-size 128, μετά pktmon stop και pktmon format pktmon.etl -o capture.txt. Αυτές οι σημαίες διαφέρουν λίγο μεταξύ εκδόσεων των Windows, οπότε ελέγξτε το pktmon filter add /? πριν εμπιστευτείτε τη σύνταξη.
Καταγράψτε τη φυσική διεπαφή για να βρείτε διαρροές· μια καταγραφή στη σήραγγα περιέχει τα πακέτα που ήδη πιστεύετε ότι είναι εκεί, και σε έναν διακομιστή περιέχει δυσανάγνωστα εξωτερικά πακέτα των οποίων η πηγή είναι η πύλη. Οι μετρητές byte σε οποιαδήποτε διεπαφή περιγράφουν πακέτα, όχι προγράμματα· για να αποδώσετε κίνηση σε μια διεργασία χρειάζεται ένας παρακολουθητής που αντιστοιχίζει sockets σε διεργασίες.
Ρωτήστε μια εξωτερική υπηρεσία και μετά ρωτήστε την ξανά για κάθε εφαρμογή
Ο μόνος έλεγχος που αποδεικνύει την έξοδο είναι μια απάντηση από έξω: μια υπηρεσία που αντηχεί τη διεύθυνση προέλευσης που είδε. Τρέξτε την από ένα κέλυφος, όπου μπορείτε να διαλέξετε τη διεπαφή, και τρέξτε την δύο φορές:
sudo curl --interface tun0 https://example.net/ip
sudo curl --interface eth0 https://example.net/ipΔιαφορετικές απαντήσεις σας δίνουν απόδειξη και για τις δύο διαδρομές και έναν τρόπο να δοκιμάσετε μια συγκεκριμένη εφαρμογή: δεσμεύστε την, ή τρέξτε την σε χώρο ονομάτων δικτύου με μία διαδρομή, και δείτε ποια διεύθυνση καταγράφει το απομακρυσμένο άκρο. Οι ίδιες απαντήσεις είναι η ενδιαφέρουσα βλάβη: είτε η δέσμευση δεν λειτούργησε, είτε κάτι μεταξύ του κεντρικού υπολογιστή και του απομακρυσμένου άκρου ξαναγράφει τη διεύθυνση προέλευσης πριν φτάσει. Στα Windows, το curl --interface θέλει τη διεύθυνση του προσαρμογέα και όχι το όνομά του.
Ένα πρόγραμμα περιήγησης που αναφέρει τη διεύθυνση VPN αποδεικνύει το πρόγραμμα περιήγησης. Ένας πελάτης αλληλογραφίας, ένας διαχειριστής πακέτων, ένας πράκτορας αντιγράφων ασφαλείας ή ένα δεύτερο προφίλ προγράμματος περιήγησης μπορούν καθένα να ακολουθήσει διαφορετική διαδρομή, ειδικά όταν μια ρύθμιση διακομιστή μεσολάβησης ή μια διαδρομή διαχωρισμένης σήραγγας καλύπτει ένα από αυτά. Μια αλλαγή διεύθυνσης δεν είναι απόδειξη διαρροής από μόνη της: ένας εξισορροπητής φόρτου μπορεί να απαντήσει διαφορετικά ανάλογα με την έξοδο που είδε, οπότε συγκρίνετε την καταγεγραμμένη διεύθυνση προέλευσης, όχι τη σελίδα.
Χρησιμοποιήστε την προβολή του διακομιστή για να επιβεβαιώσετε τον ομότιμο
Ο διακομιστής απαντά σε άλλο ερώτημα: αν ένας ομότιμος είναι συνδεδεμένος, πόσα μετέφερε και αν η συνεδρία επανεκκίνησε. Ένας ομότιμος που είναι ενεργός στον διακομιστή ενώ οι μετρητές του πελάτη μόλις κινούνται σημαίνει ότι η κίνηση της εφαρμογής δεν μπαίνει στη σήραγγα, ό,τι κι αν έλεγε ο πίνακας του πελάτη. Ένας ομότιμος που μεταφέρει πολλά δεδομένα για έναν χρήστη που αναφέρει ότι τίποτα δεν δουλεύει είναι άλλη έρευνα.
Εδώ κρύβονται δύο παγίδες. Μια σήραγγα με μεταμφίεση κάνει κάθε ροή να φαίνεται ότι έρχεται από την πύλη, οπότε τα αρχεία καταγραφής και η λογιστική ανά πελάτη συμπίπτουν σε μία διεύθυνση. Και ο πελάτης αντιμετωπίζεται ως τοπικός κεντρικός υπολογιστής, οπότε το ερώτημα αν κάποιος αντιγράφει αρχεία μέσω του VPN απαντιέται από κίνηση κοινής χρήσης αρχείων στον διακομιστή ή από έλεγχο του κεντρικού υπολογιστή στον διακομιστή — η παρακολούθηση της σήραγγας δίνει τελικά σημεία και όγκο, όχι ονόματα αρχείων.
Ξεχωρίστε μια σχεδιαστική απόφαση από μια διαρροή
Δεν είναι όλα έξω από τη σήραγγα διαρροή. Η κίνηση τοπικού συνδέσμου και εκπομπής μένει τοπική εξ ορισμού, ένας εκτυπωτής που βρίσκεται μέσω multicast συνεχίζει να διαφημίζεται στο LAN, και το DHCP πρέπει να βγει τοπικά. Μια εφαρμογή δεσμευμένη σε συγκεκριμένη διεπαφή παρακάμπτει σκόπιμα τον πίνακα δρομολόγησης, και μόνο ένας κανόνας τείχους προστασίας, ένας χώρος ονομάτων ή μια διαδρομή πολιτικής το αλλάζει.
Το IPv6 αξίζει τη δική του γραμμή στη λίστα ελέγχου. Μια σήραγγα που μεταφέρει μόνο IPv4 αφήνει έναν κεντρικό υπολογιστή διπλής στοίβας με δεύτερη χρησιμοποιήσιμη διαδρομή, και ένας προορισμός διπλής στοίβας θα την προτιμήσει — και το DNS, αν ο επιλυτής είναι προσβάσιμος μέσω IPv6. Απενεργοποιήστε το IPv6 στον προσαρμογέα ή επιβεβαιώστε ότι η σήραγγα το μεταφέρει πριν θεωρήσετε ένα αποτέλεσμα IPv4 πλήρες.
Όταν οι έλεγχοι διαφωνούν, η διαφωνία συνήθως ονομάζει τη βλάβη:
| What you see | What it means | Next step |
|---|---|---|
| The route picks tun0 but the capture shows cleartext to 10.20.5.7 | Something bypassed the table: a bound app, a policy route or a session older than the tunnel | Reset the flow, check the app bind, check the ip rule list |
| The route picks eth0 for an internal name | The name resolves to a public address, or the route was never installed | Compare the resolved address with the routes the server pushes |
| The capture shows DNS to the LAN resolver | Resolver leak: data is tunneled, lookups are not | Point the resolver inside, or push it from the server |
| All four checks agree and one app still fails | Path selection is fine; suspect MTU, a per-app proxy or the far end | Test the same destination from a known-good client |
Μια σειρά που δουλεύει: αποθηκεύστε τον πίνακα δρομολόγησης πριν και μετά τη σύνδεση, ιχνηλατήστε ένα εσωτερικό και ένα δημόσιο όνομα, καταγράψτε DNS στον φυσικό προσαρμογέα, αντηχήστε τη διεύθυνση εξόδου από το κέλυφος για τη συγκεκριμένη εφαρμογή και μετά διαβάστε τον διακομιστή για όγκο. Αν τα τέσσερα πρώτα συμφωνούν, η σήραγγα μεταφέρει αυτό που νομίζετε και το υπόλοιπο πρόβλημα βρίσκεται από πάνω. Αν δύο από αυτά διαφωνούν, το ζεύγος που διαφωνεί είναι η βλάβη, όχι το εικονίδιο.