Servidores NFS y Firewalld

16

No he encontrado un documento slam-dunk sobre esto, así que comencemos uno.

En un host CentOS 7.1, revisé el COMO de linuxconfig , incluidas las firewall-cmdentradas, y tengo un sistema de archivos exportable.

[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

Sin embargo, si soy showmountdel cliente, todavía tengo un problema.

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

Ahora, ¿cómo estoy seguro de que este es un problema de firewall? Fácil. Apaga el firewall. Lado del servidor:

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

Y lado del cliente:

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

Reiniciar Firewalld. Lado del servidor:

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

Y lado del cliente:

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

Entonces, vayamos a la ciudad, adaptando los comandos de iptables desde un servidor RHEL 6 NFS COMO ...

[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: 

Esta vez, recibo un mensaje de error ligeramente diferente del cliente:

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

Entonces, sé que estoy en el camino correcto. Dicho esto, ¿por qué no puedo encontrar un tutorial definitivo sobre esto en ningún lado? ¡No puedo haber sido la primera persona en tener que resolver esto!

¿Qué firewall-cmdentradas me estoy perdiendo?

Oh, otra nota. Mis /etc/sysconfig/nfsarchivos en el cliente CentOS 6 y el servidor CentOS 7 no han sido modificados, hasta ahora. Preferiría no tener que cambiarlos (¡y mantenerlos!), Si es posible.

dafydd
fuente

Respuestas:

40

Esto debería ser suficiente:

firewall-cmd --permanent --add-service=nfs
firewall-cmd --permanent --add-service=mountd
firewall-cmd --permanent --add-service=rpc-bind
firewall-cmd --reload
tom
fuente
No es suficiente en mi caso. Tengo dos servidores NFS, el primero se transmite correctamente y está suscrito por sus clientes, el segundo aparentemente está transmitiendo correctamente, pero su cliente (el primer servidor) no puede 'showmount' (exportación de montaje rpc: RPC: no se puede recibir; errno = No hay ruta al host). Volveré aquí si / cuando resuelva esto.
Urhixidur
Resulta que el SERVIDOR necesitaba los tres servicios (nfs, mountd, rpc-bind) agregados a su firewall (no sé si el cliente también necesita los tres; en mi caso, simplemente tiene los tres). En mi caso, el cliente (primer servidor NFS) lo tenía pero faltaba el servidor (segundo servidor NFS).
Urhixidur
@Urhixidur el cliente no debería necesitarlos porque firewalld permite conexiones salientes.
T0xicCode
Tenga en cuenta la ortografía de rpc-bind. Aunque lo habilité con systemctl enable rpcbindy systemctl start rpcbind, firewall-cmd me lo dijo Error: INVALID_SERVICE: rpcbind. ¡Pronto me di cuenta de que necesita un toque en este contexto! ¿Son realmente el mismo servicio?
Qwertie
5

Después de configurar el servidor NFS, debemos habilitar e iniciar tres servicios:

  1. nfs-server.service
  2. rpcbind.service
  3. nfs-mountd.service (solo se necesita iniciar)

Y también permita estos servicios en el servidor de seguridad del servidor:

# firewall-cmd --permanent --add-service=nfs
# firewall-cmd --permanent --add-service=rpcbind
# firewall-cmd --permanent --add-service=mountd
# firewall-cmd --reload
Aditya.V
fuente
4

¡Acabo de encontrar esto y funciona cuando el problema es que SELinux bloquea la lectura de ~ / .ssh / Authorizedkeys durante el inicio de sesión! Primero, asegure que su archivo ~ / .ssh / Authorised_keys esté correctamente poblado y que sus permisos y los permisos de su carpeta estén configurados correctamente. Si luego ejecuta "setenforce 0" en el host de destino SSH y puede iniciar sesión en ese host sin ingresar una contraseña, pero no puede hacerlo después de ingresar "setenforce 1" en ese mismo host de destino, lo siguiente puede solucionar su problema:

setsebool -P use_nfs_home_dirs 1

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

JamesM
fuente
0

Uso nfsv4 y funciona bien con esas líneas, suponiendo que su zona sea "pública" y que esté usando los puertos predeterminados 2049 y 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
elbarna
fuente