← สารบัญบทเรียน M10 · Networking
M10 · หัวข้อสอบ

ตั้งค่าเครือข่ายบน RHEL 9

เซิร์ฟเวอร์ที่คุยกับโลกภายนอกไม่ได้ ก็เหมือนบ้านที่ไม่มีเลขที่ — ไม่มีใครส่งของถึง บทนี้สอนตั้งค่า IP, gateway, DNS และชื่อเครื่อง ให้เซิร์ฟเวอร์ของคุณออนไลน์ได้อย่างถูกต้องและถาวร

🌱 บทนี้เขียนเพื่อคนที่ไม่เคยแตะ Linux มาก่อนเลย

1ทำไมต้องตั้งค่าเครือข่าย?

เซิร์ฟเวอร์ตัวจริงแทบไม่มีประโยชน์เลยถ้ามันอยู่คนเดียว — มันต้องคุยกับเครื่องอื่นได้ ทั้งให้คนเข้ามาใช้เว็บไซต์, รับ–ส่งอีเมล, ดึงข้อมูลจากฐานข้อมูล หรือแม้แต่ดาวน์โหลดโปรแกรมมาติดตั้ง ทั้งหมดนี้เกิดขึ้นผ่าน เครือข่าย (network)

แต่เครื่องจะคุยกับใครได้ ก็ต้อง “ตั้งค่าให้ถูก” เสียก่อน — ต้องมีที่อยู่ของตัวเอง รู้ว่าจะออกไปโลกภายนอกทางไหน และรู้วิธีแปลชื่อเว็บเป็นตัวเลข บทนี้จะพาทำทีละขั้น

🎯 ข้อสอบ RHCSA ออกเรื่องนี้แทบทุกครั้ง

โจทย์ยอดฮิตคือ “ตั้ง static IP ให้เครื่องนี้เป็น ... gateway ... DNS ...” และที่สำคัญที่สุด — ค่าที่ตั้งต้อง อยู่หลังรีบูตเครื่อง (persistent) ด้วย ไม่ใช่หายไปเมื่อปิดเปิดใหม่ จุดนี้คนพลาดเยอะมาก เดี๋ยวเราย้ำกันอีกที

2ศัพท์พื้นฐาน — รู้จัก 5 ตัวนี้ก่อน

ก่อนจะลงมือพิมพ์คำสั่ง เรามาทำความรู้จักศัพท์ 5 คำที่ต้องเจอตลอดบทนี้ จะอธิบายด้วยภาพ “บ้านเลขที่” ให้เห็นภาพง่ายๆ

💡 เปรียบเทียบให้เห็นภาพ: ระบบไปรษณีย์

ลองนึกว่าเครือข่ายก็เหมือนระบบส่งจดหมายในเมืองหนึ่ง — ทุกอย่างหมุนรอบ เลขที่บ้าน และ การรู้ว่าจะส่งของออกไปทางไหน

IP address
เลขที่อยู่ของเครื่อง เช่น 192.168.1.50 เหมือนบ้านเลขที่ — แต่ละเครื่องในเครือข่ายต้องมีเลขนี้ไม่ซ้ำกัน คนถึงจะส่งของมาถูกบ้าน
Subnet / netmask
ขอบเขตของ “หมู่บ้าน” เดียวกัน เขียนแบบสั้นว่า /24 ต่อท้าย IP (เช่น 192.168.1.50/24) แปลว่าเครื่องที่ขึ้นต้นด้วย 192.168.1.x อยู่หมู่บ้านเดียวกัน คุยกันตรงๆ ได้เลย
Gateway
ประตูออกจากหมู่บ้านสู่โลกภายนอก เช่น 192.168.1.1 ถ้าอยากส่งของไปบ้านที่อยู่คนละหมู่บ้าน (คนละเครือข่าย เช่นออกอินเทอร์เน็ต) ต้องส่งผ่านประตูนี้
DNS
สมุดโทรศัพท์ของอินเทอร์เน็ต เครื่องคุยกันด้วยตัวเลข IP แต่คนจำชื่อ google.com ได้ง่ายกว่า — DNS คือตัวแปลชื่อเว็บ → เป็น IP ให้ เช่น 8.8.8.8 เป็นเซิร์ฟเวอร์ DNS ที่ใช้กันบ่อย
Hostname
ชื่อของเครื่องเรา เช่น server1.example.com เหมือนชื่อเรียกบ้าน ทำให้คนจำและอ้างถึงเครื่องได้ง่ายกว่าตัวเลข
📌 สรุปสั้นๆ ให้จำ

