clientaddr — одна из тех опций монтирования, которые копируют в командную строку спустя много времени после того, как причина исчезла. Она сообщает серверу NFSv4.0, куда вызывать клиента обратно. Она не выбирает сервер, не привязывает каждый запрос к адресу источника и не загоняет трафик в туннель. На ноутбуке с несколькими адресами, чтобы решить, применима ли она вообще, нужны три вопроса.

Три условия решают, имеет ли опция значение

Первое — согласованная минорная версия, потому что 4.1 и 4.2 обрабатывают обратные вызовы по-разному. Второе — может ли сервер достичь адреса, который вы объявите; маршрутизируемый туннель обычно это позволяет, а транслируемый путь обычно нет. Третье — является ли ошибка, которую вы ищете, вообще ошибкой обратного вызова.

ConditionIf yesIf no
Version is 4.0The option can matterSkip it; inspect the session instead
Server can reach the addressAdvertise itFix reachability first
Failure is a callbackDiagnose callback pathLook 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 или сеть.

Похожие статьи