Odpowiedzi:
$ rpcinfo -p | grep nfs
Port 111 (TCP i UDP) i 2049 (TCP i UDP) dla serwera NFS.
Istnieją również porty dla statusu klastra i klienta (Port 1110 TCP dla pierwszego i 1110 UDP dla drugiego), a także port dla menedżera blokady NFS (Port 4045 TCP i UDP). Tylko Ty możesz określić, które porty musisz zezwolić, w zależności od potrzebnych usług cross-gateway.
grep nfs
, ale zrezygnowałem z grep, aby dowiedzieć się, że 111 jest dla portmapper
. Również dobrze wiedzieć! (i jak wspomniałeś, konieczne)
Oprócz 111 dla portmapper i 2049 dla nfs, musisz zezwolić na montowany port i ewentualnie rquotad, lockd i statd, z których wszystkie mogą być dynamiczne. Ten doskonały przewodnik bezpieczeństwa NFS zaleca zmianę skryptów startowych i konfiguracji modułów jądra, aby zmusić je do używania portów statycznych.
Oprócz powyższego przewodnika, który zawiera sekcję dotyczącą zapór ogniowych , zobacz moją odpowiedź na inne pytanie dotyczące wzmacniania NFS.
RPCMOUNTDOPTS="--port 34567"
a następnie uruchom ponownie za pomocą sysctl --system
i/etc/init.d/nfs-kernel-server restart
Na tej stronie znalazłem przydatne wskazówki dotyczące mojego problemu, ale przepis nie był łatwy do wykonania. Oto mój przepis.
TL; DR - po naprawie należy zezwolić zarówno na porty nfs (111, 2049), jak i port montowany.
Instrukcje:
gksudo gedit /etc/default/nfs-kernel-server
RPCMOUNTDOPTS=--manage-gids
RPCMOUNTDOPTS="--port 33333"
Lub dowolny inny numer portu.
teraz spróbuj zresetować NFS używając:
sudo service nfs-kernel-server restart
I sprawdź, czy pomogło to w użyciu:
rpcinfo -p | grep "tcp.*mountd"
Dla mnie to nie wystarczyło, ale pełne ponowne uruchomienie rozwiązało problem.
( kredyt )
(1) usuń stare reguły, zrób to ręcznie lub zresetuj, jeśli jest to jedyne zastosowanie zapory:
sudo ufw reset
sudo ufw enable
(2) dodaj nfs i zamontowane porty
sudo ufw allow in from 10.0.0.1/20 to any port 111
sudo ufw allow in from 10.0.0.1/20 to any port 2049
sudo ufw allow in from 10.0.0.1/20 to any port 33333
(Zmień na lokalne adresy IP lub na „ any
” zamiast 10.0.0.1/20
)
To wszystko.
sudo service nfs-config restart
przed ponownym uruchomieniem nfs-kernel-server
będzie w porządku.
systemctl
, to jest systemctl restart nfs-kernel-server.service
.
sudo nfs allow proto tcp from 10.0.0.1/20 to any port 111,2049,33333
a następnie (ok, dwa spuchnięte foopie) sudo nfs allow proto udp from 10.0.0.1/20 to any port 111,2049,33333
. Uwaga port 33333 jest zgodny z powyższym przykładem. Możesz użyć innego portu, jak wskazuje odpowiedź.
Spowoduje to wyświetlenie listy wszystkich portów używanych przez wszystkie programy związane z NFS:
rpcinfo -p | awk '{print $3" "$4}' | sort -k2n | uniq
Za pomocą FERM można użyć Backticks, aby uzyskać porty z rpcinfo, na przykład:
Serwer:
proto tcp {saddr ($CLIENT) {
dport (`rpcinfo -p | perl -e 'while(<>){/\s+\d+\s+\d\s+(?:tcp)\s+(\d+)/ and $ports{$1}=1}; $, = " "; print sort(keys(%ports)),"\n"'`) ACCEPT; # NFS
}}
proto udp {saddr ($CLIENT) {
dport (`rpcinfo -p | perl -e 'while(<>){/\s+\d+\s+\d\s+(?:udp)\s+(\d+)/ and $ports{$1}=1}; $, = " "; print sort(keys(%ports)),"\n"'`) ACCEPT; # NFS
}}
Klient:
proto udp {saddr ($SERVER) {ACCEPT;}} # NFS
(Jeśli zamierzasz używać tylko TCP, potrzebujesz tylko proto tcp
części).
Do celów rejestracyjnych musiałem dodać uprawnienia dla portów 111, 2049 i 1048 dla konfiguracji, w której udział NFS jest eksportowany przez serwer Windows 2008 R2, a klientami są Ubuntu 12.04.4.
Mam nadzieję, że to komuś pomoże.