Μία οδηγία OpenVPN ανά γραμμή, και γιατί η αναδίπλωση λέει ψέματα
Μια οθόνη με μαλακή αναδίπλωση δεν είναι νέα γραμμή στο αρχείο. Ελέγξτε τις πραγματικές αλλαγές γραμμής πριν αντικαταστήσετε ένα χαλασμένο τμήμα με το πρότυπο ενός ξένου.
Ένα προφίλ που κάποτε ξεκινούσε τώρα αποτυγχάνει με σφάλμα επιλογών, και η γραμμή που παραθέτει ο αναλυτής φαίνεται απόλυτα λογική στην οθόνη. Αυτή είναι η παγίδα: ένα αρχείο ρυθμίσεων είναι ένας κατάλογος φυσικών γραμμών, καθεμία με μία λέξη-κλειδί επιλογής και τα ορίσματά της, και μια μεγάλη γραμμή που αναδιπλώνεται από έναν επεξεργαστή φαίνεται ίδια με δύο γραμμές μέχρι να κοιτάξετε τα byte. Τίποτα από το δίκτυο, το πιστοποιητικό ή τη σήραγγα δεν εμπλέκεται σε αυτή την κατηγορία αστοχίας. Δύο γραμμές που φαίνονται ίδιες στην οθόνη μπορεί να διαφέρουν κατά ένα μόνο byte.
Εκτελέστε τους ελέγχους παρακάτω με τη σειρά και σταματήστε στον πρώτο που αποτυγχάνει. Καθένας είναι φθηνότερος από τον επόμενο, και καθένας αποκλείει διαφορετική εξήγηση.
Μία γραμμή, μία οδηγία
Ο αναλυτής διαβάζει μια γραμμή, παίρνει την πρώτη λέξη ως επιλογή και αντιμετωπίζει το υπόλοιπο ως ορίσματα αυτής της επιλογής. Επομένως μια γραμμή όπως η cert server.crt port 1194 δεν είναι δύο οδηγίες διαδοχικά. Είναι μία επιλογή cert με τρία ορίσματα, και το τρίτο δεν είναι όνομα αρχείου που δέχεται η επιλογή. Το να διαβάζετε το σφάλμα ως αλλαγή γραμμής που λείπει είναι σωστό· το να το διαβάζετε ως οδηγία που λείπει δεν είναι.
# malformed: one option, three arguments
cert server.crt port 1194
# intended: two options, one argument each
cert server.crt
port 1194
Αυτές οι δύο διορθωμένες γραμμές είναι απόσπασμα, όχι ρύθμιση. Υπάρχουν για να δείξουν πού ανήκει το όριο. Κάθε συνηθισμένη οδηγία σε ένα προφίλ ακολουθεί τον ίδιο κανόνα, και μια γραμμή που ενώνει δύο από αυτές παράγει είτε σφάλμα ορίσματος είτε μια τιμή που η επιλογή δεν περίμενε.
Αποδείξτε ότι η αλλαγή γραμμής είναι αληθινή
Οι επεξεργαστές αναδιπλώνουν για εμφάνιση. Μερικοί εισάγουν επίσης σκληρές αλλαγές όταν επικολλάτε, και μερικοί όχι, οπότε το ίδιο οπτικό αποτέλεσμα μπορεί να προέρχεται από δύο πολύ διαφορετικά αρχεία. Δείξτε τις καταλήξεις γραμμών και μετρήστε τις γραμμές πριν αλλάξετε οτιδήποτε. Η μέτρηση κοστίζει μία εντολή· η εικασία κοστίζει ένα βράδυ.
cat -A /etc/openvpn/server/lab.conf | sed -n '10,20p'
awk 'NR>=10 && NR<=20 {printf "%d:%s\n", NR, $0}' /etc/openvpn/server/lab.conf
Στην πρώτη έξοδο κάθε πραγματική αλλαγή γραμμής εμφανίζεται ως δείκτης $, οπότε μια γραμμή που έχει αναδιπλωθεί αλλά δεν έχει χωριστεί δεν δείχνει κανέναν δείκτη εκεί όπου η οθόνη σας αναδιπλώνει. Η δεύτερη εντολή εκτυπώνει αριθμημένες γραμμές, που είναι ο γρηγορότερος τρόπος να συγκρίνετε τι αναφέρει ο αναλυτής με το τι περιέχει το αρχείο.
Ούτε τα επιπλέον κενά δημιουργούν οδηγία. Η εσοχή είναι διακοσμητική, και μια γραμμή που αρχίζει με κενό παραμένει η ίδια μοναδική επιλογή. Αν το μήνυμα σφάλματος δείχνει αριθμό γραμμής, διαβάστε ακριβώς εκείνη τη γραμμή και όχι την παράγραφο στην οποία ανήκει.
Παραθέστε μια διαδρομή, όχι μια λίστα οδηγιών
Τα εισαγωγικά υπάρχουν για ορίσματα που περιέχουν κενά, όχι για ομαδοποίηση επιλογών. Μια διαδρομή πιστοποιητικού με κενό χρειάζεται τα δικά της εισαγωγικά· δύο οδηγίες που μοιράζονται ένα ζεύγος εισαγωγικών παραμένουν μία χαλασμένη γραμμή.
cert "/etc/openvpn/pki/lab certs/server.crt"
key "/etc/openvpn/pki/lab certs/server.key"
Ελέγξτε τα ονόματα των επιλογών μαζί με τη διάταξη, γιατί μια ενωμένη γραμμή μπορεί να παραγάγει ένα φαινομενικά αξιόπιστο token που δεν υπήρξε ποτέ. Η οδηγία θύρας είναι port· ένα προφίλ που χρησιμοποιεί κάτι άλλο για την ίδια ιδέα θα αποτύχει ακόμη και μετά τη διόρθωση των ορίων γραμμής. Όταν ένα όνομα φαίνεται άγνωστο, συγκρίνετέ το με τη λίστα επιλογών της έκδοσης που εκτελείτε και όχι με ένα παράδειγμα από φόρουμ.
Κρατήστε τα ενσωματωμένα μπλοκ ως μπλοκ
Τα προφίλ μπορούν να φέρουν πιστοποιητικά και κλειδιά ενσωματωμένα, και αυτά τα μπλοκ είναι δεδομένα, όχι ρύθμιση. Οι γραμμές PEM μέσα σε ένα μπλοκ δεν είναι επιλογές που πρέπει να ισιώσουν, να εσοχωθούν ξανά ή να ενωθούν, και οι δείκτες του μπλοκ πρέπει να μείνουν στις δικές τους γραμμές.
Αντιμετωπίστε ένα ενσωματωμένο μπλοκ ως αδιαφανή περιοχή: διορθώστε τις γραμμές επιλογών γύρω του, αφήστε το περιεχόμενό του ανέγγιχτο byte προς byte και μην το επικολλήσετε ποτέ σε δημόσιο νήμα υποστήριξης. Αν ένα εργαλείο μορφοποίησης ξαναέγραψε το μπλοκ, επαναφέρετέ το από το PKI σας αντί να το επιδιορθώσετε με το χέρι.
Διορθώστε το μικρότερο τμήμα, όχι το πρότυπο
Η δελεαστική επιδιόρθωση είναι να αντικαταστήσετε ολόκληρο το αρχείο με μια ρύθμιση από έναν οδηγό που „δουλεύει”. Αυτό ανταλλάσσει μια χαλασμένη γραμμή με ένα σύνολο αλλαγών πολιτικής που κανείς δεν εξέτασε: άλλες παράμετροι DH, ρυθμίσεις συμπίεσης, επιλογές κρυπτογράφησης, διπλοί ακροατές. Το αρχικό πρόβλημα είναι μικρό και τοπικό, και η αντικατάσταση δεν είναι ούτε το ένα ούτε το άλλο.
Αντιγράψτε το προφίλ σε ένα προστατευμένο αρχείο εργασίας, διορθώστε τα όρια γραμμών σε αυτό το αντίγραφο και αφήστε τον κανονικό ιδιοκτήτη της υπηρεσίας να το φορτώσει. Στη συνέχεια εκκινήστε το στιγμιότυπο και διαβάστε το πρώτο σφάλμα, αν υπάρχει, από την αρχή.
openvpn --config /etc/openvpn/server/lab.conf --verb 3 --log /tmp/parse.log
grep -n 'Options error' /tmp/parse.log
Όταν το στάδιο ανάλυσης περάσει, η επόμενη αποτυχία θα αφορά αρχείο, πιστοποιητικό ή κρυπτογράφηση και όχι λεξιλόγιο, και αυτή είναι πραγματική πρόοδος. Κρατήστε το αντίγραφο εργασίας και μια σημείωση μιας γραμμής για το τι ενώθηκε· η ίδια επικόλληση θα ξανασυμβεί σε κάποιον άλλο στην ίδια ομάδα.