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

Δύο μηχανήματα, δύο ερωτήματα που πρέπει να απαντηθούν πρώτα

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

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

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

Η επιλογή από την πλευρά του διακομιστή: γεγονός ανά σύνδεση

Ένα σκριπτ client-connect εκτελείται στο πλαίσιο της διεργασίας του διακομιστή όταν συνδέεται ένας πιστοποιημένος πελάτης, και λαμβάνει τεκμηριωμένα στοιχεία σύνδεσης όπως το common name και τη διεύθυνση που εκχωρήθηκε. Είναι το σωστό σημείο για να γράψετε ένα τμήμα ρύθμισης ανά πελάτη, να επιβάλετε μια απόφαση πολιτικής ή να καταγράψετε κατάσταση που κατέχει ο διακομιστής.

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

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

Η επιλογή από την πλευρά του πελάτη: εργασία που πρέπει να τρέξει τοπικά

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

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

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

Γιατί το σπρώξιμο εκτελέσιμου κώδικα δεν είναι στις επιλογές

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

Η ενεργοποίηση εκτέλεσης σκριπτ τοπικά δεν αλλάζει αυτό. Η ρύθμιση script-security επιτρέπει τοπικά σκριπτ που επιλέξατε εσείς· δεν εξουσιοδοτεί τον διακομιστή να προμηθεύσει νέα.

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

Τι να επαληθεύσετε πριν εμπιστευτείτε οποιοδήποτε από τα δύο άγκιστρα

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

Δοκιμάστε με τον λογαριασμό που θα το εκτελέσει πραγματικά, τη στιγμή που θα εκτελεστεί πραγματικά. Το εγχειρίδιο openvpn(8) τεκμηριώνει και τις δύο οικογένειες αγκίστρων και τους περιορισμούς του push· η πλατφόρμα στην οποία αναπτύσσετε τεκμηριώνει αν τα εκθέτει καθόλου. Ένα σκριπτ που πετυχαίνει σε διαδραστικό τερματικό διαχειριστή είναι υπόθεση, όχι επαλήθευση.

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