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

Το τριγκερ είναι κανόνας κύκλου ζωής, όχι κανόνας δρομολόγησης

Add-VpnConnectionTriggerApplication συνδέει μια διαδρομή εκτελέσιμου με ένα όνομα προφίλ. Όταν ξεκινά αυτή η διεργασία, ο Διαχειριστής συνδέσεων απομακρυσμένης πρόσβασης καλεί το προφίλ, και όταν τελειώσει η συνθήκη του τριγκερ, η σύνδεση μπορεί να πέσει. Τίποτα σε αυτή την ανταλλαγή δεν επιθεωρεί sockets. Το cmdlet απαιτεί αναβαθμισμένο shell, την πλήρη διαδρομή προς το δυαδικό και -Force όταν αντικαθιστάτε μια υπάρχουσα καταχώριση. Επιβεβαιώστε ότι η συσχέτιση επιβίωσε με Get-VpnConnectionTrigger αντί να βασίζεστε στο μήνυμα· η αναφορά της Microsoft για το Add-VpnConnectionTriggerApplication παραθέτει τις παραμέτρους και τα παραδείγματα.

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

Add-VpnConnectionTriggerApplication -Name "APP_VPN" -ApplicationID "C:\Program Files\Vendor\app.exe" -Force
Get-VpnConnectionTrigger -Name "APP_VPN" | Format-List *
Get-VpnConnection -Name "APP_VPN" | Format-List Name,ConnectionStatus,SplitTunneling,AllUserConnection

Η διαχωρισμένη σήραγγα αποφασίζει τι διασχίζει τη σήραγγα

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

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

Set-VpnConnection -Name "APP_VPN" -SplitTunneling $true
Get-VpnConnection -Name "APP_VPN" | Select-Object SplitTunneling
Get-NetRoute -InterfaceAlias "APP_VPN" | Sort-Object DestinationPrefix

Πού μια δρομολογημένη διαίρεση παύει να απομονώνει την εφαρμογή σας

Η συνήθης αποτυχία είναι ένας προορισμός που δεν εμφανίζεται ποτέ στη λίστα διαδρομών της σήραγγας. Μια εφαρμογή που συνδέεται σε μία διεύθυνση και μετά κάνει streaming από CDN, ή επιλύει δώδεκα περιστρεφόμενα τελικά σημεία, θα βάλει μερικές συνδέσεις στη διεπαφή VPN και τις υπόλοιπες στο Wi-Fi. Το IPv6 είναι ξεχωριστός πίνακας, οπότε ένα προφίλ που σπρώχνει μόνο προθέματα IPv4 μπορεί να φαίνεται σωστό ενώ η κίνηση IPv6 της εφαρμογής μένει τοπική.

Δύο μικρότερα φαινόμενα μετρούν εξίσου. Κερδίζει η μεγαλύτερη αντιστοίχιση προθέματος, οπότε μια πιο συγκεκριμένη διαδρομή on-link, ένα /32 που σπρώχνεται για κεντρικό υπολογιστή διαχείρισης ή το υποδίκτυο ενός δεύτερου προσαρμογέα μπορούν να νικήσουν τη σήραγγα ακριβώς για τη διεύθυνση που σας ενδιαφέρει. Και η επίλυση ονομάτων γίνεται πριν από τη δρομολόγηση: αν οι διακομιστές DNS του προφίλ ή ένας κανόνας NRPT δεν καλύπτουν το όνομα, η εφαρμογή μπορεί να το επιλύσει μέσω του φυσικού προσαρμογέα και μετά να καλέσει μια διεύθυνση που δεν ήταν ποτέ μέσα στα προθέματα της σήραγγας.

Τρεις μορφές, και τι αγοράζει καθεμία

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

ShapeWhat starts the tunnelWhat enters itPick it when
Trigger plus routed splitProcess startOnly pushed or added prefixesThe app's endpoints are stable prefixes and the host should stay direct
Trigger plus default routeProcess startEverything, machine-wideYou need one exit for all traffic and accept the wider scope
Separate VM or deviceGuest boot or loginEverything inside that guestThe app's destinations rotate, or the host must keep its own public address

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

Επαληθεύστε το ζεύγος σε ένα πέρασμα

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

$app = Get-Process app | Select-Object -First 1
Get-VpnConnection -Name "APP_VPN" | Select-Object ConnectionStatus
Get-NetTCPConnection -OwningProcess $app.Id -State Established | Select-Object RemoteAddress,RemotePort
Find-NetRoute -RemoteIPAddress 203.0.113.10

Find-NetRoute ονομάζει τη διεπαφή και το επόμενο άλμα που θα μετέφερε αυτόν τον προορισμό. Ένα φυσικό ψευδώνυμο εκεί σημαίνει ότι η σήραγγα είναι ανεβασμένη και άσχετη για εκείνη τη ροή: ελέγξτε τα προθέματα που σπρώχτηκαν, μετά τις πιο συγκεκριμένες διαδρομές, μετά το IPv6. Αν η κατάσταση δεν αλλάζει καθόλου, το τριγκερ δεν ενεργοποιήθηκε, και η διαδρομή του εκτελέσιμου, το εύρος του προφίλ και το επιχειρησιακό αρχείο του πελάτη VPN είναι τα τρία σημεία για έλεγχο.

Καθαρίστε σωστά ώστε η επόμενη δοκιμή να είναι έντιμη

Αφαιρέστε με την αντίστροφη σειρά από αυτή που φτιάξατε: πρώτα το τριγκερ της εφαρμογής, μετά το προφίλ. Η διαγραφή του προφίλ ενώ μένει το τριγκερ αφήνει μια κρεμασμένη συσχέτιση που κάνει την επόμενη προσπάθεια μπερδεμένη, και Remove-VpnConnection -Force δεν καθαρίζει πάντα μια καταχώριση τηλεφωνικού καταλόγου που δημιουργήθηκε έξω από τα cmdlet.

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

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

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