Διακομιστής ή πελάτης: ποια μονάδα OpenVPN σε ένα Pi με διπλό ρόλο
Δύο παρουσίες OpenVPN μοιράζονται ένα Pi: η μία δέχεται περιοδεύοντες χρήστες, η άλλη καλεί τον ανάντη πάροχο. Διαβάστε το όνομα της μονάδας και τον κατάλογο πριν επανεκκινήσετε οποιαδήποτε από τις δύο.
Δύο διεργασίες OpenVPN εκτελούνται σε ένα Pi που ταυτόχρονα δέχεται περιοδεύοντες χρήστες και φτάνει σε έναν ανάντη πάροχο, και δεν μοιράζονται σχεδόν τίποτα πέρα από το υλικό. Η μία ακούει για εισερχόμενες σήραγγες ενώ η άλλη καλεί προς τα έξω. Κάθε μία διαβάζει τον δικό της κατάλογο, και κάθε μία έχει τον δικό της τρόπο αποτυχίας. Η επανεκκίνηση της λάθος μονάδας είναι ο πιο συνηθισμένος τρόπος με τον οποίο μια διόρθωση πελάτη καταλήγει να ταρακουνά τον ακροατή.
Ταιριάξτε το όνομα της μονάδας με τον κατάλογο που φορτώνει
Το Upstream 2.6 παρέχει δύο μονάδες προτύπου, [email protected] και [email protected]. Το πρότυπο διακομιστή ξεκινά στο /etc/openvpn/server και φορτώνει το %i.conf από εκεί. Το πρότυπο πελάτη ξεκινά στο /etc/openvpn/client. Μια παρουσία με όνομα roaming μπορεί να υπάρχει και στα δύο σημεία ταυτόχρονα, ως διακομιστής και ως πελάτης, με δύο άσχετες ρυθμίσεις και κανέναν σύνδεσμο μεταξύ τους πέρα από τη συμβολοσειρά.
Ρωτήστε το systemd αντί για το σύστημα αρχείων, επειδή οι συσκευαστές προσθέτουν πρόσθετα αρχεία που μπορούν να αλλάξουν τον κατάλογο εργασίας ή τα ορίσματα που λαμβάνει το εκτελέσιμο.
systemctl list-units --type=service 'openvpn-*@*' systemctl cat [email protected] systemctl show -p WorkingDirectory -p ExecStart [email protected]
Η πρώτη εντολή απαριθμεί κάθε μονάδα που έχει δημιουργηθεί, συμπεριλαμβανομένων εκείνων που απέτυχαν και έμειναν φορτωμένες. Η δεύτερη εκτυπώνει το αρχείο της μονάδας μαζί με οποιαδήποτε παράκαμψη. Η τρίτη είναι ο ταχύτερος τρόπος να δείτε τα δύο γεγονότα που αποφασίζουν το ζήτημα: τον κατάλογο στον οποίο ξεκινά η διεργασία, και τη διαδρομή ρυθμίσεων που της δόθηκε.
Αποφασίστε με την κατεύθυνση των πακέτων, όχι με το όνομα της διεπαφής
Μια παρουσία διακομιστή κατέχει υποδοχή ακρόασης και δέχεται συνδέσεις. Η κρυπτογραφημένη μεταφορά της είναι τοπική είσοδος και τοπική έξοδος στο Pi, ενώ η κίνηση που προωθεί για χρήστες ακολουθεί τη διαδρομή προώθησης και υπακούει σε διαφορετικό σύνολο κανόνων. Μια παρουσία πελάτη δεν έχει ακροατή με αυτή την έννοια: καλεί έναν ομότιμο, άρα η κρυπτογραφημένη μεταφορά της είναι τοπική έξοδος προς το υποκείμενο δίκτυο.
Αυτή η διαφορά σας λέει πού ανήκει ένας κανόνας. Ένας κανόνας που ταιριάζει με διεπαφή μέσα σε αλυσίδα προώθησης επιτρέπει μόνο κίνηση που έχει ήδη επιλέξει η δρομολόγηση· ποτέ δεν επιλέγει τη διαδρομή. Όταν τα πακέτα ενός περιοδεύοντος χρήστη βγαίνουν από λάθος μονοπάτι, η αλυσίδα που πρέπει να ελεγχθεί είναι η forward, όχι η output.
Κοιτάξτε τις υποδοχές πριν θεωρητικολογήσετε. Ένας διακομιστής δεσμευμένος στο udp/1194 δείχνει υποδοχή ακρόασης. Ο πελάτης δείχνει συσχέτιση με τη διεύθυνση του παρόχου και τίποτα που να ακούει.
ss -lunp | grep openvpn ss -unp state established '( dport = :1194 or sport = :1194 )'
Η προεπιλεγμένη διαδρομή της μίας παρουσίας μπορεί να αρπάξει τις απαντήσεις της άλλης
Ένα redirect-gateway που σπρώχνει ο ανάντη πελάτης εγκαθιστά προεπιλεγμένη διαδρομή που ανταγωνίζεται όλα τα άλλα στο μηχάνημα, συμπεριλαμβανομένων των απαντήσεων που στέλνει ο διακομιστής στους περιοδεύοντες χρήστες. Το OpenVPN κάνει μια εξαίρεση για τη δική του διεύθυνση ομοτίμου ώστε η σήραγγα να παραμένει προσβάσιμη, αλλά αυτή η εξαίρεση δεν λέει τίποτα για ένα τηλέφωνο σε δίκτυο ξενοδοχείου.
Το σύμπτωμα είναι συνήθως ασύμμετρο. Η χειραψία ολοκληρώνεται, ο πελάτης αναφέρει σύνδεση, και η κίνηση πεθαίνει μετά το πρώτο πακέτο απάντησης. Η δρομολόγηση πολιτικής βάσει πηγής, ή ένα σημάδι πακέτου που τίθεται στην παρουσία διακομιστή με το --mark, κρατά τις δύο ροές χωριστά· κανένα από τα δύο δεν είναι πλήρες σύνολο κανόνων από μόνο του, και τα δύο χρειάζονται έγκυρες διαδρομές στον πίνακα που επιλέγουν.
Δοκιμάστε την τοπική απόφαση αντί για την κατάσταση της σήραγγας, επειδή ο πυρήνας διαλέγει την πηγή και τη διεπαφή πριν δει το OpenVPN το πακέτο.
ip route get 203.0.113.44 ip rule show
Επανεκκινήστε έναν ρόλο και αποδείξτε ότι ο άλλος επέζησε
Η σειρά έχει σημασία όταν και οι δύο ρόλοι εξαρτώνται από το ίδιο υποκείμενο δίκτυο. Επανεκκινήστε πρώτα τον πελάτη αν η ανάντη διαδρομή πρέπει να υπάρχει πριν μπορεί να προωθηθεί η κίνηση των χρηστών, και επανεκκινήστε πρώτα τον διακομιστή όταν αλλάζετε μόνο τον ακροατή ή τη δεξαμενή του. Σε κάθε περίπτωση επιβεβαιώστε και τις δύο μονάδες μετά, γιατί μια αποτυχημένη επανεκκίνηση μπορεί να αφήσει τον άλλο ρόλο να τρέχει με παρωχημένη κατάσταση.
Γράψτε τη συνθήκη διακοπής πριν την αλλαγή: η απώλεια της ανάντη σήραγγας μπλοκάρει τους περιοδεύοντες χρήστες, ή πέφτει πίσω στο δικό του uplink του Pi; Το DNS και το IPv6 χρειάζονται επίσης σαφή απάντηση, γιατί ένας ωθημένος resolver συχνά επιζεί της διαδρομής που τον έκανε χρήσιμο.
systemctl restart [email protected] systemctl is-active [email protected] journalctl -u [email protected] -n 20 --no-pager
Δεχτείτε την αλλαγή μόνο όταν τρία πράγματα ισχύουν ταυτόχρονα: μια νέα εισερχόμενη σύνδεση ολοκληρώνεται, μια προωθημένη εφαρμογή φτάνει στον προορισμό της μέσω της προβλεπόμενης εξόδου, και οι δύο διεργασίες αναφέρουν ακόμη τον αναμενόμενο ομότιμό τους. Αν ένα από τα τρία αποτύχει, αλλάξατε λάθος παρουσία ή λάθος διαδρομή, και το επόμενο βήμα είναι να ξαναδιαβάσετε τη μονάδα αντί να επανεκκινήσετε οτιδήποτε άλλο.