การติดตั้ง NFS Server บน Ubuntu Server 26.04

การติดตั้ง NFS Server บน Ubuntu Server 26.04

แชร์ไฟล์ระหว่าง Linux Server อย่างไรให้เรียบง่าย

ในงานดูแลระบบจริง เรามักเจอสถานการณ์ที่ต้องการแชร์โฟลเดอร์จาก Server เครื่องหนึ่งให้เครื่อง Linux อื่น ๆ ใช้งานร่วมกัน เช่น แชร์ไฟล์ backup, แชร์ directory สำหรับ web server หลายเครื่อง, แชร์ไฟล์ ISO ภายใน Lab หรือใช้เป็น storage กลางสำหรับเครื่อง virtual machine

วิธีที่นิยมมากในโลก Linux คือ NFS หรือ Network File System เพราะตั้งค่าง่าย ทำงานได้ดีในระบบ Linux/Unix และเหมาะกับเครือข่ายภายในองค์กรหรือห้อง Lab

บทความนี้จะพาทำแบบ Hands-on ตั้งแต่ติดตั้ง NFS Server บน Ubuntu Server 26.04 LTS ไปจนถึงการ mount จากเครื่อง Client และทดสอบเขียนไฟล์จริง


NFS คืออะไร

NFS (Network File System) คือระบบแชร์ไฟล์ผ่านเครือข่ายที่ทำให้เครื่อง Client สามารถ mount โฟลเดอร์จาก Server แล้วใช้งานเหมือนเป็นโฟลเดอร์ภายในเครื่องของตนเอง

ตัวอย่างการใช้งานที่พบบ่อย

  • แชร์โฟลเดอร์ /data ให้ Server หลายเครื่องใช้งานร่วมกัน

  • ทำพื้นที่กลางสำหรับ Backup

  • ใช้ใน Lab Linux, DevOps, Docker, Kubernetes หรือ Proxmox

  • แชร์ไฟล์ระหว่าง Ubuntu Server, Rocky Linux และเครื่อง Linux อื่น ๆ

ในบทความนี้เราจะใช้แพ็กเกจหลักคือ

  • nfs-kernel-server สำหรับฝั่ง Server

  • nfs-common สำหรับฝั่ง Client


พื้นฐานที่จำเป็นก่อนเริ่ม

บทความนี้ทดสอบกับสภาพแวดล้อมตัวอย่างดังนี้

รายการ ค่าในตัวอย่าง
OS ฝั่ง Server Ubuntu Server 26.04 LTS
OS ฝั่ง Client Ubuntu Server 26.04 LTS หรือ Linux อื่น ๆ
IP Address ของ NFS Server 192.168.56.10
IP Address ของ Client 192.168.56.20
Network ที่อนุญาต 192.168.56.0/24
Shared Directory /srv/nfs/share
Package Server nfs-kernel-server
Package Client nfs-common

แนะนำ Screenshot: ภาพ topology เครือข่าย Server ↔ Client พร้อมระบุ IP Address

ก่อนเริ่มให้ตรวจสอบระบบก่อน

lsb_release -a

ตรวจสอบ kernel

uname -r

ตรวจสอบ version ของ package ที่จะติดตั้ง

apt policy nfs-kernel-server nfs-common

หมายเหตุ: version ของแพ็กเกจอาจเปลี่ยนตามช่วงเวลาที่ Ubuntu repository มีการ update ดังนั้นควรใช้ apt policy ตรวจสอบบนเครื่องจริงทุกครั้ง


ภาพรวม Lab ที่จะทำ

โครงสร้างที่เราจะสร้างคือ

แนวคิดคือ Server เปิดโฟลเดอร์ /srv/nfs/share ให้ Client ในวง 192.168.56.0/24 เข้ามาใช้งานแบบ read/write ได้


ขั้นตอนที่ 1: อัปเดตระบบบน NFS Server

เริ่มจากฝั่ง Server ก่อน

