เซิร์ฟเวอร์ NFS และไฟร์วอลล์


16

ฉันไม่พบเอกสารสแลม dunk เกี่ยวกับเรื่องนี้ดังนั้นเรามาเริ่มกันเลย

บนโฮสต์ 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

รีสตาร์ทไฟร์วอลล์ ฝั่งเซิร์ฟเวอร์:

[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 วิธีการ ...

[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 สองเครื่องตัวแรกออกอากาศได้อย่างถูกต้องและสมัครรับข้อมูลจากไคลเอนต์แล้วตัวที่สองถ่ายทอดได้อย่างถูกต้อง แต่ลูกค้า (เซิร์ฟเวอร์ตัวแรก) ไม่สามารถ 'showmount' (ส่งออกเมาท์ rpc: RPC: ไม่สามารถ ได้รับ; errno = ไม่มีเส้นทางไปยังโฮสต์) ฉันจะกลับมาที่นี่ถ้า / เมื่อฉันแก้ปัญหานี้
Urhixidur

ปรากฎว่า SERVER ต้องการบริการสามอย่าง (nfs, mountd, rpc-bind) ที่เพิ่มเข้าไปในไฟร์วอลล์ของมัน (ไม่ทราบหากลูกค้าต้องการทั้งสามด้วยเช่นกันมันเพิ่งเกิดขึ้นมีทั้งสามอย่างในกรณีของฉัน) ในกรณีของฉันไคลเอนต์ (เซิร์ฟเวอร์ NFS แรก) มี แต่เซิร์ฟเวอร์ (เซิร์ฟเวอร์ NFS ที่สอง) ขาด Mountd
Urhixidur

@ Urhixidur ลูกค้าไม่ควรต้องการสิ่งเหล่านี้เพราะ firewalld อนุญาตการเชื่อมต่อขาออก
T0xicCode

สังเกตการสะกดของ rpc-bind ถึงแม้ว่าผมจะเปิดใช้งานด้วยsystemctl enable rpcbindและsystemctl start rpcbindไฟร์วอลล์-cmd 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 / authorized_keys ระหว่างการเข้าสู่ระบบ! ก่อนอื่นให้จัดวางไฟล์ ~ / .ssh / authorized_keys ของคุณไว้อย่างถูกต้องและการอนุญาตและการตั้งค่าการอนุญาตของโฟลเดอร์ถูกต้อง หากคุณเรียกใช้ "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
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.