nfs v4 монтирование не удается, операция не разрешена через ssh туннель

Вопрос или проблема

У меня есть две машины с Ubuntu Linux. Один сервер и один клиент. Сервер работает как nfs v4 сервер, sharing директорию /nfs-share.

Я пытаюсь смонтировать nfs v4 через ssh туннель по следующим причинам:

  • конфиденциальность
  • простота
  • нет необходимости открывать порты nfs в firewalld
  • контроль доступа: пользователи, имеющие доступ к ssh, могут монтировать nfs общий ресурс

Я выбрал nfs v4 специально, чтобы избежать необходимости в rpcbind, statd, mountd и т. д., которые потребовали бы дополнительных портов для работы nfs v3.

/etc/exports:
—————————————————

/nfs-share  *(sec=sys,rw,sync,no_subtree_check,all_squash,anonuid=65534,anongid=65534)

Вышеуказанная директория является единственным экспортируемым ресурсом с сервера.

Я проверил монтирование nfs директории как с локального узла (т.е. сервера), так и с клиента, и все работает отлично…

Однако, когда я пытаюсь смонтировать nfs через ssh туннель, я получаю ошибку: Операция не разрешена. Эта проблема наблюдается даже когда я создаю локальный ssh туннель на сервере с порта 2049 на 4049.

Вот как я пытался настроить туннель с клиента:
—————————————————————————————

root@client:~# ssh -fqNTL 127.0.0.1:2049:127.0.0.1:2049 [email protected]
root@client:~# mount -vvv -o vers=4,proto=tcp 127.0.0.1:/nfs-share /mnt
mount.nfs: timeout set for Thu Dec 12 22:40:45 2024
mount.nfs: trying text-based options 'proto=tcp,vers=4.2,addr=127.0.0.1,clientaddr=127.0.0.1'
mount.nfs: mount(2): Operation not permitted
mount.nfs: Operation not permitted

Также следующим образом:
—————————————————————————————————————

root@client:~# ssh -fqNTL 127.0.0.1:4049:127.0.0.1:2049 [email protected]
root@client:~# mount -vvv -o vers=4,proto=tcp,port=4049 127.0.0.1:/nfs-share /mnt
mount.nfs: timeout set for Thu Dec 12 22:42:34 2024
mount.nfs: trying text-based options 'proto=tcp,port=4049,vers=4.2,addr=127.0.0.1,clientaddr=127.0.0.1'
mount.nfs: mount(2): Operation not permitted
mount.nfs: Operation not permitted

Я также проверил с помощью tcpdump, что запросы nfs-клиента фактически достигают сервера:
————————————————————————————————————————————————
root@server:~# tcpdump -vv -i any dst port 2049
tcpdump: data link type LINUX_SLL2
tcpdump: listening on any, link-type LINUX_SLL2 (Linux cooked v2), snapshot length 262144 bytes
22:42:30.128843 lo    In  IP (tos 0x0, ttl 64, id 24532, offset 0, flags [DF], proto TCP (6), length 60)
    localhost.51734 > localhost.nfs: Flags [S], cksum 0xfe30 (incorrect -> 0x4d2d), seq 2290211965, win 65495, options [mss 65495,sackOK,TS val 2614046702 ecr 0,nop,wscale 7], length 0
22:42:30.129019 lo    In  IP (tos 0x0, ttl 64, id 24533, offset 0, flags [DF], proto TCP (6), length 52)
    localhost.51734 > localhost.nfs: Flags [.], cksum 0xfe28 (incorrect -> 0x54f2), seq 2290211966, ack 812262091, win 512, options [nop,nop,TS val 2614046702 ecr 2614046702], length 0
22:42:30.130879 lo    In  IP (tos 0x0, ttl 64, id 24534, offset 0, flags [DF], proto TCP (6), length 96)
    localhost.51734 > localhost.nfs: Flags [P.], cksum 0xfe54 (incorrect -> 0x2f49), seq 0:44, ack 1, win 512, options [nop,nop,TS val 2614046704 ecr 2614046702], length 44: NFS request xid 1800123220 40 null