sudo apt update
sudo apt upgrade -y

คำอธิบาย

  • apt update ใช้ดึงรายการ package ล่าสุดจาก repository

  • apt upgrade -y ใช้อัปเดต package ที่ติดตั้งอยู่แล้ว

  • ตัวเลือก -y คือยืนยันการติดตั้งอัตโนมัติ

⚠️ ข้อควรระวัง: ถ้าเป็น Production Server ควรตรวจสอบรายการ package ก่อน upgrade และวางแผน maintenance window ให้เหมาะสม


ขั้นตอนที่ 2: ติดตั้ง NFS Server

ติดตั้ง package สำหรับ NFS Server

sudo apt install -y nfs-kernel-server

ตรวจสอบสถานะ service

sudo systemctl status nfs-server --no-pager

ถ้า service ยังไม่ทำงาน ให้สั่ง start และ enable

sudo systemctl enable --now nfs-server

คำอธิบาย:

  • enable ทำให้ service เริ่มทำงานอัตโนมัติหลัง reboot

  • --now สั่งเริ่ม service ทันที

  • nfs-server คือ systemd service หลักของ NFS Server

แนะนำ Screenshot: หน้าจอ systemctl status nfs-server ที่แสดงสถานะ active (exited) หรือ active


ขั้นตอนที่ 3: สร้าง Directory สำหรับแชร์ไฟล์

สร้างโฟลเดอร์ที่ต้องการแชร์

sudo mkdir -p /srv/nfs/share

กำหนดสิทธิ์เบื้องต้นให้ directory นี้เขียนไฟล์ได้

sudo chown nobody:nogroup /srv/nfs/share
sudo chmod 777 /srv/nfs/share

คำอธิบาย:

  • /srv/nfs/share คือ directory ที่จะ export ผ่าน NFS

  • nobody:nogroup ใช้เป็น user/group กลางในกรณีที่ไม่ได้ map user แบบละเอียด

  • chmod 777 ใช้เพื่อให้ทดสอบเขียนไฟล์ได้ง่ายใน Lab

⚠️ ข้อควรระวัง: chmod 777 เหมาะสำหรับ Lab หรือการทดสอบเท่านั้น ไม่ควรใช้กับ Production โดยไม่จำกัดสิทธิ์เพิ่มเติม เพราะทุกคนที่เข้าถึง share ได้จะอ่านและเขียนไฟล์ได้

สร้างไฟล์ทดสอบใน share

echo "Hello from NFS Server" | sudo tee /srv/nfs/share/readme.txt

ตรวจสอบไฟล์

ls -lah /srv/nfs/share

ขั้นตอนที่ 4: ตั้งค่า /etc/exports

ไฟล์ /etc/exports คือไฟล์กำหนดว่า Server จะแชร์ directory ใด ให้ใคร และด้วย permission แบบใด

เปิดไฟล์

sudo nano /etc/exports

เพิ่มบรรทัดนี้เข้าไป

/srv/nfs/share 192.168.56.0/24(rw,sync,no_subtree_check)

ความหมายของ option:

Option ความหมาย
rw อนุญาตให้อ่านและเขียน
sync เขียนข้อมูลลง disk แบบ synchronous ลดความเสี่ยงข้อมูลสูญหาย
no_subtree_check ลดปัญหาการตรวจสอบ path ย่อย เหมาะกับการ share directory ทั่วไป

สิ่งสำคัญคือ ห้ามเว้นวรรคระหว่าง IP/Subnet กับวงเล็บ option

ถูกต้อง

192.168.56.0/24(rw,sync,no_subtree_check)

ไม่ควรเขียนแบบนี้

192.168.56.0/24 (rw,sync,no_subtree_check)

เพราะอาจทำให้ NFS ตีความผิดได้


ขั้นตอนที่ 5: Apply ค่า Export

หลังแก้ไข /etc/exports แล้ว ให้สั่ง export ใหม่