IP = เลขที่บ้าน · subnet = หมู่บ้าน · gateway = ประตูออกเมือง · DNS = สมุดโทรศัพท์แปลชื่อ↔เลข · hostname = ชื่อเรียกบ้าน เห็นภาพแล้วใช่ไหม? ที่เหลือคือแค่ “บอกค่าพวกนี้ให้เครื่องรู้”

3NetworkManager & nmcli — เครื่องมือหลักของ RHEL 9

บน RHEL 9 มีโปรแกรมตัวหนึ่งคอยดูแลเรื่องเครือข่ายทั้งหมดชื่อ NetworkManager — มันทำงานเบื้องหลังตลอดเวลา คอยจัดการการเชื่อมต่อทุกเส้น และเครื่องมือที่เราใช้สั่งงานมันคือคำสั่ง nmcli (ย่อมาจาก NetworkManager Command Line Interface)

หัวใจคือ “connection profile”

แนวคิดสำคัญที่สุดของบทนี้คือ connection profile (โปรไฟล์การเชื่อมต่อ) — มันคือ “ชุดการตั้งค่า” ที่บันทึกไว้ว่าการ์ดเน็ตใบนี้ควรใช้ IP อะไร gateway อะไร DNS อะไร

💡 เปรียบเทียบให้เห็นภาพ

connection profile ก็เหมือน โพรไฟล์ Wi-Fi ที่บันทึกไว้ในมือถือ — คุณตั้งครั้งเดียวว่าเชื่อมต่อยังไง ใส่รหัสยังไง พอบันทึกแล้วมันจะจำไว้ ครั้งหน้าก็แค่ “เปิดใช้” โพรไฟล์นั้นอีกที ไม่ต้องตั้งใหม่

เช่นเดียวกัน — เราแก้ค่าในโพรไฟล์ด้วย nmcli con mod แล้วค่อยสั่งให้มันทำงานด้วย nmcli con up

📌 ทำไมถึงสำคัญต่อข้อสอบ?

เพราะค่าที่เก็บใน connection profile จะถูก เขียนลงไฟล์บนดิสก์ มันจึงอยู่ถาวรหลังรีบูต ต่างจากการพิมพ์คำสั่งแก้ IP ตรงๆ ที่หายเมื่อปิดเครื่อง — ข้อสอบต้องการแบบถาวรเท่านั้น

4ดูสถานะเครือข่ายตอนนี้

ก่อนจะแก้อะไร เราต้อง “ดูของเดิม” ให้เป็นก่อน — ต้องรู้ว่าเครื่องมีการ์ดเน็ตใบไหนบ้าง ชื่อ connection ว่าอะไร และตอนนี้ใช้ IP อะไรอยู่ มี 4 คำสั่งที่ใช้บ่อย

nmcli device status — มีการ์ดเน็ตใบไหนบ้าง

⌨️ ลองดู
[root@server1 ~]# nmcli device status
DEVICE  TYPE      STATE      CONNECTION
ens160  ethernet  connected  System ens160
lo      loopback  unmanaged  --

คอลัมน์ DEVICE คือชื่อการ์ดเน็ต (เช่น ens160) ส่วน CONNECTION คือ ชื่อ connection profile ที่ผูกกับมันอยู่ — จำชื่อนี้ไว้ให้ดี เพราะต้องใช้พิมพ์ในคำสั่งต่อไป

nmcli connection show — มีโพรไฟล์อะไรบ้าง

⌨️ ลองดู
[root@server1 ~]# nmcli connection show
NAME          UUID                                  TYPE      DEVICE
System ens160 1b2c3d4e-...                         ethernet  ens160

แสดงรายการ connection profile ทั้งหมดที่มี ชื่อในคอลัมน์ NAME คือสิ่งที่เราจะอ้างถึงในคำสั่งแก้ค่า เขียนย่อ nmcli con show ก็ได้

