Το «Είναι το VPN ενεργό;» είναι στην πραγματικότητα τρεις ερωτήσεις σε μία πρόταση. Ποια από αυτές χρειάζεται ο κώδικάς σας είναι η πρώτη απόφαση, και είναι αυτή που παραλείπουν οι περισσότερες υλοποιήσεις. Υπάρχει τούνελ σε αυτή τη συσκευή, φεύγει η κίνηση προς αυτόν τον προορισμό μέσα από αυτό, ή απαντά το απομακρυσμένο άκρο με την ταυτότητα που περιμένετε. Διαλέξτε την ιδιότητα, μετά διαλέξτε το σήμα που τη μετρά, και τέλος πείτε στο αρχείο καταγραφής ποιο μετρήσατε πραγματικά.

Τρεις ιδιότητες, τρία σήματα

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

PropertySignal that answers itWhat it still leaves open
ExistenceThe platform's own connection state: RAS on Windows, NetworkManager on D-Bus on Linux, scutil on macOSTunnels of a type the platform does not manage, which includes most third-party clients
PathA route lookup for the one destination, or a scoped proxy or interface key that names the tunnelWhether the far end is the peer you trust
IdentityAn authenticated response from the far end, or a source-address policy applied on the serverWhich local interface carried the packets

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

Ύπαρξη: η δική της κατάσταση της πλατφόρμας

Τα Windows το απαντούν για εγγενή προφίλ μέσω του Remote Access Service API. Το RasEnumConnections απαριθμεί τι είναι συνδεδεμένο, το RasGetConnectStatus αναφέρει την κατάσταση μιας εγγραφής και το RasGetLinkStatistics προσθέτει ταχύτητα, μετρητές byte και ηλικία σύνδεσης. Τα όρια είναι το νόημα: το OpenVPN, το WireGuard και οι πελάτες κατασκευαστών δεν καταχωρούν ποτέ σύνδεση RAS, οπότε ένα υγιές τούνελ αυτού του τύπου εμφανίζει κενή λίστα και ο αφελής κώδικας το αναφέρει ως ανενεργό.

Οι επιφάνειες εργασίας Linux εκθέτουν την ίδια ιδιότητα μέσω του NetworkManager στο D-Bus, όπου το PropertiesChanged στο αντικείμενο σύνδεσης VPN μετατρέπει τον έλεγχο σε συμβάν και η ιδιότητα State αναφέρει πότε ο σύνδεσμος φτάνει σε κατάσταση συνδεδεμένος. Από ένα κέλυφος, το nmcli connection show --active διαβάζει τις ίδιες πληροφορίες, και αυτό θέλετε κατά την αποσφαλμάτωση. Το macOS κρατά αυτή τη λίστα στο πλαίσιο System Configuration, με το scutil ως όψη γραμμής εντολών. Και τα τρία περιγράφουν μια σύνδεση που διαχειρίζεται η πλατφόρμα, και και τα τρία σωπαίνουν για ένα τούνελ που δεν διαχειρίζεται.

Διαδρομή: πού πηγαίνει πραγματικά το πακέτο

Η αντιστοίχιση ονομάτων είναι η συντόμευση στην οποία καταφεύγουν όλοι πρώτα: απαριθμήστε τις διεπαφές, δοκιμάστε τη συμβολοσειρά απέναντι στο tun, το tap, το ppp ή το ipsec, και θεωρήστε ένα ταίριασμα απόδειξη. Είναι ευριστική, και το σύνολο διεπαφών μπορεί να φαίνεται ίδιο είτε κινείται κάτι μέσα από αυτό είτε όχι. Παλαιότερες εκδόσεις iOS απαντούσαν έτσι και οι νεότερες σταμάτησαν, επειδή οι ορατές διεπαφές δεν ξεχώριζαν πλέον τις δύο καταστάσεις.

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

Το Android έχει τη δική του εκδοχή της παγίδας: η μετάδοση vpn.connectivity φτάνει σε δέκτες που δηλώνονται στο manifest σε ορισμένες εκδόσεις και σε δέκτες καταχωρισμένους κατά την εκτέλεση σε άλλες. Αντιμετωπίστε την ως βέλτιστη προσπάθεια και κρατήστε έναν άμεσο ανιχνευτή πίσω της.

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

Ταυτότητα: ελέγξτε το απομακρυσμένο άκρο

Ένας βρόχος που στέλνει ηχώ ICMP στο απομακρυσμένο άκρο κάθε λίγα δευτερόλεπτα είναι ο φθηνότερος έλεγχος αυτού του είδους, και αποτυγχάνει προς χρήσιμη κατεύθυνση. Στοχεύστε τον σε μια διεύθυνση που υπάρχει μόνο μέσα στο ιδιωτικό δίκτυο, γιατί μια δημόσια απαντά μέσω οποιουδήποτε λειτουργικού ανερχόμενου καναλιού και δεν αποδεικνύει τίποτα. Όπου το ICMP φιλτράρεται, μια σύντομη σύνδεση TCP στη θύρα της υπηρεσίας κάνει την ίδια δουλειά.

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

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

Καταγράψτε την κατηγορία, όχι την ετυμηγορία

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

Η συμπίεσή τους σε ένα «VPN κάτω» στέλνει την αναφορά σε μια ομάδα που δεν μπορεί να το διορθώσει. Η κατηγορία είναι η χρήσιμη έξοδος· η ετυμηγορία είναι αυτό που το κάνει λάθος.

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