NFS clientaddr πάνω από VPN: αποφασίστε με την ελάσσονα έκδοση, όχι με τη συνήθεια
Το clientaddr διαφημίζει μια διεύθυνση επανάκλησης μόνο για NFSv4.0. Διαβάστε την ελάσσονα έκδοση που διαπραγματεύτηκε, ελέγξτε τη διαδρομή επιστροφής και ξεχωρίστε την από τις αποτυχίες προσάρτησης.
Το clientaddr είναι μία από εκείνες τις επιλογές προσάρτησης που αντιγράφονται σε μια γραμμή εντολών πολύ καιρό αφού ο λόγος ύπαρξής τους έχει εξαφανιστεί. Λέει σε έναν διακομιστή NFSv4.0 πού να καλέσει πίσω τον πελάτη. Δεν επιλέγει τον διακομιστή, δεν δεσμεύει κάθε αίτημα σε μια διεύθυνση προέλευσης και δεν σπρώχνει την κίνηση σε ένα τούνελ. Σε φορητό υπολογιστή με πολλές διευθύνσεις, για να αποφασιστεί αν ισχύει καθόλου χρειάζονται τρεις ερωτήσεις.
Τρεις συνθήκες αποφασίζουν αν η επιλογή έχει σημασία
Η πρώτη είναι η ελάσσονα έκδοση που διαπραγματεύτηκε, επειδή το 4.1 και το 4.2 χειρίζονται τις επανακλήσεις διαφορετικά. Η δεύτερη είναι αν ο διακομιστής μπορεί να φτάσει στη διεύθυνση που θα διαφήμιζες· ένα δρομολογημένο τούνελ συνήθως το επιτρέπει και μια μεταφρασμένη διαδρομή συνήθως όχι. Η τρίτη είναι αν η αποτυχία που κυνηγάς είναι καθόλου αποτυχία επανάκλησης.
| Condition | If yes | If no |
|---|---|---|
| Version is 4.0 | The option can matter | Skip it; inspect the session instead |
| Server can reach the address | Advertise it | Fix reachability first |
| Failure is a callback | Diagnose callback path | Look at mount and export |
Το να τις απαντήσεις με λάθος σειρά είναι ο τρόπος με τον οποίο οι άνθρωποι προσθέτουν μια διεύθυνση επανάκλησης σε μια προσάρτηση 4.2 και καταλήγουν ότι η επιλογή είναι χαλασμένη.
Διάβασε πρώτα την ελάσσονα έκδοση
nfsstat -m
Για μια υπάρχουσα προσάρτηση, αυτό εκτυπώνει τις πληροφορίες και τις σημαίες της προσάρτησης, συμπεριλαμβανομένης της ενεργής έκδοσης ως vers=4.0, vers=4.1 ή vers=4.2. Μια σημείωση που λέει μόνο “NFSv4” παραλείπει τη μία λεπτομέρεια που καθορίζει αν αυτή η επιλογή είναι σχετική. Διάβασε τον αριθμό και όχι τη λέξη.
Αν η συμβολοσειρά έκδοσης προήλθε από μια προεπιλογή του διακομιστή και όχι από τη γραμμή εντολών σου, ρώτησε ποια ελάσσονα έκδοση διαπραγματεύτηκε. Ένας διακομιστής μπορεί να αρνηθεί μια υψηλότερη ελάσσονα έκδοση και να υποχωρήσει, και ακριβώς αυτή η υποχώρηση είναι η περίπτωση όπου μια επανάκληση ξαφνικά έχει σημασία. Η γραμμή προσάρτησης που έγραψες μπορεί να μην περιγράφει την προσάρτηση που έχεις.
Για το 4.0, διαφήμισε μια διεύθυνση που μπορεί να φτάσει ο διακομιστής
Ένας διακομιστής NFSv4.0 μπορεί να χρειάζεται ξεχωριστή σύνδεση πίσω προς τον πελάτη, για παράδειγμα όταν ανακαλεί μια ανάθεση. Με πολλές διεπαφές ή έναν ασυνήθιστο πίνακα δρομολόγησης, η αυτόματη ανακάλυψη μιας διεύθυνσης επανάκλησης μπορεί να διαλέξει μία που ο διακομιστής δεν μπορεί να χρησιμοποιήσει.
mount -t nfs -o vers=4.0,clientaddr=10.8.0.6 10.8.0.1:/export /mnt/share
Η διεύθυνση πριν από την άνω τελεία είναι ο διακομιστής και παραμένει ο προορισμός. Η διεύθυνση επανάκλησης ανήκει στον πελάτη και πρέπει να είναι προσβάσιμη από την πλευρά του διακομιστή στο τούνελ. Μια διεύθυνση loopback στρέφει τον διακομιστή πίσω στον εαυτό του. Μια ιδιωτική διεύθυνση πελάτη χωρίς διαδρομή επιστροφής είναι εξίσου άχρηστη, ακόμη και αν φαίνεται σωστή στον πελάτη.
Χρησιμοποίησέ το ως παράδειγμα, όχι ως λόγο να υποβαθμίσεις μια λειτουργική προσάρτηση. Αντικατέστησε τις διευθύνσεις και τη διαδρομή εξαγωγής και κράτησε την πιστοποίηση και τις άλλες επιλογές που απαιτεί ο διακομιστής. Το να τις πετάξεις για να χωρέσει ένα παράδειγμα είναι άλλη αλλαγή με άλλο αποτέλεσμα, και σε διακομιστή που επιβάλλει τύπο ασφαλείας αποτυγχάνει πριν επιχειρηθεί οποιαδήποτε επανάκληση.
Το 4.1 και το 4.2 δεν χρησιμοποιούν την επιλογή
Το Linux NFSv4.1 και 4.2 μεταφέρουν τις επανακλήσεις πάνω από συνδέσεις που έχει καθιερώσει ο πελάτης, και το 4.1 ονομάζει αυτή την υποδομή backchannel. Δεν εξαρτώνται από το αν ο διακομιστής ανοίγει νέα σύνδεση σε μια διαφημισμένη διεύθυνση, οπότε το clientaddr δεν επιδιορθώνει διαδρομή επανάκλησης 4.1 ή 4.2.
Αυτό δεν σημαίνει ότι το 4.1 και το 4.2 δεν έχουν προβλήματα επανακλήσεων. Σημαίνει ότι η διάγνωση είναι διαφορετική: εξέτασε την καθιερωμένη συνεδρία και την κατάσταση του backchannel της αντί να ψάχνεις για μια εισερχόμενη θύρα επανάκλησης που δεν έπρεπε ποτέ να υπάρχει. Ένας κανόνας εισερχομένων που λείπει είναι η αναμενόμενη κατάσταση, όχι βλάβη προς διόρθωση.
Ξεχώρισε μια αποτυχία προσάρτησης από μια αποτυχία επανάκλησης
Καθόρισε πρώτα αν ο πελάτης φτάνει στην υπηρεσία NFS και αν ο διακομιστής δέχεται την εξαγωγή και το αίτημα πιστοποίησης. Ένα χρονικό όριο πριν από αυτή την ανταλλαγή δεν λέει τίποτε για μια διεύθυνση επανάκλησης. Το να αλλάξεις το ένα όσο η προσάρτηση ακόμη αποτυγχάνει δεν φέρνει την έρευνα πιο κοντά και κρύβει το αρχικό σφάλμα πίσω από μια νέα επιλογή προσάρτησης.
Μόνο όταν τα στοιχεία δείχνουν μια αποτυχημένη επανάκληση 4.0 έχει σημασία η διαφημισμένη διεύθυνση, μαζί με τη διαδρομή επιστροφής του διακομιστή, τον ακροατή στην πλευρά του πελάτη και οποιοδήποτε φιλτράρισμα ανάμεσά τους. Το να αλλάξεις τον αριθμό στην επιλογή προσάρτησης δεν μπορεί να δημιουργήσει αυτές τις διαδρομές· μπορεί μόνο να δείξει σε μία που υπάρχει ήδη. Γράψε ποια από τις τέσσερις επαλήθευσες, γιατί η επόμενη αναφορά θα φτάσει χωρίς καμία από αυτές.
Μια ρίζα NFS κατά την πρώιμη εκκίνηση είναι ξεχωριστό περιβάλλον με τις δικές του προϋποθέσεις: το initramfs χρειάζεται τα εργαλεία και το δίκτυο πριν μπορέσει να γίνει η προσάρτηση. Μια προσάρτηση που λειτουργεί μετά τη σύνδεση δεν αποδεικνύει τίποτε για εκείνη την ακολουθία, και η αποτυχία κατά την εκκίνηση σπάνια αναφέρει είτε το initramfs είτε το δίκτυο.