Сервери NFS і firewalld


16

Про це я не знайшов невдалого документа, тож почнемо його.

На хості CentOS 7.1 я пройшов linuxconfig HOW-TO , включаючи firewall-cmdзаписи, і у мене є файлова система, що експортується.

[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

Однак якщо я showmountвід клієнта, у мене все ще є проблеми.

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

Тепер, як я впевнений, що це проблема брандмауера? Легко. Вимкніть брандмауер. Сторона сервера:

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

І сторона клієнта:

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

Перезапустіть firewalld. Сторона сервера:

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

І сторона клієнта:

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

Отже, поїдемо до міста, адаптуючи команди iptables з сервера RHEL 6 NFS HOW-TO ...

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

Цього разу я отримую від клієнта дещо інше повідомлення про помилку:

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

Отже, я знаю, що я на вірному шляху. Сказавши це, чому я ніде не можу знайти остаточного підручника з цього приводу? Я не міг бути першою людиною, яка мала це зрозуміти!

Які firewall-cmdзаписи я пропускаю?

О, ще одна примітка. Мої /etc/sysconfig/nfsфайли на клієнті CentOS 6 та сервері CentOS 7 поки що не змінені. Я вважаю за краще не міняти (а підтримувати!) Їх, якщо це взагалі можливо.

Відповіді:


40

Цього має бути достатньо:

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

У моєму випадку недостатньо. У мене є два сервери NFS, перший передає правильно і підписаний клієнтами, другий, мабуть, транслює все в порядку, але його клієнт (перший сервер) не в змозі "показати" (експорт кріплення RPC: RPC: Неможливо prima; errno = Нема маршруту до хоста). Я повернусь сюди, якщо / коли я вирішу це.
Urhixidur

Виявляється, СЕРВЕРУ потрібні були три сервіси (nfs, mountd, rpc-bind), додані до брандмауера (не знаю, якщо клієнту також потрібні всі три; у моєму випадку просто трапляються всі три). У моєму випадку у клієнта (перший сервер NFS) його було, але у сервера (другий сервер NFS) відсутнє кріплення.
Urhixidur

@Urhixidur клієнту не потрібно цього, оскільки firewalld дозволяє вихідні з'єднання.
T0xicCode

Зверніть увагу на написання rpc-bind. Хоча я ввімкнув це за допомогою, systemctl enable rpcbindі systemctl start rpcbind, значить, мені повідомив cmd firewall Error: INVALID_SERVICE: rpcbind. Незабаром я зрозумів, що їй потрібен тире в цьому контексті! Вони справді однакові служби?
Qwertie

5

Після налаштування сервера NFS нам слід включити та запустити три сервіси:

  1. nfs-server.service
  2. rpcbind.service
  3. nfs-mountd.service (потрібен лише запуск)

А також дозволити такі сервіси на брандмауері сервера:

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

4

Щойно знайшли це - і воно працює, коли проблема полягає в тому, що SELinux блокує зчитування ~ / .ssh / санкціонованих_кеїв під час входу! По-перше, переконайтеся, що ваш файл ~ / .ssh / санкціонований_кейс належним чином заповнений, а його права та дозволи його папки встановлені правильно. Якщо ви запустите "setenforce 0" на хості призначення SSH і зможете увійти до цього хоста, не вводячи пароль, але не можете зробити це після введення "setenforce 1" на тому самому хості призначення, наступне може вирішити вашу проблему:

setsebool -P use_nfs_home_dirs 1

посилання: https://cassjohnston.wordpress.com/2015/06/12/selinux-nfs-home-directories/


0

Я використовую nfsv4 і прекрасно працює з цими рядками, припускаючи, що ваша зона "загальнодоступна", і ви використовуєте порти за замовчуванням 2049 і 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
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.