ip addr show — ดู IP ที่ใช้อยู่จริง

⌨️ ลองดู (เขียนย่อว่า ip a ก็ได้)
[root@server1 ~]# ip addr show ens160
2: ens160: <BROADCAST,MULTICAST,UP> mtu 1500 ...
    inet 192.168.1.50/24 brd 192.168.1.255 scope global ens160

บรรทัด inet บอก IP ที่เครื่องใช้อยู่ตอนนี้จริงๆ (192.168.1.50/24) — ใช้คำสั่งนี้ตรวจว่าค่าที่เราตั้งมีผลแล้วหรือยัง

ip route — gateway อยู่ตรงไหน

⌨️ ลองดู
[root@server1 ~]# ip route
default via 192.168.1.1 dev ens160 proto static metric 100
192.168.1.0/24 dev ens160 proto kernel scope link src 192.168.1.50

บรรทัด default via บอกว่า “ประตูออกเมือง” (gateway) คือ 192.168.1.1 ถ้าไม่มีบรรทัด default เลย แปลว่าเครื่องออกอินเทอร์เน็ตไม่ได้

5ตั้ง Static IP — หัวใจของบทนี้ (ออกสอบแน่!)

นี่คือส่วนที่สำคัญที่สุด — การกำหนด IP ให้เครื่องแบบ “คงที่” (static) ไม่ใช่รับมาอัตโนมัติจาก DHCP เราจะแก้ค่าทีละบรรทัดลงใน connection profile แล้วค่อยสั่งให้มีผล

สมมติว่า connection ของเราชื่อ "System ens160" (ดูได้จากคำสั่งในข้อ 4) เราจะตั้งให้:

⌨️ พิมพ์ทีละบรรทัด
[root@server1 ~]# nmcli con mod "System ens160" ipv4.addresses 192.168.1.50/24
[root@server1 ~]# nmcli con mod "System ens160" ipv4.gateway 192.168.1.1
[root@server1 ~]# nmcli con mod "System ens160" ipv4.dns 8.8.8.8
[root@server1 ~]# nmcli con mod "System ens160" ipv4.method manual
[root@server1 ~]# nmcli con up "System ens160"
Connection successfully activated
ipv4.addressesกำหนด IP + subnet ของเครื่อง (อย่าลืม /24 ต่อท้าย)
ipv4.gatewayกำหนดประตูออกเมือง
ipv4.dnsกำหนดสมุดโทรศัพท์ (DNS) — ใส่หลายตัวคั่นด้วย comma เช่น "8.8.8.8 1.1.1.1"
ipv4.method manualสำคัญมาก! บอกว่า “ฉันจะกำหนด IP เอง” ไม่ใช่รอรับจาก DHCP — ถ้าลืมบรรทัดนี้ ค่า IP ที่ตั้งไว้จะไม่ถูกใช้
nmcli con upสั่งให้ค่าใหม่มีผลทันที — เพราะคำสั่ง mod แค่ “เขียนลงโพรไฟล์” แต่ยังไม่เริ่มใช้จนกว่าจะ up (หรือรีบูต)
⚠️ จำลำดับนี้ให้ขึ้นใจ: แก้ → up

nmcli con mod = แก้ค่าในโพรไฟล์ (ยังไม่มีผล) → nmcli con up = เปิดใช้ค่าใหม่ (มีผลแล้ว) คนสอบตกเยอะเพราะแก้ค่าครบแต่ลืม up ค่าเลยยังไม่ทำงาน

💾 ค่าพวกนี้อยู่หลังรีบูตไหม? — อยู่!

ทุกคำสั่ง nmcli con mod จะถูกเขียนลงไฟล์ใน /etc/NetworkManager/system-connections/ ซึ่งอยู่บนดิสก์ถาวร ดังนั้นค่าจะอยู่ครบหลังรีบูตเครื่องแน่นอน นี่คือ “วิธีที่ถูกต้อง” สำหรับข้อสอบ

6สร้าง connection ใหม่ (ถ้ายังไม่มี)

