Вопрос или проблема
У меня есть две машины с 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" и добиться успешного монтирования. Не забывайте о возможности обращения к специализированным форумам или сообществам за дополнительной помощью в случае возникновения сложностей.