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 или сеть.