เซิร์ฟเวอร์ที่คุยกับโลกภายนอกไม่ได้ ก็เหมือนบ้านที่ไม่มีเลขที่ — ไม่มีใครส่งของถึง บทนี้สอนตั้งค่า IP, gateway, DNS และชื่อเครื่อง ให้เซิร์ฟเวอร์ของคุณออนไลน์ได้อย่างถูกต้องและถาวร
🌱 บทนี้เขียนเพื่อคนที่ไม่เคยแตะ Linux มาก่อนเลยเซิร์ฟเวอร์ตัวจริงแทบไม่มีประโยชน์เลยถ้ามันอยู่คนเดียว — มันต้องคุยกับเครื่องอื่นได้ ทั้งให้คนเข้ามาใช้เว็บไซต์, รับ–ส่งอีเมล, ดึงข้อมูลจากฐานข้อมูล หรือแม้แต่ดาวน์โหลดโปรแกรมมาติดตั้ง ทั้งหมดนี้เกิดขึ้นผ่าน เครือข่าย (network)
แต่เครื่องจะคุยกับใครได้ ก็ต้อง “ตั้งค่าให้ถูก” เสียก่อน — ต้องมีที่อยู่ของตัวเอง รู้ว่าจะออกไปโลกภายนอกทางไหน และรู้วิธีแปลชื่อเว็บเป็นตัวเลข บทนี้จะพาทำทีละขั้น
โจทย์ยอดฮิตคือ “ตั้ง static IP ให้เครื่องนี้เป็น ... gateway ... DNS ...” และที่สำคัญที่สุด — ค่าที่ตั้งต้อง อยู่หลังรีบูตเครื่อง (persistent) ด้วย ไม่ใช่หายไปเมื่อปิดเปิดใหม่ จุดนี้คนพลาดเยอะมาก เดี๋ยวเราย้ำกันอีกที
ก่อนจะลงมือพิมพ์คำสั่ง เรามาทำความรู้จักศัพท์ 5 คำที่ต้องเจอตลอดบทนี้ จะอธิบายด้วยภาพ “บ้านเลขที่” ให้เห็นภาพง่ายๆ
ลองนึกว่าเครือข่ายก็เหมือนระบบส่งจดหมายในเมืองหนึ่ง — ทุกอย่างหมุนรอบ เลขที่บ้าน และ การรู้ว่าจะส่งของออกไปทางไหน
192.168.1.50 เหมือนบ้านเลขที่ — แต่ละเครื่องในเครือข่ายต้องมีเลขนี้ไม่ซ้ำกัน คนถึงจะส่งของมาถูกบ้าน/24 ต่อท้าย IP (เช่น 192.168.1.50/24) แปลว่าเครื่องที่ขึ้นต้นด้วย 192.168.1.x อยู่หมู่บ้านเดียวกัน คุยกันตรงๆ ได้เลย192.168.1.1 ถ้าอยากส่งของไปบ้านที่อยู่คนละหมู่บ้าน (คนละเครือข่าย เช่นออกอินเทอร์เน็ต) ต้องส่งผ่านประตูนี้google.com ได้ง่ายกว่า — DNS คือตัวแปลชื่อเว็บ → เป็น IP ให้ เช่น 8.8.8.8 เป็นเซิร์ฟเวอร์ DNS ที่ใช้กันบ่อยserver1.example.com เหมือนชื่อเรียกบ้าน ทำให้คนจำและอ้างถึงเครื่องได้ง่ายกว่าตัวเลขIP = เลขที่บ้าน · subnet = หมู่บ้าน · gateway = ประตูออกเมือง · DNS = สมุดโทรศัพท์แปลชื่อ↔เลข · hostname = ชื่อเรียกบ้าน เห็นภาพแล้วใช่ไหม? ที่เหลือคือแค่ “บอกค่าพวกนี้ให้เครื่องรู้”
บน RHEL 9 มีโปรแกรมตัวหนึ่งคอยดูแลเรื่องเครือข่ายทั้งหมดชื่อ NetworkManager — มันทำงานเบื้องหลังตลอดเวลา คอยจัดการการเชื่อมต่อทุกเส้น และเครื่องมือที่เราใช้สั่งงานมันคือคำสั่ง nmcli (ย่อมาจาก NetworkManager Command Line Interface)
แนวคิดสำคัญที่สุดของบทนี้คือ connection profile (โปรไฟล์การเชื่อมต่อ) — มันคือ “ชุดการตั้งค่า” ที่บันทึกไว้ว่าการ์ดเน็ตใบนี้ควรใช้ IP อะไร gateway อะไร DNS อะไร
connection profile ก็เหมือน โพรไฟล์ Wi-Fi ที่บันทึกไว้ในมือถือ — คุณตั้งครั้งเดียวว่าเชื่อมต่อยังไง ใส่รหัสยังไง พอบันทึกแล้วมันจะจำไว้ ครั้งหน้าก็แค่ “เปิดใช้” โพรไฟล์นั้นอีกที ไม่ต้องตั้งใหม่
เช่นเดียวกัน — เราแก้ค่าในโพรไฟล์ด้วย nmcli con mod แล้วค่อยสั่งให้มันทำงานด้วย nmcli con up
เพราะค่าที่เก็บใน connection profile จะถูก เขียนลงไฟล์บนดิสก์ มันจึงอยู่ถาวรหลังรีบูต ต่างจากการพิมพ์คำสั่งแก้ IP ตรงๆ ที่หายเมื่อปิดเครื่อง — ข้อสอบต้องการแบบถาวรเท่านั้น
ก่อนจะแก้อะไร เราต้อง “ดูของเดิม” ให้เป็นก่อน — ต้องรู้ว่าเครื่องมีการ์ดเน็ตใบไหนบ้าง ชื่อ connection ว่าอะไร และตอนนี้ใช้ IP อะไรอยู่ มี 4 คำสั่งที่ใช้บ่อย
[root@server1 ~]# nmcli device status DEVICE TYPE STATE CONNECTION ens160 ethernet connected System ens160 lo loopback unmanaged --
คอลัมน์ DEVICE คือชื่อการ์ดเน็ต (เช่น ens160) ส่วน CONNECTION คือ ชื่อ connection profile ที่ผูกกับมันอยู่ — จำชื่อนี้ไว้ให้ดี เพราะต้องใช้พิมพ์ในคำสั่งต่อไป
[root@server1 ~]# nmcli connection show NAME UUID TYPE DEVICE System ens160 1b2c3d4e-... ethernet ens160
แสดงรายการ connection profile ทั้งหมดที่มี ชื่อในคอลัมน์ NAME คือสิ่งที่เราจะอ้างถึงในคำสั่งแก้ค่า เขียนย่อ nmcli con show ก็ได้
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) — ใช้คำสั่งนี้ตรวจว่าค่าที่เราตั้งมีผลแล้วหรือยัง
[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 เลย แปลว่าเครื่องออกอินเทอร์เน็ตไม่ได้
นี่คือส่วนที่สำคัญที่สุด — การกำหนด IP ให้เครื่องแบบ “คงที่” (static) ไม่ใช่รับมาอัตโนมัติจาก DHCP เราจะแก้ค่าทีละบรรทัดลงใน connection profile แล้วค่อยสั่งให้มีผล
สมมติว่า connection ของเราชื่อ "System ens160" (ดูได้จากคำสั่งในข้อ 4) เราจะตั้งให้:
192.168.1.50/24192.168.1.18.8.8.8[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 (หรือรีบูต)nmcli con mod = แก้ค่าในโพรไฟล์ (ยังไม่มีผล) → nmcli con up = เปิดใช้ค่าใหม่ (มีผลแล้ว) คนสอบตกเยอะเพราะแก้ค่าครบแต่ลืม up ค่าเลยยังไม่ทำงาน
ทุกคำสั่ง nmcli con mod จะถูกเขียนลงไฟล์ใน /etc/NetworkManager/system-connections/ ซึ่งอยู่บนดิสก์ถาวร ดังนั้นค่าจะอยู่ครบหลังรีบูตเครื่องแน่นอน นี่คือ “วิธีที่ถูกต้อง” สำหรับข้อสอบ
ส่วนใหญ่เครื่องจะมี connection มาให้แล้ว เราแค่แก้ค่าตามข้อ 5 แต่ถ้าต้องสร้างใหม่ทั้งเส้น ใช้คำสั่ง nmcli con add สร้างจบในบรรทัดเดียว
[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 ใหม่ว่า myethifname ens160ผูกกับการ์ดเน็ตใบชื่อ ens160ในข้อสอบส่วนใหญ่จะมี connection อยู่แล้ว แนะนำให้ใช้ con mod แก้ของเดิม (ข้อ 5) จะง่ายและพลาดยากกว่าการสร้างใหม่
hostname คือ “ชื่อเรียกบ้าน” ของเครื่อง โจทย์มักให้ตั้งเป็นชื่อแบบเต็ม เช่น server1.example.com เราใช้คำสั่ง hostnamectl จัดการ
[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 เฉยๆ ก็ดูชื่อสั้นๆ ได้หลัง set-hostname ชื่อใน prompt (เช่น [root@server1 ~]#) อาจยังเป็นชื่อเดิมในเซสชันนั้น ให้ ออกแล้วล็อกอินใหม่ จะเห็นชื่อใหม่ — แต่ค่าถูกตั้งเรียบร้อยแล้ว ไม่ต้องตกใจ
ไฟล์นี้คือ “สมุดโทรศัพท์ส่วนตัว” ที่เราจดเอง — แมป IP ↔ ชื่อเครื่อง แบบ manual โดยไม่ต้องพึ่ง DNS ถ้าเครื่องเห็นชื่อในไฟล์นี้ มันจะใช้ทันทีโดยไม่ไปถาม DNS
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
ไฟล์นี้บอกระบบว่าจะไปถาม DNS ที่ IP ไหน หน้าตาแบบนี้:
nameserver 8.8.8.8 nameserver 1.1.1.1
บน RHEL 9 ไฟล์นี้ถูก NetworkManager จัดการให้อัตโนมัติ ถ้าคุณแก้มันเอง ค่าจะถูกเขียนทับเมื่อ connection ทำงานใหม่ วิธีที่ถูกต้องคือตั้ง DNS ผ่าน nmcli con mod ... ipv4.dns ... (ตามข้อ 5) แล้ว NetworkManager จะอัปเดตไฟล์นี้ให้เอง
ตั้งค่าเสร็จแล้วต้อง “เช็กว่าใช้ได้จริง” ก่อนเสมอ — มี 2 คำสั่งหลัก
[root@server1 ~]# ip addr show ens160 inet 192.168.1.50/24 brd 192.168.1.255 scope global ens160
[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 ตัวเลข IP ได้ แต่ ping ชื่อเว็บไม่ได้ → ปัญหาอยู่ที่ DNS (ไปแก้ ipv4.dns) ถ้า ping gateway ไม่ได้ตั้งแต่แรก → ปัญหาอยู่ที่ IP/subnet/สาย วิธีนี้ช่วยแยกปัญหาได้เร็ว
ip addr add ตั้ง IP: คำสั่ง ip addr add 192.168.1.50/24 dev ens160 ทำให้ IP ติดทันทีก็จริง แต่ หายหมดเมื่อรีบูต เพราะไม่ได้เขียนลงโพรไฟล์ — ห้ามใช้ในข้อสอบเด็ดขาด ให้ใช้ nmcli con mod เท่านั้นipv4.method manual: ตั้ง IP, gateway, DNS ครบ แต่ลืมบรรทัดนี้ → เครื่องยังพยายามรับ IP จาก DHCP อยู่ ค่าที่ตั้งไว้เลยไม่ถูกใช้ นี่คือกับดักยอดฮิตnmcli con up: แก้ค่าครบทุกบรรทัด แต่ลืมสั่งให้มีผล → ค่ายังไม่ทำงานจนกว่าจะ up หรือรีบูต ตรวจด้วย ip addr ทุกครั้ง"System ens160" ต้องใส่เครื่องหมายคำพูดครอบ และพิมพ์ให้ตรงเป๊ะ (ตัวพิมพ์เล็ก–ใหญ่สำคัญ) ลอกชื่อจาก nmcli con show มาให้แน่ใจ/etc/resolv.conf ตรงๆ: NetworkManager จะเขียนทับ ทำให้ DNS หายอีก — ตั้งผ่าน ipv4.dns เท่านั้น| คำสั่ง | ทำอะไร |
|---|---|
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 เท่านี้ก็พร้อมลุยข้อสอบเรื่องเน็ต!