22:42:30.131151 lo    In  IP (tos 0x0, ttl 64, id 24535, offset 0, flags [DF], proto TCP (6), length 52)
    localhost.51734 > localhost.nfs: Flags [.], cksum 0xfe28 (incorrect -> 0x54a6), seq 44, ack 29, win 512, options [nop,nop,TS val 2614046704 ecr 2614046704], length 0

Что идет не так и как я могу это исправить?

Ответ или решение

Когда вы пытаетесь смонтировать NFS v4 через SSH-туннель и получаете сообщение об ошибке "Operation not permitted", необходимо рассмотреть несколько ключевых аспектов настройки NFS и SSH. В данном ответе мы проанализируем вашу проблему, опираясь на предоставленную информацию, и предложим решения для исправления ситуации.

Проблема: Ошибка "Operation not permitted"

Ошибка "Operation not permitted" часто возникает из-за неправильной конфигурации доступа либо из-за особенностей работы протокола NFS v4 и SSH. Рассмотрим ваши действия и возможные причины проблемы.

1. Конфигурация экспорта NFS

Ваш файл /etc/exports настроен следующим образом:

/nfs-share  *(sec=sys,rw,sync,no_subtree_check,all_squash,anonuid=65534,anongid=65534)

Эта конфигурация позволяет подключаться к шару всем пользователям. Однако стоит отметить, что при попытке подключения через SSH туннель могут возникать проблемы с определением клиента, так как запросы идут от 127.0.0.1 клиента к 127.0.0.1 сервера.

Рекомендация:

Попробуйте внести изменения в конфигурацию, добавив явное указание IP-адреса клиента (например, 127.0.0.1) в разрешения экспорта:

/nfs-share  127.0.0.1(rw,sync,no_subtree_check,all_squash,anonuid=65534,anongid=65534)

После изменения не забудьте перезагрузить службу NFS:

sudo exportfs -ra

2. Настройка SSH-туннеля

Получение ошибки может быть связано с тем, что SSH-туннель не передает все необходимые параметры. Вы используете команды для создания SSH-туннеля, и в них можно улучшить передачу аргументов. Особенности настройки могут влиять на работу клиентского узла.

Пример создания туннеля:

ssh -N -L 4049:127.0.0.1:2049 [email protected]

После этого выполните следующую команду для монтирования:

mount -vvv -o vers=4,proto=tcp,port=4049 127.0.0.1:/nfs-share /mnt

Важно использовать оба параметра, -L и -R, при необходимости, чтобы пробросить порты как из клиентской, так и из серверной стороны.

3. Проверка настроек Firewall

Поскольку вы хотите избежать открытых портов для NFS, убедитесь, что ваш локальный брандмауэр (firewalld) не блокирует соединения на порты, которые вы используете с SSH-туннелем. Это можно сделать с помощью следующих команд:

firewall-cmd --list-all

Если необходимо, добавьте разрешение на порты:

firewall-cmd --add-port=4049/tcp --permanent
firewall-cmd --reload

4. Проверка логов

Логи NFS могут предоставить дополнительную информацию о том, что происходит на сервере, когда вы пытаетесь установить соединение. Просмотрите журнал Syslog на сервере:

sudo tail -f /var/log/syslog

Или журнал NFS, если он включён:

sudo tail -f /var/log/nfslog

5. Подключение через альтернативный метод

Если вышеуказанные шаги не решают проблему, вы можете попробовать альтернативный метод – использовать NFS через sshfs, который является более простым способом проксирования файловой системы через SSH, например:

sshfs [email protected]:/nfs-share /mnt

Заключение

С учетом приведённых рекомендаций, я надеюсь, что вы сможете решить проблему с подключением к NFS v4 через SSH-туннель. Проверьте настройки экспортируемых директорий, корректность SSH-туннелей, настройку брандмауэра и, возможно, используйте альтернативный подход с sshfs. Эти шаги помогут вам устранить ошибку "Operation not permitted" и добиться успешного монтирования. Не забывайте о возможности обращения к специализированным форумам или сообществам за дополнительной помощью в случае возникновения сложностей.

Оцените материал
Добавить комментарий

Капча загружается...