sudo exportfs -rav

คำอธิบาย

  • -r re-export รายการใหม่

  • -a apply ทุก export ที่กำหนดไว้

  • -v แสดงผลแบบละเอียด

ตรวจสอบรายการ export

sudo exportfs -v

ตัวอย่างผลลัพธ์ที่ควรเห็น

/srv/nfs/share
        192.168.56.0/24(sync,wdelay,hide,no_subtree_check,sec=sys,rw,secure,root_squash,no_all_squash)

Restart service อีกครั้ง

sudo systemctl restart nfs-server

ขั้นตอนที่ 6: เปิด Firewall ด้วย UFW

ถ้า Server ใช้ UFW ให้เปิดเฉพาะวง network ที่อนุญาตเท่านั้น

sudo ufw allow from 192.168.56.0/24 to any port nfs

ตรวจสอบสถานะ firewall

sudo ufw status verbose

ตัวอย่างผลลัพธ์

2049                       ALLOW IN    192.168.56.0/24

คำอธิบาย:

  • NFS ใช้ port หลักคือ 2049

  • คำสั่งนี้อนุญาตเฉพาะเครื่องในวง 192.168.56.0/24

  • ไม่ควรเปิด NFS ให้ทุก IP โดยไม่จำเป็น

⚠️ ข้อควรระวัง: ไม่แนะนำให้เปิด NFS ออก Internet โดยตรง ควรใช้เฉพาะ private network, VPN หรือ network ที่ควบคุมได้เท่านั้น


ขั้นตอนที่ 7: ติดตั้ง NFS Client

ไปที่เครื่อง Client แล้วติดตั้ง package สำหรับ mount NFS

sudo apt update
sudo apt install -y nfs-common

สร้าง mount point

sudo mkdir -p /mnt/nfs-share

ทดสอบ mount จาก NFS Server

sudo mount -t nfs 192.168.56.10:/srv/nfs/share /mnt/nfs-share

ตรวจสอบว่า mount สำเร็จหรือไม่

df -h | grep nfs

หรือใช้คำสั่ง

mount | grep nfs

ตรวจสอบไฟล์จาก Server

ls -lah /mnt/nfs-share
cat /mnt/nfs-share/readme.txt

ถ้าเห็นข้อความ Hello from NFS Server แปลว่า Client สามารถอ่านไฟล์จาก NFS Server ได้แล้ว

แนะนำ Screenshot: หน้าจอ Client ที่ mount แล้วเห็นไฟล์ readme.txt


ขั้นตอนที่ 8: ทดสอบเขียนไฟล์จาก Client

บนเครื่อง Client ให้ลองสร้างไฟล์ใหม่

echo "Created from NFS Client" | sudo tee /mnt/nfs-share/client-test.txt

ตรวจสอบไฟล์

ls -lah /mnt/nfs-share
cat /mnt/nfs-share/client-test.txt

กลับไปที่เครื่อง Server แล้วตรวจสอบว่าไฟล์ถูกสร้างจริงหรือไม่

ls -lah /srv/nfs/share
cat /srv/nfs/share/client-test.txt

ถ้าเห็นไฟล์ client-test.txt ทั้งฝั่ง Client และ Server แสดงว่า NFS Share ทำงานเรียบร้อย


ขั้นตอนที่ 9: ตั้งค่า Mount อัตโนมัติด้วย /etc/fstab

ถ้าต้องการให้ Client mount NFS อัตโนมัติหลัง reboot ให้แก้ไขไฟล์ /etc/fstab

บนเครื่อง Client เปิดไฟล์

sudo nano /etc/fstab

เพิ่มบรรทัดนี้

192.168.56.10:/srv/nfs/share /mnt/nfs-share nfs defaults,_netdev 0 0

คำอธิบาย

