Επιλεκτική σήραγγα βάσει εφαρμογής ή βάσει προορισμού: ποια να διαλέξετε
Ο ένας κανόνας ακολουθεί τη διεργασία, ο άλλος τη διεύθυνση. Διαλέξτε με βάση τι πρέπει να ελέγξετε και μετά δοκιμάστε μια βοηθητική διεργασία και μια δεύτερη εφαρμογή στο ίδιο υποδίκτυο.
Η επιλεκτική σήραγγα βάσει εφαρμογής και βάσει προορισμού δεν είναι δύο ρυθμίσεις για την ίδια δουλειά. Η μία ρωτά ποια διεργασία στέλνει το πακέτο· η άλλη ρωτά πού πηγαίνει αυτό το πακέτο. Ένας κανόνας στημένος για την πρώτη ερώτηση αποτυγχάνει σιωπηλά όταν η κίνηση έρχεται από βοηθητική διεργασία, και ένας κανόνας για τη δεύτερη αποτυγχάνει όταν ένα όνομα κεντρικού υπολογιστή επιλύεται σε διεύθυνση που δεν καταχωρίσατε ποτέ. Διαλέξτε το αντικείμενο που ταιριάζει στην απαίτηση και αποδείξτε το με δύο δοκιμαστικά πακέτα: ένα που πρέπει να χρησιμοποιεί τη σήραγγα και ένα που δεν πρέπει.
Οι δύο κανόνες δρουν σε διαφορετικά επίπεδα
Ένας κανόνας εφαρμογής επιβάλλεται πάνω από το επίπεδο δικτύου, απέναντι στην ταυτότητα που αποδίδει το λειτουργικό σύστημα στον αποστολέα. Στο Android αυτή είναι το UID πίσω από ένα πακέτο, και η υπηρεσία VPN αποφασίζει ανά UID αν η κίνηση μπαίνει στη σήραγγα. Δεν ερωτάται τίποτα για τον προορισμό, οπότε η επιλεγμένη εφαρμογή φτάνει παντού και καμία άλλη εφαρμογή δεν φτάνει στο εσωτερικό δίκτυο.
Ένας κανόνας προορισμού επιβάλλεται στο ίδιο το πακέτο. Η διεπαφή της σήραγγας κατέχει ένα σύνολο προθεμάτων, ο πίνακας δρομολόγησης στέλνει εκεί την ταιριαστή κίνηση και η διεργασία αποστολής είναι άσχετη. Γι' αυτό ένας κανόνας προορισμού καλύπτει μια υπηρεσία, έναν εκτυπωτή ή μια μαζική εργασία που κανείς δεν θυμήθηκε να καταχωρίσει, και γι' αυτό δεν μπορεί να εκφραστεί ως ακριβώς αυτό το πρόγραμμα σε πλατφόρμα της οποίας ο πελάτης δεν κοιτά ποτέ τη διεργασία.
Οι κανόνες εφαρμογών ταιριάζουν σε κινητούς πελάτες και διαχειριζόμενους πράκτορες
Το Android εκθέτει την επιλογή άμεσα: VpnService.Builder.addAllowedApplication() και addDisallowedApplication() δέχονται ονόματα πακέτων και επιβάλλουν την απόφαση ανά UID, όπως περιγράφεται στον οδηγό προγραμματιστή VPN του Android. Το iOS έχει αντίστοιχο μέσω κανόνων VPN ανά εφαρμογή με κλειδιά αναγνωριστικά δέσμης, που συνήθως διανέμονται από προφίλ MDM και όχι πληκτρολογούνται με το χέρι.
Οι πελάτες επιφάνειας εργασίας είναι το αδύναμο σημείο. Οι περισσότεροι πελάτες VPN για Windows και macOS δρομολογούν με βάση τον προορισμό και δεν προσφέρουν καθόλου επιλογέα ανά διεργασία, γιατί ο οδηγός της σήραγγας βλέπει πακέτα, όχι διεργασίες. Αν το σχέδιό σας εξαρτάται από σήραγγα για μία εφαρμογή σε φορητό υπολογιστή, ελέγξτε τις πραγματικές δυνατότητες του πελάτη πριν σχεδιάσετε γύρω από αυτό· ίσως διαλέγετε ανάμεσα σε λίστα προορισμών και δεύτερο μηχάνημα.
Μια συνέπεια που οι άνθρωποι χάνουν: δεν μπορείτε να μιμηθείτε κανόνα εφαρμογής με δρομολόγια σε αυτές τις πλατφόρμες. Η προσθήκη δρομολογίου κεντρικού υπολογιστή για τον διακομιστή της εφαρμογής στέλνει την κίνηση όλων προς αυτόν τον διακομιστή μέσα στη σήραγγα, μαζί με το πρόγραμμα περιήγησης και τον ενημερωτή.
Οι κανόνες προορισμού ταιριάζουν σε λίστες υποδικτύων και προσβασιμότητα τοποθεσιών
Το WireGuard κάνει το μοντέλο ρητό. Το AllowedIPs είναι δρομολόγηση κρυπτοκλειδιού: ένα εσωτερικό πακέτο του οποίου ο προορισμός πέφτει μέσα στη λίστα ενός ομοτίμου κρυπτογραφείται προς αυτό το ομότιμο, και οτιδήποτε άλλο βγαίνει χωρίς κρυπτογράφηση από την κανονική διαδρομή. Δεν υπάρχει διεργασία να ονομάσετε και καμία ασάφεια για το τι περιλαμβάνεται.
Το OpenVPN φτάνει στο ίδιο σημείο μέσω του πίνακα δρομολογίων που ωθείται. Το route-nopull σταματά τον διακομιστή να υπαγορεύει δρομολόγια, και μετά ένα route 10.20.0.0 255.255.0.0 vpn_gateway στην πλευρά του πελάτη καλύπτει ακριβώς το πρόθεμα του γραφείου. Το IPv6 είναι ξεχωριστή δήλωση σε κάθε έναν από αυτούς τους πελάτες, και το να το ξεχάσετε είναι ο πιο συνηθισμένος τρόπος διαρροής γύρω από ένα σωστό στη θέα διαχωρισμό IPv4.
Ένα όνομα κεντρικού υπολογιστή δεν είναι δρομολόγιο. Αν το προφίλ προσφέρει πεδίο τομέα, αντιμετωπίστε το ως όνομα που ο πελάτης επιλύει μία φορά, όχι ως μόνιμο εύρος διευθύνσεων· τα δίκτυα παράδοσης περιεχομένου και οι εξισορροπητές φόρτου θα δώσουν αύριο άλλες διευθύνσεις.
Πού σπάνε και τα δύο μοντέλα: βοηθοί, κοινόχρηστες υπηρεσίες, επιλυτές
Οι βοηθητικές διεργασίες σπάνε τους κανόνες εφαρμογών με τρόπο που μοιάζει με βλάβη διακομιστή. Ο ενημερωτής ενός προγράμματος περιήγησης, ένας αναφορέας κατάρρευσης, μια υπηρεσία συγχρονισμού που τρέχει ως SYSTEM και ένα WebView ενσωματωμένο σε άλλο πακέτο είναι όλα ξεχωριστές ταυτότητες, οπότε η σήραγγα για το πρόγραμμα περιήγησης μπορεί να αφήσει το πραγματικό αίτημα έξω από τη σήραγγα. Το αντίστροφο είναι εξίσου μπερδευτικό: μια εξαιρεμένη εφαρμογή που καλεί μια κοινόχρηστη βιβλιοθήκη μέσα σε διεργασία υπό σήραγγα έχει ακόμη την κίνησή της μέσα στη σήραγγα.
Οι κανόνες προορισμού σπάνε σε κοινόχρηστες υπηρεσίες και σε ονόματα. Οι κοινόχρηστοι φάκελοι, οι εκτυπωτές, το εσωτερικό DNS και ο διακομιστής αδειών ζουν σε διευθύνσεις, οπότε μια σήραγγα μίας εφαρμογής δίνει πρόσβαση στο πρόγραμμα περιήγησης ενώ ο αντιστοιχισμένος δίσκος μένει νεκρός. Αυτή η διαφορά κάλυψης δεν είναι σφάλμα σε κανένα μοντέλο, αλλά είναι ο λόγος που μια σήραγγα μίας εφαρμογής τόσο συχνά παράγει το VPN ανεβαίνει και ο κοινόχρηστος φάκελος χάθηκε.
Οι επιλυτές κόβουν και τα δύο. Αν ο πελάτης ορίσει εσωτερικούς διακομιστές DNS αλλά το λειτουργικό σύστημα χρησιμοποιεί DNS μέσω HTTPS προς δημόσιο επιλυτή, η απάντηση έρχεται από έξω από τη σήραγγα και ο κανόνας προορισμού μπορεί να μην ταιριάξει ποτέ. Ελέγξτε ποιος επιλυτής απάντησε πραγματικά πριν συμπεράνετε ότι ο κανόνας είναι λάθος, και επιβεβαιώστε στην πλευρά του πελάτη αν εγκατέστησε καθόλου τον επιλυτή της σήραγγας. Ένας διαχωρισμός που αφήνει το DNS έξω από τη σήραγγα φαίνεται τέλειος στον πίνακα δρομολόγησης και αποτυγχάνει ακόμη σε κάθε εσωτερικό όνομα.
Οδηγός εκτέλεσης: διάλεξε, εφάρμοσε, επαλήθευσε
Ξεκινήστε από την απαίτηση, όχι από το μενού. Αν ο στόχος είναι μόνο αυτή η εφαρμογή να χρησιμοποιεί τη σήραγγα, χρειάζεστε κανόνες εφαρμογών και πλατφόρμα που τους υποστηρίζει. Αν ο στόχος είναι αυτά τα δίκτυα να είναι προσβάσιμα μέσω της σήραγγας, χρειάζεστε προθέματα. Αν η απάντηση είναι και τα δύο, υλοποιήστε τα ως δύο ξεχωριστούς ελέγχους και σημειώστε ποιος κατέχει ποια αποτυχία.
Εφαρμόστε την πιο στενή μορφή που μπορείτε να εκφράσετε και μετά επαληθεύστε ρωτώντας τον πίνακα δρομολόγησης αντί για το εικονίδιο κατάστασης του πελάτη:
ip route get 10.20.30.40
ip -6 route get 2001:db8:10::40
wg show wg0 allowed-ips
Get-NetRoute -DestinationPrefix 10.20.0.0/16
Find-NetRoute -RemoteIPAddress 10.20.30.40
Οι δύο πρώτες γραμμές ονομάζουν τη διεπαφή που θα χρησιμοποιούσε ένας πραγματικός προορισμός· το wg show εκτυπώνει τη διαμορφωμένη λίστα προθεμάτων· στα Windows το Find-NetRoute απαντά στην ίδια ερώτηση που θα απαντήσει η στοίβα όταν σταλεί το πακέτο. Αν η διεπαφή είναι η σήραγγα, ο κανόνας ταίριαξε.
Μετά δοκιμάστε ένα δεύτερο πακέτο που πρέπει να εξαιρεθεί, από άλλη εφαρμογή, προς τον ίδιο προορισμό. Καταγράψτε στο δελτίο την έκδοση του πελάτη, τον τύπο κανόνα, τη λίστα προθεμάτων ή πακέτων και τα δύο αποτελέσματα που παρατηρήθηκαν. Αυτό το ζεύγος αποτελεσμάτων λέει στον επόμενο μηχανικό αν η πολιτική είναι λάθος ρυθμισμένη ή αν η κίνηση δεν ανήκε ποτέ σε αυτήν.