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

Τι ζητά στην πραγματικότητα ο builder του VPN

Μια εφαρμογή VPN για Android δεν δίνει στην πλατφόρμα διεύθυνση διακομιστή. Χτίζει μια τοπική διεπαφή: διευθύνσεις και διαδρομές για τη σήραγγα, τους επιλυτές που πρέπει να χρησιμοποιούν οι εφαρμογές μέσα, και μετά η establish() επιστρέφει περιγραφέα αρχείου που η εφαρμογή διαβάζει και γράφει ως ακατέργαστα πακέτα IP. Το απομακρυσμένο τελικό σημείο δεν εμφανίζεται καθόλου σε αυτόν τον builder.

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

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

Δύο ερωτήματα DNS, όχι ένα

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

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

ΣτάδιοΠοιος επιλύειΔιαδρομήΠώς φαίνεται η αποτυχία
Αναζήτηση τελικού σημείουΗ εφαρμογή VPNΥποκείμενο δίκτυο, προστατευμένο socketΔεν συνδέεται ποτέ· καμία κίνηση στη διεπαφή tun
Έλεγχος ταυτότητας ομοτίμουΠελάτης και διακομιστήςΜεταφορά σήραγγαςΣυνδέεται και πέφτει· σφάλμα πιστοποιητικού ή κλειδιού
Αναζήτηση ιδιωτικού ονόματοςΕφαρμογές μέσω σήραγγαςΕπιλυτής μέσα στο tunΗ σήραγγα ανέβηκε, οι εσωτερικοί ιστότοποι δεν επιλύονται

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

Γιατί η εκκίνηση μπορεί να αδιεξοδιστεί

Πάντα ενεργό με ενεργό αποκλεισμό σημαίνει ότι η κίνηση εκτός VPN απορρίπτεται, μαζί με την κίνηση της εφαρμογής που κατέχει το VPN. Η διέξοδος είναι ρητή: η εφαρμογή καλεί protect() σε socket, που το δεσμεύει στο υποκείμενο δίκτυο ώστε να παρακάμπτει τη σήραγγα και να επιτρέπεται έξω. Κάθε πελάτης VPN πρέπει να το κάνει για τη δική του μεταφορά, αλλιώς δεν θα έφτανε ποτέ σε διακομιστή.

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

Ο χρόνος αποκαλύπτει την ίδια εξάρτηση σε ηπιότερες μορφές. Στην εκκίνηση πριν το πρώτο ξεκλείδωμα η συσκευή μπορεί να μην έχει ακόμη χρησιμοποιήσιμο δίκτυο· σε captive portal το δίκτυο υπάρχει αλλά μπλοκάρει τα πάντα εκτός από την πύλη· σε μετάβαση από Wi-Fi σε κινητό αλλάζει το υποκείμενο δίκτυο του προστατευμένου socket και ο πελάτης πρέπει να το αντιληφθεί και να επιλύσει ξανά. Κάθε ένα είναι συμβάν εκκίνησης και αξίζει σκόπιμη δοκιμή αντί να ανακαλυφθεί στις 3 τα ξημερώματα.

Γιατί το καρφίτσωμα της απάντησης δεν είναι διόρθωση

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

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

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

Σχεδιάσεις που επιβιώνουν από επανεκκίνηση

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

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

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

  • Η επίλυση του τελικού σημείου γίνεται στην εφαρμογή, έξω από τη σήραγγα, σε προστατευμένο socket.
  • Το πεδίο DNS του builder είναι για εφαρμογές μέσα στη σήραγγα, όχι για το τελικό σημείο του πελάτη.
  • Επιλυτής προσβάσιμος μόνο μέσω σήραγγας είναι αδιέξοδο, όχι αργή εκκίνηση.
  • Δοκιμάστε τελικό σημείο, έλεγχο ταυτότητας και ιδιωτική αναζήτηση χωριστά μετά από επανεκκίνηση.

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