Serwery NFS i firewalld


16

Nie znalazłem na ten temat dokumentu, więc zacznijmy jeden.

Na hoście CentOS 7.1 przejrzałem Linuksconfig HOW-TO , w tym firewall-cmdwpisy, i mam system plików do eksportu.

[root@<server> ~]# firewall-cmd --list-all
internal (default, active)
  interfaces: enp5s0
  sources: 192.168.10.0/24
  services: dhcpv6-client ipp-client mdns ssh
  ports: 2049/tcp
  masquerade: no
  forward-ports: 
  rich rules: 

[root@<server> ~]# showmount -e localhost
Export list for localhost:
/export/home/<user> *.localdomain

Jednak jeśli jestem showmountod klienta, nadal mam problem.

[root@<client> ~]# showmount -e <server>.localdomain
clnt_create: RPC: Port mapper failure - Unable to receive: errno 113 (No route to host)

Skąd mam pewność, że jest to problem z zaporą? Łatwo. Wyłącz zaporę ogniową. Po stronie serwera:

[root@<server> ~]# systemctl stop firewalld

A po stronie klienta:

[root@<client> ~]# showmount -e <server>.localdomain
Export list for <server>.localdomain:
/export/home/<server> *.localdomain

Uruchom ponownie zaporę ogniową. Po stronie serwera:

[root@<server> ~]# systemctl start firewalld

A po stronie klienta:

[root@<client> ~]# showmount -e <server>.localdomain
clnt_create: RPC: Port mapper failure - Unable to receive: errno 113 (No route to host)

Chodźmy do miasta, dostosowując polecenia iptables z serwera NH RHEL 6 - JAK ...

[root@ ~]# firewall-cmd \
>  --add-port=111/tcp \
>  --add-port=111/udp \
>  --add-port=892/tcp \
>  --add-port=892/udp \
>  --add-port=875/tcp \
>  --add-port=875/udp \
>  --add-port=662/tcp \
>  --add-port=662/udp \
>  --add-port=32769/udp \
>  --add-port=32803/tcp
success

[root@<server> ~]# firewall-cmd \
>  --add-port=111/tcp \
>  --add-port=111/udp \
>  --add-port=892/tcp \
>  --add-port=892/udp \
>  --add-port=875/tcp \
>  --add-port=875/udp \
>  --add-port=662/tcp \
>  --add-port=662/udp \
>  --add-port=32769/udp \
>  --add-port=32803/tcp \
>  --permanent
success

[root@<server> ~]# firewall-cmd --list-all
internal (default, active)
  interfaces: enp5s0
  sources: 192.168.0.0/24
  services: dhcpv6-client ipp-client mdns ssh
  ports: 32803/tcp 662/udp 662/tcp 111/udp 875/udp 32769/udp 875/tcp 892/udp 2049/tcp 892/tcp 111/tcp
  masquerade: no
  forward-ports: 
  rich rules: 

Tym razem otrzymuję nieco inny komunikat o błędzie od klienta:

[root@<client> ~]# showmount -e <server>.localdomain
rpc mount export: RPC: Unable to receive; errno = No route to host

Wiem, że jestem na dobrej drodze. To powiedziawszy, dlaczego nigdzie nie mogę znaleźć ostatecznego samouczka na ten temat? Nie mogłem być pierwszą osobą, która to wymyśliła!

Jakie firewall-cmdwpisy mi brakuje?

Och, jeszcze jedna uwaga. Moje /etc/sysconfig/nfspliki na kliencie CentOS 6 i serwerze CentOS 7 są jak dotąd niezmodyfikowane. Wolałbym nie zmieniać ich (i utrzymywać!), Jeśli to w ogóle możliwe.

Odpowiedzi:


40

To powinno wystarczyć:

firewall-cmd --permanent --add-service=nfs
firewall-cmd --permanent --add-service=mountd
firewall-cmd --permanent --add-service=rpc-bind
firewall-cmd --reload

W moim przypadku za mało. Mam dwa serwery NFS, pierwszy nadaje poprawnie i jest subskrybowany przez swoich klientów, drugi najwyraźniej nadaje się dobrze, ale jego klient (pierwszy serwer) nie jest w stanie „pokazać” (eksport rpc mount: RPC: Nie można receive; errno = Brak trasy do hosta). Wrócę tutaj, jeśli / kiedy to rozwiążę.
Urhixidur

Okazuje się, że SERWER potrzebował trzech usług (nfs, mountd, rpc-bind) dodanych do swojej zapory ogniowej (nie wiem, jeśli klient również potrzebuje wszystkich trzech; po prostu zdarza się, że mają wszystkie trzy w moim przypadku). W moim przypadku klient (pierwszy serwer NFS) miał go, ale serwer (drugi serwer NFS) nie był zamontowany.
Urhixidur

@ Urhixidur klient nie powinien ich potrzebować, ponieważ firewalld zezwala na połączenia wychodzące.
T0xicCode

Zwróć uwagę na pisownię rpc-bind. Chociaż włączyłem to za pomocą systemctl enable rpcbindi systemctl start rpcbind, firewall-cmd powiedział mi Error: INVALID_SERVICE: rpcbind. Wkrótce zdałem sobie sprawę, że w tym kontekście potrzebuje odrobiny! Czy to naprawdę ta sama usługa?
Qwertie,

5

Po skonfigurowaniu serwera NFS powinniśmy włączyć i uruchomić trzy usługi:

  1. nfs-server.service
  2. rpcbind.service
  3. nfs-mountd.service (wymagany jest tylko start)

A także zezwól na te usługi w zaporze serwera:

# firewall-cmd --permanent --add-service=nfs
# firewall-cmd --permanent --add-service=rpcbind
# firewall-cmd --permanent --add-service=mountd
# firewall-cmd --reload

4

Właśnie to znalazłem - i działa, gdy problem polega na tym, że SELinux blokuje odczyt ~ / .ssh / uprawniony_ kluczy podczas logowania! Po pierwsze, upewnij się, że plik ~ / .ssh / Author_keys jest poprawnie wypełniony, a jego uprawnienia i uprawnienia do folderu są ustawione poprawnie. Jeśli następnie uruchomisz „setenforce 0” na docelowym hoście SSH i jesteś w stanie zalogować się na tym hoście bez podawania hasła, ale nie możesz tego zrobić po wprowadzeniu „setenforce 1” na tym samym hoście docelowym, następujące problemy mogą rozwiązać problem:

setsebool -P use_nfs_home_dirs 1

ref: https://cassjohnston.wordpress.com/2015/06/12/selinux-nfs-home-directories/


0

Używam nfsv4 i działa dobrze z tymi liniami, zakładając, że twoja strefa jest „publiczna” i używasz domyślnych portów 2049 i 4001

firewall-cmd --permanent --add-service=nfs --zone=public
firewall-cmd --permanent --add-service=mountd --zone=public
firewall-cmd --permanent --add-service=rpc-bind --zone=public
firewall-cmd --permanent --add-port=4001/udp --zone=public
firewall-cmd --permanent --add-port=4001/tcp --zone=public
firewall-cmd --permanent --add-port=2049/tcp --zone=public
firewall-cmd --permanent --add-port=2049/udp --zone=public
firewall-cmd --reload
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.