O host
Eu tenho um host rodando o Ubuntu 12.04 em 10.0.0.202
. Ele fornece um compartilhamento NFS para outras máquinas na rede. Aqui está o conteúdo de /etc/exports
:
/media/storagedrive 10.0.0.0/24(rw,sync,no_subtree_check)
A intenção aqui é compartilhar o conteúdo /media/storagedrive
com outras máquinas da rede na faixa IP 10.0.0.0 - 10.0.0.255
.
Cliente ativo
Isso funciona corretamente com uma máquina cliente 10.0.0.40
executando o Ubuntu 13.10, conhecida como MattDev. Essa máquina /etc/fstab
é assim:
UUID=8f8c838e-3ea2-457a-87f0-57b12dfab06c / ext4 errors=remount-ro 0 1
UUID=427089d4-46a2-432d-9df4-7016bdfc7df2 none swap sw 0 0
10.0.0.202:/media/storagedrive /mnt/NetworkStorageDrive nfs rsize=8192,wsize=8192,timeo=14,intr
E ls -al /mnt/
naquela máquina fica assim:
total 12K
drwxr-xr-x 3 root root 4.0K Feb 4 17:48 .
drwxr-xr-x 23 root root 4.0K Feb 5 08:44 ..
drwxrwxr-x 7 root plugdev 4.0K Feb 5 11:43 NetworkStorageDrive
A saída é id
semelhante a esta:
uid=1000(matt) gid=1000(matt) groups=1000(matt),4(adm),24(cdrom),27(sudo),30(dip),33(www-data),46(plugdev),112(lpadmin),124(sambashare)
Cliente virtual não funcional
Eu tenho uma segunda máquina cliente, executando o Ubuntu 12.10, como sistema operacional convidado em uma máquina host com Windows 7. A máquina host está na rede como 10.0.0.28
. A máquina convidada está sendo gerenciada pelo Vagrant, usando o VirtualBox 4.3.6 como provedor. Vou ligar para o host do Windows 7, AlexDevHost, e para o convidado do Ubuntu, AlexDevGuest.
A execução showmount -e 10.0.0.202
no AlexDevGuest produz:
Export list for 10.0.0.202:
/media/storagedrive 10.0.0.0/24
No entanto, quando tento montar o compartilhamento, ele falha:
$ sudo mount 10.0.0.202:/media/storagedrive /mnt/NetworkStorageDrive
mount.nfs: access denied by server while mounting 10.0.0.202:/media/storagedrive
Então comecei a procurar problemas:
$ ls -alh /mnt/
total 12K
drwxr-xr-x 3 root root 4.0K Feb 5 12:23 .
drwxr-xr-x 26 root root 4.0K Feb 5 12:23 ..
drwxr-xr-x 2 root root 4.0K Feb 5 12:23 NetworkStorageDrive
$ id
uid=1001(vagrant) gid=1001(vagrant) groups=1001(vagrant)
$
Esse uid e gid são diferentes do usuário matt no MattDev. Então, fiz malabarismos com o uid do vagrant, pois li que o acesso NFS é controlado pela correspondência do endereço IP e dos uids. Então agora:
$ id
uid=1000(vagrant) gid=1001(vagrant) groups=1001(vagrant)
$ sudo mount 10.0.0.202:/media/storagedrive /mnt/NetworkStorageDrive
mount.nfs: access denied by server while mounting 10.0.0.202:/media/storagedrive
$
Ainda sem sucesso. Então agora estou ficando sem ideias.
- O que estou fazendo de errado?
- Se a parte uid estiver correta, existe uma maneira de verificar se a máquina do servidor NFS está vendo minha tentativa de acesso como proveniente de
10.0.0.28
, e não de algum outro IP que não esteja no intervalo permitido?
Responder1
Ok, resolvi (ou pelo menos fiz funcionar e acho que sei o que estava causando isso).
Adicionei o insecure
sinalizador à /etc/exports
linha no servidor NFS, então agora fica assim:
/media/storagedrive 10.0.0.0/24(rw,sync,no_subtree_check,insecure)
Este sinalizador permite que as conexões sejam originadas de portas de clientes acima de IPPORT_RESERVED (1024).
O comando mount agora funciona.
Meu palpite sobre por que a falta do insecure
sinalizador era o problema é que o VirtualBox estava usando NAT para passar a solicitação para a rede física, portanto, embora a porta no convidado do Ubuntu (AlexDevGuest) possa estar abaixo de 1024, a porta traduzida em o host do Windows 7 (AlexDevHost) provavelmente estava acima de 1024 e, portanto, bloqueado. Definir a insecure
bandeira significava que era permitido.
Este problema obviamente não afeta a máquina não virtual MattDev.