ส่วนใหญ่เครื่องจะมี connection มาให้แล้ว เราแค่แก้ค่าตามข้อ 5 แต่ถ้าต้องสร้างใหม่ทั้งเส้น ใช้คำสั่ง nmcli con add สร้างจบในบรรทัดเดียว

⌨️ สร้าง connection ใหม่พร้อมตั้งค่าครบ
[root@server1 ~]# nmcli con add type ethernet con-name myeth ifname ens160 \
  ipv4.addresses 192.168.1.50/24 ipv4.gateway 192.168.1.1 \
  ipv4.dns 8.8.8.8 ipv4.method manual
Connection 'myeth' (xxxx) successfully added.
type ethernetชนิดการเชื่อมต่อ (สายแลน)
con-name myethตั้งชื่อ connection profile ใหม่ว่า myeth
ifname ens160ผูกกับการ์ดเน็ตใบชื่อ ens160
💡 เกร็ด

ในข้อสอบส่วนใหญ่จะมี connection อยู่แล้ว แนะนำให้ใช้ con mod แก้ของเดิม (ข้อ 5) จะง่ายและพลาดยากกว่าการสร้างใหม่

7ตั้งชื่อเครื่อง (hostname)

hostname คือ “ชื่อเรียกบ้าน” ของเครื่อง โจทย์มักให้ตั้งเป็นชื่อแบบเต็ม เช่น server1.example.com เราใช้คำสั่ง hostnamectl จัดการ

⌨️ ตั้งและดู hostname
[root@server1 ~]# hostnamectl set-hostname server1.example.com
[root@server1 ~]# hostnamectl status
   Static hostname: server1.example.com
         Icon name: computer-vm
    Operating System: Red Hat Enterprise Linux 9
set-hostnameตั้งชื่อใหม่ — เขียนลงไฟล์ /etc/hostname ให้อัตโนมัติ จึงอยู่หลังรีบูต
statusดูชื่อปัจจุบันและข้อมูลระบบ พิมพ์ hostname เฉยๆ ก็ดูชื่อสั้นๆ ได้
💡 เกร็ด: prompt อาจยังไม่เปลี่ยนทันที

