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

Το σύμπτωμα έχει συνήθως τρεις αιτίες

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

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

Τι διαβάζει στην πραγματικότητα η αυτόματη υπηρεσία

Η αυτόματη υπηρεσία του Community είναι ένα περιτύλιγμα που σαρώνει τον ρυθμισμένο κατάλογο αυτόματης εκκίνησης, συνήθως το config-auto μέσα στην εγκατάσταση, και ξεκινά μια διεργασία OpenVPN για κάθε αντίστοιχο προφίλ που βρίσκει. Ένα προφίλ που είναι ορατό στο μενού GUI ενός χρήστη ζει αντ' αυτού κάτω από το προφίλ περιαγωγής αυτού του χρήστη, σε κατάλογο που ο λογαριασμός της υπηρεσίας δεν διαβάζει. Ο οδηγός υπηρεσίας των Windows περιγράφει αυτή την ανακάλυψη, και αξίζει να τον διαβάσετε πριν αντιγράψετε οτιδήποτε, γιατί ο κατάλογος προορισμού είναι ιδιότητα της εγκατάστασης και όχι σταθερή σύμβαση. Η αντιγραφή ενός αρχείου στον φάκελο του GUI δεν αλλάζει επομένως τίποτα για την υπηρεσία, και η αντιγραφή του σε κάθε φάκελο με όνομα config δημιουργεί διπλότυπα αντί για διόρθωση.

Get-Service OpenVPNService | Select-Object Status, StartType
Get-CimInstance Win32_Service | Where-Object Name -eq 'OpenVPNService' | Select-Object PathName, StartName
gci 'C:\Program Files\OpenVPN\config-auto'

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

Γιατί λειτουργεί η σύνδεση στην επιφάνεια εργασίας και όχι η εκκίνηση

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

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

Μια προγραμματισμένη εργασία που έχει οριστεί να εκτελείται ανεξάρτητα από το αν ένας χρήστης έχει συνδεθεί κληρονομεί έναν παρόμοιο περιορισμό. Μπορεί να ξεκινήσει με επιτυχία το εκτελέσιμο του GUI και παρόλα αυτά να παράγει μια διεργασία που δεν αποκτά ποτέ διαπιστευτήρια, οπότε η παρουσία μιας διεργασίας στη διαχείριση εργασιών δεν είναι απόδειξη λειτουργικής σήραγγας.

Επιλέξτε έναν ιδιοκτήτη και δοκιμάστε τον πραγματικό κύκλο ζωής

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

Get-Content 'C:\Program Files\OpenVPN\log\openvpn.log' -Tail 40
Get-WinEvent -LogName Application -MaxEvents 20 | Where-Object ProviderName -like '*OpenVPN*'

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

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