ค่า ความหมาย
192.168.56.10:/srv/nfs/share path ของ NFS Server
/mnt/nfs-share mount point ฝั่ง Client
nfs filesystem type
defaults ใช้ค่า mount พื้นฐาน
_netdev บอกระบบว่าเป็น network filesystem ควรรอ network ก่อน mount

ทดสอบ fstab โดยไม่ต้อง reboot

sudo umount /mnt/nfs-share
sudo mount -a

ตรวจสอบอีกครั้ง

df -h | grep nfs

⚠️ ข้อควรระวัง: ก่อน reboot ควรใช้ sudo mount -a ทดสอบเสมอ ถ้า /etc/fstab ผิด อาจทำให้ระบบ boot ช้าหรือค้างรอ mount ได้


ขั้นตอนที่ 10: ใช้ NFSv4.2 แบบระบุ version

ถ้าต้องการระบุ version ของ NFS ให้ชัดเจน สามารถ mount แบบนี้ได้

sudo mount -t nfs -o vers=4.2 192.168.56.10:/srv/nfs/share /mnt/nfs-share

ตรวจสอบ version ที่ใช้งาน

nfsstat -m

ตัวอย่างผลลัพธ์อาจเห็น option เช่น

vers=4.2

ถ้า Client หรือ Server ไม่รองรับ NFSv4.2 ให้ลองลดเป็น vers=4.1 หรือ vers=4

sudo mount -t nfs -o vers=4.1 192.168.56.10:/srv/nfs/share /mnt/nfs-share

ตัวอย่าง Export แบบ Read-only

ถ้าต้องการแชร์ไฟล์ให้อ่านอย่างเดียว เช่น โฟลเดอร์ ISO หรือเอกสารกลาง ให้ตั้งค่าแบบนี้

/srv/nfs/share 192.168.56.0/24(ro,sync,no_subtree_check)

จากนั้น apply ค่าใหม่

sudo exportfs -rav
sudo systemctl restart nfs-server

คำอธิบาย

  • ro คือ read-only

  • Client จะอ่านไฟล์ได้ แต่เขียนหรือลบไฟล์ไม่ได้


ตัวอย่าง Export ให้เฉพาะ Client เครื่องเดียว

ถ้าต้องการให้เฉพาะเครื่อง 192.168.56.20 เข้าใช้งานได้ ให้แก้เป็น

/srv/nfs/share 192.168.56.20(rw,sync,no_subtree_check)

Apply ค่าใหม่

sudo exportfs -rav

รูปแบบนี้เหมาะกว่าในงาน Production เพราะจำกัดสิทธิ์แคบกว่าเปิดทั้ง subnet


เรื่อง Permission ที่ควรรู้

ปัญหาที่พบบ่อยของ NFS คือ “mount ได้ แต่เขียนไฟล์ไม่ได้” ซึ่งมักเกิดจาก permission และ ownership ของ directory ฝั่ง Server

ตรวจสอบ permission บน Server

ls -ld /srv/nfs/share

ถ้าต้องการให้ user เฉพาะกลุ่มเขียนได้ ควรสร้าง group แยก เช่น nfsusers

sudo groupadd nfsusers
sudo chgrp nfsusers /srv/nfs/share
sudo chmod 2775 /srv/nfs/share

คำอธิบาย

  • chgrp nfsusers เปลี่ยน group owner

  • chmod 2775 ให้สมาชิก group เขียนได้ และไฟล์ใหม่จะสืบทอด group เดิม

  • วิธีนี้ปลอดภัยกว่า chmod 777

แต่ต้องจัดการ UID/GID ของ user ให้สอดคล้องกันระหว่าง Server และ Client ด้วย โดยเฉพาะระบบที่มีหลายเครื่อง


คำสั่ง Verify ที่ควรรู้

ตรวจสอบ service

sudo systemctl status nfs-server --no-pager

ตรวจสอบ export

sudo exportfs -v

ตรวจสอบ port NFS

ss -tulpn | grep 2049

ตรวจสอบ mount บน Client

mount | grep nfs

