Ένα Pi, δύο στιγμιότυπα OpenVPN: τι διαβάζει κάθε μονάδα
Δύο δαίμονες OpenVPN σε ένα Pi διαβάζουν διαφορετικά αρχεία διαμόρφωσης και βγαίνουν από διαφορετικά hooks. Χαρτογραφήστε κάθε στιγμιότυπο και μετά ελέγξτε τη διαδρομή του ωφέλιμου φορτίου ξεχωριστά.
Μετρήστε τις διεργασίες OpenVPN πριν αγγίξετε οποιοδήποτε προφίλ. Ένα Pi που δέχεται περιοδεύοντες χρήστες και ταυτόχρονα καλεί μια υπηρεσία upstream εκτελεί δύο δαίμονες, και ο καθένας διαβάζει ένα αρχείο διαμόρφωσης που επιλέγεται από το όνομα στιγμιότυπου που πληκτρολογήσατε. Έπειτα τα συσκευασμένα πρότυπα δίνουν σε κάθε δαίμονα τον δικό του κατάλογο εργασίας, το δικό του αρχείο κατάστασης εκτέλεσης και τη δική του συσκευή σήραγγας. Αν κάνετε λάθος αυτόν τον διαχωρισμό, θα περάσετε ένα βράδυ αλλάζοντας μια σωστή ρύθμιση μέσα σε ένα αρχείο που η διεργασία που τρέχει δεν ανοίγει ποτέ.
Κάθε όνομα στιγμιότυπου επιλέγει το δικό του αρχείο
Στα αρχεία μονάδας που διανέμονται με το OpenVPN 2.6, τα ορίσματα εκκίνησης φέρουν ένα σύμβολο θέσης στιγμιότυπου που συμπληρώνεται από το κείμενο μετά το σύμβολο @. Το πρότυπο διακομιστή εκτελείται από τον κατάλογο διαμόρφωσης του διακομιστή και επιλύει το όρισμά του ως προς %i.conf εκεί, ενώ το πρότυπο πελάτη κάνει το ίδιο από τον κατάλογο του πελάτη. Άρα το [email protected] διαβάζει admits.conf στον κατάλογο του διακομιστή και το [email protected] διαβάζει uplink.conf στον κατάλογο του πελάτη, και κανένα από τα δύο ονόματα δεν έχει νόημα στον άλλο κατάλογο.
Επιβεβαιώστε την αντιστοίχιση στο ίδιο το μηχάνημα αντί να υποθέσετε ότι το πακέτο κράτησε τις προεπιλογές του upstream. Ένα drop-in της διανομής επιτρέπεται να αντικαταστήσει εντελώς τον κατάλογο εργασίας ή το όρισμα διαμόρφωσης.
systemctl cat [email protected]
systemctl cat [email protected]Διαβάστε τη γραμμή WorkingDirectory και το όρισμα διαμόρφωσης σε αυτή την έξοδο, γιατί η ενεργοποιημένη μονάδα είναι το μόνο που αποφασίζει ποιο αρχείο φορτώνεται. Ένα drop-in που προσθέτει --config στο ExecStart κερδίζει το πρότυπο ακόμη και όταν η διαδρομή του προτύπου φαίνεται σωστή. Ζητήστε τις διαδρομές του τμήματος και του drop-in όταν θέλετε να μάθετε αν παίζει τοπική παράκαμψη. Αν και οι δύο ρόλοι καταλήγουν σε ένα αρχείο, έχετε μία διεργασία που προσπαθεί να είναι διακομιστής και πελάτης, και η μεταγενέστερη επιλογή σε εκείνο το αρχείο κερδίζει σιωπηλά.
Η τοπική μεταφορά και το προωθημένο ωφέλιμο φορτίο χτυπούν διαφορετικά hooks
Η κρυπτογραφημένη σύνδεση του διακομιστή με κάθε περιοδεύοντα χρήστη δημιουργείται στο ίδιο το Pi, οπότε οι εξωτερικές απαντήσεις του βγαίνουν από το τοπικό hook εξόδου. Η σύνδεση του πελάτη με τον peer του upstream είναι επίσης τοπικά παραγόμενη έξοδος, παρόλο που φτάνει σε απομακρυσμένο δίκτυο. Το προωθημένο ωφέλιμο φορτίο είναι τρίτη κατηγορία, και ο πυρήνας το αντιστοιχίζει μόνο αφού έχει ήδη επιλέξει εξερχόμενη συσκευή για το πακέτο.
| Flow | Hook that sees it | What to inspect |
|---|---|---|
| Roaming user handshakes to the server | Local input and local output | Listener socket, bind address, rule admitting the UDP port |
| User payload leaving through the upstream tunnel | Forward | IPv4 forwarding switch, selected route, permission rule, any translation |
| Pi's own connection to the upstream peer | Local output | Underlay route to the provider endpoint, not the tunnel route |
Ένας κανόνας που αντιστοιχίζει εξερχόμενη διεπαφή μέσα σε αλυσίδα προώθησης μπορεί να επιτρέψει ή να απορρίψει ένα πακέτο που η δρομολόγηση έχει ήδη αναθέσει σε αυτή τη διεπαφή, αλλά ποτέ δεν επιλέγει τη διεπαφή. Όταν ένας κεντρικός υπολογιστής τερματίζει μια σήραγγα και ξεκινά μια άλλη, η πολιτική που στέλνει το ωφέλιμο φορτίο του χρήστη στη σήραγγα upstream και η πολιτική που προστατεύει τις δικές του κρυπτογραφημένες απαντήσεις του Pi είναι ξεχωριστές αποφάσεις. Τυχαίνει να προσγειώνονται στην ίδια φυσική κάρτα δικτύου, γι' αυτό μπερδεύονται.
Αυτή η διάκριση εξηγεί μια συνηθισμένη μισή αποτυχία. Οι χρήστες συνδέονται, η χειραψία ολοκληρώνεται, και η κίνησή τους βγαίνει ακόμη λάθος δρόμο, γιατί η χειραψία ήταν τοπική και το ωφέλιμο φορτίο ήταν προωθημένο και μόνο ένα από τα δύο δοκιμάστηκε ποτέ.
Μια εισαγόμενη διαδρομή μπορεί να καταπιεί τις απαντήσεις στους χρήστες σας
Η ρύθμιση ασφαλείας του προφίλ πελάτη αποφασίζει τι επιτρέπεται να σπρώξει το upstream στον πίνακα δρομολόγησης του Pi, και η ευρεία ανακατεύθυνση είναι η επιλογή που μετατρέπει έναν λειτουργικό κεντρικό υπολογιστή δύο ρόλων σε χαλασμένο. Αν η διαδρομή που σπρώχνεται καλύπτει τις δημόσιες διευθύνσεις των περιοδευόντων χρηστών, οι απαντήσεις που δημιουργεί ο διακομιστής προς αυτούς μπορεί να ακολουθήσουν τη νέα διαδρομή μέσα στη σήραγγα upstream αντί να βγουν από το underlay. Οι άνθρωποι συχνά επιβεβαιώνουν ότι η σήραγγα προς τον πάροχο λειτουργεί ακόμη και σταματούν εκεί, γιατί αυτή η κίνηση είναι η ίδια η μεταφορά της σήραγγας και συνεχίζει να ρέει ενώ όλα τα άλλα συμπεριφέρονται λάθος.
Η πολιτική με βάση την πηγή ή το σημάδι είναι ο τρόπος με τον οποίο τα δύο ρεύματα μένουν χωριστά. Η επιλογή σημαδιού του Linux στο OpenVPN σημαδεύει τα δικά του κρυπτογραφημένα πακέτα του δαίμονα με σημάδι τείχους προστασίας, το οποίο ένας κανόνας δρομολόγησης μπορεί στη συνέχεια να στείλει σε αποκλειστικό πίνακα. Οι διευθύνσεις πηγής λειτουργούν εξίσου καλά όταν οι εξωτερικές απαντήσεις του διακομιστή βγαίνουν πάντα από μία διεύθυνση underlay. Και οι δύο προσεγγίσεις χρειάζονται έγκυρες διαδρομές στον πίνακα που επιλέγουν και μια εξαίρεση για το τελικό σημείο του παρόχου, αλλιώς η ίδια η σήραγγα σταματά να ανεβαίνει.
Ρωτήστε τον πυρήνα ποια διαδρομή θα έπαιρνε πραγματικά μια απάντηση πριν γράψετε οποιονδήποτε κανόνα. Οι διευθύνσεις παρακάτω είναι σύμβολα θέσης για μια διεύθυνση underlay του Pi και τη δημόσια διεύθυνση ενός περιοδεύοντος χρήστη.
ip rule show
ip route get 198.51.100.7 from 192.0.2.10Επαληθεύστε τον διαχωρισμό και μετά σταματήστε μία ρόλο κάθε φορά
Δοκιμάστε τρία ρεύματα ξεχωριστά, γιατί μια λειτουργική χειραψία δεν αποδεικνύει τίποτε για τα άλλα δύο. Δεχτείτε μια νέα εισερχόμενη σύνδεση, στείλτε μία επιτρεπόμενη εφαρμογή μέσα από την έξοδο upstream και επιβεβαιώστε ότι και οι δύο διεργασίες φτάνουν ακόμη στους δικούς τους peers.
Έπειτα σταματήστε τον ρόλο του πελάτη και δείτε τι κρατά ο ρόλος του διακομιστή. Αυτός είναι ο φθηνότερος τρόπος να βρείτε έναν κανόνα διαδρομής ή σημαδιού που προοριζόταν για ένα στιγμιότυπο και εφαρμόστηκε και στα δύο.
systemctl stop [email protected]
systemctl status [email protected] --no-pager
ss -lunp | grep openvpn
journalctl -u [email protected] -n 20 --no-pagerΑυτό που θέλετε να δείτε είναι ο ακροατής ακόμη δεσμευμένος, η συσκευή σήραγγας ακόμη παρούσα και το ημερολόγιο ελεύθερο από νέα σφάλματα ενώ ο ρόλος του πελάτη είναι κάτω. Αν το σταμάτημα του πελάτη κόβει και τις απαντήσεις του διακομιστή προς τους υπάρχοντες χρήστες, οι δύο ρόλοι μοιράζονται κάτι που θα έπρεπε να είχε περιοριστεί σε έναν από αυτούς. Καταγράψτε ποιο στιγμιότυπο, ποιο αρχείο διαμόρφωσης και ποιος ιδιοκτήτης ροής επηρεάστηκε από κάθε αλλαγή, γιατί το επόμενο άτομο που θα αποσφαλματώσει αυτόν τον κεντρικό υπολογιστή θα επαναλάβει αλλιώς την ίδια ανακάλυψη από το μηδέν.