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
Адреса перед двокрапкою — це сервер, і вона залишається призначенням. Адреса зворотного виклику належить клієнту, і вона має бути досяжною з боку сервера в тунелі. Адреса петлі повертає сервер до самого себе. Приватна адреса клієнта без зворотного маршруту така сама непридатна, хоча на клієнті виглядає правильно.
Використовуйте це як ілюстрацію, а не як причину знижувати робоче монтування. Замініть адреси та шлях експорту і збережіть автентифікацію та інші параметри, яких вимагає сервер. Їхнє опускання, щоб підійшов один приклад, — інша зміна з іншим результатом, а на сервері, який вимагає тип безпеки, вона зазнає невдачі ще до спроби будь-якого зворотного виклику.
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 або мережу.