ตรวจสอบพื้นที่ disk

df -h

ตรวจสอบ NFS mount option

nfsstat -m

ตรวจสอบ log

journalctl -u nfs-server --no-pager -n 50

ปัญหาที่พบบ่อย

1. Client mount ไม่ได้

อาการ

mount.nfs: Connection timed out

แนวทางตรวจสอบ

ping 192.168.56.10

ตรวจสอบ firewall บน Server

sudo ufw status verbose

ตรวจสอบว่า NFS ทำงานหรือไม่

sudo systemctl status nfs-server --no-pager

2. Permission denied

อาการ

mount.nfs: access denied by server while mounting

ตรวจสอบ /etc/exports

cat /etc/exports

ตรวจสอบว่า subnet หรือ IP ตรงกับ Client หรือไม่

ip addr

Apply export ใหม่

sudo exportfs -rav

3. Mount ได้ แต่เขียนไฟล์ไม่ได้

ตรวจสอบ permission ของ directory ฝั่ง Server

ls -ld /srv/nfs/share

ทดสอบแบบ Lab

sudo chmod 777 /srv/nfs/share

ถ้าเขียนได้หลังเปลี่ยน permission แปลว่าปัญหาอยู่ที่ permission/ownership ไม่ใช่ NFS service

⚠️ ข้อควรระวัง: หลังทดสอบเสร็จควรปรับ permission ให้เหมาะสม ไม่ควรปล่อย 777 ในระบบใช้งานจริง


4. แก้ /etc/exports แล้วแต่ค่าไม่เปลี่ยน

ให้สั่ง re-export ใหม่

sudo exportfs -rav

แล้วตรวจสอบ

sudo exportfs -v

ถ้ายังไม่เปลี่ยน ให้ restart service

sudo systemctl restart nfs-server

แนวทาง Security สำหรับ NFS Server

สำหรับระบบจริง ควรพิจารณาแนวทางต่อไปนี้

  1. เปิด NFS เฉพาะ private network เท่านั้น

  2. จำกัดสิทธิ์ด้วย IP Address หรือ subnet ให้แคบที่สุด

  3. ใช้ ro หากไม่จำเป็นต้องเขียนไฟล์

  4. หลีกเลี่ยง no_root_squash ถ้าไม่มีเหตุผลจำเป็น

  5. ใช้ firewall ควบคุม port

  6. วาง NFS Server หลัง VPN หรือ network ภายใน

  7. ตรวจสอบ permission ของ directory อย่างสม่ำเสมอ

  8. สำรองข้อมูล share directory เป็นประจำ

โดยเฉพาะ option no_root_squash ควรระวังมาก เพราะจะทำให้ root จากฝั่ง Client มีสิทธิ์แบบ root บนไฟล์ที่แชร์ ซึ่งอาจเป็นความเสี่ยงด้านความปลอดภัย


สรุป

NFS Server เป็นเครื่องมือสำคัญสำหรับการแชร์ไฟล์ในระบบ Linux โดยเฉพาะในงาน Server, Lab, DevOps และระบบภายในองค์กร จุดเด่นคือใช้งานง่าย ไม่ซับซ้อน และทำงานร่วมกับ Linux Client ได้ดี

ในบทความนี้เราได้ติดตั้ง nfs-kernel-server บน Ubuntu Server 26.04, สร้าง shared directory, ตั้งค่า /etc/exports, เปิด firewall, mount จาก Client และทดสอบอ่านเขียนไฟล์จริงเรียบร้อยแล้ว

สิ่งที่ควรจำคือ NFS ไม่ใช่แค่ติดตั้งแล้วจบ แต่ต้องดูเรื่อง network, permission, firewall และ security ควบคู่กันเสมอ โดยเฉพาะระบบ Production ที่มีข้อมูลสำคัญ



Write by Dr.Arnut Ruttanatirakul
SysAdmin Knowledge
https://www.sysadmin.in.th
June 14, 2026