Dlaczego NFS nie pozwala mi na zamontowanie udziału?

14

Gospodarz

Mam hosta z systemem Ubuntu 12.04 w 10.0.0.202. Zapewnia udział NFS dla innych komputerów w sieci. Oto zawartość /etc/exports:

/media/storagedrive 10.0.0.0/24(rw,sync,no_subtree_check)

Chodzi tutaj o udostępnienie zawartości /media/storagedriveinnym komputerom w sieci w zakresie adresów IP 10.0.0.0 - 10.0.0.255.

Klient pracujący

Działa to poprawnie na komputerze klienckim z 10.0.0.40systemem Ubuntu 13.10, znanym jako MattDev. Ta maszyna /etc/fstabwygląda następująco:

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

Na ls -al /mnt/tej maszynie wygląda to tak:

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

Wynik działania idwygląda następująco:

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)

Niedziałający klient wirtualny

Mam drugi komputer kliencki z systemem Ubuntu 12.10, jako system operacyjny gościa na komputerze z systemem Windows 7. Komputer hosta jest w sieci jako 10.0.0.28. Maszyną gościa zarządza Vagrant, używając VirtualBox 4.3.6 jako dostawcy. Zadzwonię do hosta Windows 7 AlexDevHost i gościa Ubuntu AlexDevGuest.

Działa showmount -e 10.0.0.202na AlexDevGuest produkuje:

Export list for 10.0.0.202:
/media/storagedrive 10.0.0.0/24

Jednak gdy próbuję zamontować udział, kończy się to niepowodzeniem:

$ sudo mount 10.0.0.202:/media/storagedrive /mnt/NetworkStorageDrive
mount.nfs: access denied by server while mounting 10.0.0.202:/media/storagedrive

Zacząłem więc szukać problemów:

$ 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)
$

Ten identyfikator użytkownika i identyfikator użytkownika jest inny niż Matt użytkownika na MattDev. Żonglowałem więc o UID dla włóczęgów, ponieważ przeczytałem, że dostęp do NFS jest kontrolowany przez dopasowanie adresu IP i UID. Więc teraz:

$ 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
$

Nadal nie ma sukcesu. Teraz brakuje mi pomysłów.

  1. Co ja robię źle?
  2. Jeśli część UID jest poprawna, czy istnieje sposób, aby sprawdzić, czy komputer serwera NFS widzi moją próbę dostępu jako pochodzącą 10.0.0.28, a nie inne IP poza dozwolonym zakresem?
Alex
źródło

Odpowiedzi:

16

OK, wypracowałem to (a przynajmniej sprawiłem, że działało i myślę, że wiem, co go spowodowało).

Dodałem insecureflagę do /etc/exportslinii na serwerze NFS, więc teraz wygląda to tak:

/media/storagedrive 10.0.0.0/24(rw,sync,no_subtree_check,insecure)

Ta flaga umożliwia nawiązywanie połączeń z portów klienta powyżej IPPORT_RESERVED (1024).

Polecenie mount działa teraz.

Domyślam się, dlaczego przyczyną insecureproblemu był brak flagi, ponieważ VirtualBox używał NAT do przekazania żądania do sieci fizycznej, więc chociaż port gościa Ubuntu (AlexDevGuest) mógł być mniejszy niż 1024, przetłumaczony port na host systemu Windows 7 (AlexDevHost) był prawdopodobnie powyżej 1024 i dlatego został zablokowany. Ustawienie insecureflagi oznaczało jednak, że było to dozwolone.

Ten problem oczywiście nie wpływa na maszynę wirtualną DevMatt.

Alex
źródło
Fantastyczna praca detektywistyczna nad tym. Rutynowo używam maszyn wirtualnych VirtualBox Unbuntu jako środowisk „piaskownicy”, na których mogę podrzucać lub testować, zamiast używać serwerów na poziomie produkcyjnym lub nawet serwera deweloperskiego i to ogromnie pomaga.
JakeGould,
Chcę ci podziękować w nieskończonej pętli, szukając tego od dłuższego czasu i pomogłeś. Każdy pomysł, dlaczego wprowadzili takie ograniczenie, dlaczego nie mogą pozwolić połączeniom przychodzącym z dowolnego numeru portu, w jaki sposób numer portu wpłynie na cokolwiek. Wszelkie sposoby wielkie dzięki.
mSatyam
@mSatyam Stanie się tak, ponieważ musisz być rootem, aby połączyć się z portem poniżej 1024, i prawdopodobnie rozsądne jest oczekiwanie, że NFS będzie działał jako root, przynajmniej domyślnie. Przekierowywanie portów, które robiłem, było w pewnym sensie „specjalnym przypadkiem”.
Alex
Ale jak mogę przekonać sieć VirtualBox do korzystania z portu poniżej 1024? ..
Michaił T.
Dziękuję bardzo ..
John