หลัง set-hostname ชื่อใน prompt (เช่น [root@server1 ~]#) อาจยังเป็นชื่อเดิมในเซสชันนั้น ให้ ออกแล้วล็อกอินใหม่ จะเห็นชื่อใหม่ — แต่ค่าถูกตั้งเรียบร้อยแล้ว ไม่ต้องตกใจ

8ไฟล์สำคัญ 2 ไฟล์

/etc/hosts — สมุดที่อยู่แบบเขียนมือ

ไฟล์นี้คือ “สมุดโทรศัพท์ส่วนตัว” ที่เราจดเอง — แมป IP ↔ ชื่อเครื่อง แบบ manual โดยไม่ต้องพึ่ง DNS ถ้าเครื่องเห็นชื่อในไฟล์นี้ มันจะใช้ทันทีโดยไม่ไปถาม DNS

📄 ตัวอย่างเนื้อหา /etc/hosts
127.0.0.1   localhost
192.168.1.50   server1.example.com   server1
192.168.1.60   server2.example.com   server2

รูปแบบคือ IP เว้นวรรค ชื่อเต็ม เว้นวรรค ชื่อย่อ — พอจดแล้ว เราพิมพ์ ping server2 ได้เลยโดยไม่ต้องจำตัวเลข แก้ไฟล์นี้ด้วย vim /etc/hosts

/etc/resolv.conf — บอกว่า DNS อยู่ไหน

ไฟล์นี้บอกระบบว่าจะไปถาม DNS ที่ IP ไหน หน้าตาแบบนี้:

📄 ตัวอย่างเนื้อหา /etc/resolv.conf
nameserver 8.8.8.8
nameserver 1.1.1.1
📌 อย่าแก้ /etc/resolv.conf ตรงๆ!

บน RHEL 9 ไฟล์นี้ถูก NetworkManager จัดการให้อัตโนมัติ ถ้าคุณแก้มันเอง ค่าจะถูกเขียนทับเมื่อ connection ทำงานใหม่ วิธีที่ถูกต้องคือตั้ง DNS ผ่าน nmcli con mod ... ipv4.dns ... (ตามข้อ 5) แล้ว NetworkManager จะอัปเดตไฟล์นี้ให้เอง

9ทดสอบว่าเน็ตใช้ได้จริง

ตั้งค่าเสร็จแล้วต้อง “เช็กว่าใช้ได้จริง” ก่อนเสมอ — มี 2 คำสั่งหลัก

ip addr — ค่า IP ถูกใช้แล้วหรือยัง

⌨️ เช็กก่อนว่า IP ติดแล้ว
[root@server1 ~]# ip addr show ens160
    inet 192.168.1.50/24 brd 192.168.1.255 scope global ens160

ping — ส่งของไปลองดูว่าถึงไหม

⌨️ ลอง ping gateway แล้ว ping ออกเน็ต
[root@server1 ~]# ping -c3 192.168.1.1
64 bytes from 192.168.1.1: icmp_seq=1 ttl=64 time=0.4 ms
3 packets transmitted, 3 received, 0% packet loss

[root@server1 ~]# ping -c3 8.8.8.8
3 packets transmitted, 3 received, 0% packet loss
ping -c3 IPส่งสัญญาณทดสอบ 3 ครั้ง (-c3) ถ้าเห็น 0% packet loss = ติดต่อได้

ลำดับการเช็ก: ping gateway ก่อน (เช็กว่าออกหมู่บ้านได้) → ping IP ภายนอก เช่น 8.8.8.8 (เช็กว่าออกเน็ตได้) → ping ชื่อเว็บ เช่น ping -c3 google.com (เช็กว่า DNS ทำงาน)

💡 อ่านผล ping ให้เป็น

ถ้า ping ตัวเลข IP ได้ แต่ ping ชื่อเว็บไม่ได้ → ปัญหาอยู่ที่ DNS (ไปแก้ ipv4.dns) ถ้า ping gateway ไม่ได้ตั้งแต่แรก → ปัญหาอยู่ที่ IP/subnet/สาย วิธีนี้ช่วยแยกปัญหาได้เร็ว

10ข้อผิดพลาดที่มือใหม่เจอบ่อย

11สรุปคำสั่งบทนี้ (Cheat Sheet)

คำสั่งทำอะไร
nmcli device statusดูว่ามีการ์ดเน็ตใบไหน ผูกกับ connection ใด
nmcli con showดูรายการ connection profile ทั้งหมด
ip addr show / ip aดู IP ที่ใช้อยู่จริง
ip routeดู gateway (บรรทัด default via)
nmcli con mod "ชื่อ" ipv4.addresses 192.168.1.50/24ตั้ง IP + subnet
nmcli con mod "ชื่อ" ipv4.gateway 192.168.1.1ตั้ง gateway
nmcli con mod "ชื่อ" ipv4.dns 8.8.8.8ตั้ง DNS
nmcli con mod "ชื่อ" ipv4.method manualบอกว่ากำหนด IP เอง (อย่าลืม!)
nmcli con up "ชื่อ"สั่งให้ค่าใหม่มีผลทันที (อย่าลืม!)
nmcli con add type ethernet ...สร้าง connection ใหม่ทั้งเส้น
hostnamectl set-hostname server1.example.comตั้งชื่อเครื่อง
hostnamectl statusดูชื่อเครื่องและข้อมูลระบบ
ping -c3 IP/ชื่อเว็บทดสอบว่าติดต่อได้ไหม
/etc/hostsแมป IP↔ชื่อ แบบเขียนมือ
/etc/resolv.confไฟล์ DNS (NetworkManager จัดการให้ — อย่าแก้เอง)
✅ จบบทนี้คุณควรทำได้

ดูสถานะเครือข่ายเป็น (nmcli, ip a, ip route) → ตั้ง static IP + gateway + DNS แบบถาวรด้วย nmcli con mod แล้ว con up → ตั้ง hostname → และทดสอบด้วย ping ได้ครบ จำสูตรทอง: mod ครบ 4 ค่า (รวม method manual) → up → ตรวจด้วย ip addr เท่านี้ก็พร้อมลุยข้อสอบเรื่องเน็ต!