- การตั้งค่า IP Address บน CentOS ด้วย nmcli
- สิ่งที่ต้องเตรียม
- 1. ตรวจสอบเวอร์ชันของ CentOS
- 2. ตรวจสอบ Network Interface
- 3. ตรวจสอบ IP Address ปัจจุบัน
- 4. ตั้งค่า Static IPv4
- 5. เปิดใช้งานค่าที่แก้ไข
- 6. ตรวจสอบผลลัพธ์
- 7. เปลี่ยนกลับเป็น DHCP
- 8. สร้าง Connection Profile ใหม่
- 9. ตั้งค่าด้วย nmtui
- 10. การตั้งค่า IP ชั่วคราวด้วยคำสั่ง ip
- 11. ตำแหน่งไฟล์ Configuration
- หมายเหตุสำหรับ CentOS 7
- การแก้ปัญหาเบื้องต้น
- คำสั่งสรุปสำหรับตั้ง Static IP
- สรุป
- แหล่งข้อมูลเพิ่มเติม
#การตั้งค่า IP Address บน CentOS ด้วย nmcli
การตั้งค่า IP Address เป็นงานพื้นฐานที่ผู้ดูแลระบบ Linux ควรรู้ โดยเฉพาะเมื่อต้องเตรียม Web Server, Database Server, Docker Host หรือ Kubernetes Node ที่ต้องมีหมายเลข IP คงที่
บทความนี้อธิบายการตั้งค่าเครือข่ายบน CentOS Stream 9/10 ด้วย nmcli ซึ่งเป็นเครื่องมือแบบ Command Line สำหรับควบคุม NetworkManager วิธีนี้สามารถใช้กับ CentOS 8 และระบบตระกูล RHEL รุ่นใหม่ได้ด้วย
ข้อควรระวัง: หากกำลังเชื่อมต่อเซิร์ฟเวอร์ผ่าน SSH การเปลี่ยน IP, Gateway หรือ Network Profile อาจทำให้การเชื่อมต่อหลุด ควรมี Console ของผู้ให้บริการ Cloud, KVM หรือหน้าเครื่องสำหรับกู้คืนระบบ
#สิ่งที่ต้องเตรียม
ตัวอย่างในบทความจะใช้ข้อมูลต่อไปนี้
| รายการ | ค่าตัวอย่าง |
|---|---|
| Network Interface | ens160 |
| Connection Profile | System ens160 |
| IP Address | 192.168.1.100/24 |
| Default Gateway | 192.168.1.1 |
| DNS Server | 1.1.1.1, 8.8.8.8 |
ให้เปลี่ยนค่าตัวอย่างให้ตรงกับเครือข่ายจริงก่อนใช้คำสั่ง
#1. ตรวจสอบเวอร์ชันของ CentOS
cat /etc/centos-release
หรือ
cat /etc/os-release
#2. ตรวจสอบ Network Interface
แสดงสถานะอุปกรณ์เครือข่ายทั้งหมด
nmcli device status
ตัวอย่างผลลัพธ์
DEVICE TYPE STATE CONNECTION
ens160 ethernet connected System ens160
lo loopback connected lo
ในตัวอย่างนี้
- ชื่อ Network Interface คือ
ens160 - ชื่อ Connection Profile คือ
System ens160
ชื่อของ Interface อาจเป็น ens160, ens33, enp0s3, eth0 หรือชื่ออื่น ขึ้นอยู่กับเครื่องและระบบ Virtualization
ตรวจสอบ Connection Profile เพิ่มเติมได้ด้วยคำสั่ง
nmcli connection show
DEVICEและCONNECTIONอาจมีชื่อไม่เหมือนกัน คำสั่งnmcli connection modifyต้องระบุ ชื่อ Connection Profile ไม่ใช่ชื่อ Interface เสมอไป
#3. ตรวจสอบ IP Address ปัจจุบัน
ip address show
ตรวจสอบเฉพาะ Interface ที่ต้องการ
ip address show ens160
ตรวจสอบ Default Gateway
ip route
ตรวจสอบรายละเอียดที่ NetworkManager ใช้งาน
nmcli device show ens160
#4. ตั้งค่า Static IPv4
สมมติว่าชื่อ Connection Profile คือ System ens160 ให้ใช้คำสั่งต่อไปนี้
sudo nmcli connection modify "System ens160" \
ipv4.method manual \
ipv4.addresses 192.168.1.100/24 \
ipv4.gateway 192.168.1.1 \
ipv4.dns "1.1.1.1 8.8.8.8"
ความหมายของค่าที่กำหนด
| Property | ความหมาย |
|---|---|
ipv4.method manual |
ใช้ IPv4 แบบ Static |
ipv4.addresses |
IP Address และ Prefix Length |
ipv4.gateway |
Default Gateway |
ipv4.dns |
DNS Server หนึ่งรายการหรือมากกว่า |
ค่า /24 เทียบเท่ากับ Subnet Mask 255.255.255.0
หากต้องการให้ใช้เฉพาะ DNS ที่กำหนดและไม่รับ DNS อัตโนมัติจาก DHCP ให้เพิ่มคำสั่ง
sudo nmcli connection modify "System ens160" ipv4.ignore-auto-dns yes
#5. เปิดใช้งานค่าที่แก้ไข
sudo nmcli connection up "System ens160"
การเปิด Connection Profile ใหม่อาจทำให้ SSH หลุด หากเปลี่ยน IP Address ต้องเชื่อมต่อกลับด้วย IP ใหม่
ตรวจสอบสถานะ NetworkManager
sudo systemctl status NetworkManager
หาก NetworkManager ยังไม่ทำงาน ให้เปิดใช้งานด้วยคำสั่ง
sudo systemctl enable --now NetworkManager
โดยทั่วไปไม่จำเป็นต้อง Restart NetworkManager ทั้ง Service เพราะ nmcli connection up สามารถนำค่าของ Connection Profile มาใช้ได้โดยตรง
#6. ตรวจสอบผลลัพธ์
ตรวจสอบ IP Address
ip -4 address show ens160
ตรวจสอบ Routing Table
ip route
ตรวจสอบค่าจาก NetworkManager
nmcli connection show "System ens160"
ทดสอบเชื่อมต่อ Default Gateway
ping -c 4 192.168.1.1
ทดสอบเชื่อมต่ออินเทอร์เน็ตโดยไม่พึ่ง DNS
ping -c 4 1.1.1.1
ทดสอบ DNS
getent hosts example.com
หาก ping 1.1.1.1 สำเร็จ แต่ getent hosts example.com ไม่แสดงผล ปัญหามักเกี่ยวข้องกับ DNS
#7. เปลี่ยนกลับเป็น DHCP
หากต้องการให้ระบบรับ IP Address, Gateway และ DNS จาก DHCP Server อัตโนมัติ ให้ใช้คำสั่งต่อไปนี้
sudo nmcli connection modify "System ens160" \
ipv4.method auto \
ipv4.addresses "" \
ipv4.gateway "" \
ipv4.dns "" \
ipv4.ignore-auto-dns no
จากนั้นเปิด Connection Profile ใหม่
sudo nmcli connection up "System ens160"
#8. สร้าง Connection Profile ใหม่
กรณี Interface ยังไม่มี Connection Profile สามารถสร้างใหม่ได้ดังนี้
sudo nmcli connection add \
type ethernet \
ifname ens160 \
con-name static-ens160 \
ipv4.method manual \
ipv4.addresses 192.168.1.100/24 \
ipv4.gateway 192.168.1.1 \
ipv4.dns "1.1.1.1 8.8.8.8"
เปิดใช้งาน Connection Profile
sudo nmcli connection up static-ens160
ตั้งค่าให้เชื่อมต่ออัตโนมัติเมื่อบูตเครื่อง
sudo nmcli connection modify static-ens160 connection.autoconnect yes
หาก Interface เดียวกันมีหลาย Profile ควรตรวจสอบว่า Profile ใดถูกเปิดใช้งานอยู่ เพื่อป้องกันการใช้ค่าผิดชุด
nmcli --fields NAME,TYPE,DEVICE,AUTOCONNECT connection show
#9. ตั้งค่าด้วย nmtui
ผู้ที่ไม่สะดวกใช้คำสั่งยาวสามารถใช้ Text User Interface ของ NetworkManager ได้
sudo nmtui
จากนั้นดำเนินการดังนี้
- เลือก Edit a connection
- เลือก Connection Profile ที่ต้องการ
- เปลี่ยน IPv4 CONFIGURATION เป็น
Manual - กำหนด Address, Gateway และ DNS Server
- เลือก OK และกลับไปหน้าแรก
- เลือก Activate a connection แล้วเปิด Connection Profile ใหม่
ตรวจสอบผลลัพธ์ด้วย ip address, ip route และ nmcli device show
#10. การตั้งค่า IP ชั่วคราวด้วยคำสั่ง ip
คำสั่ง ip สามารถเพิ่ม IP Address ให้ Interface ได้ทันที
sudo ip address add 192.168.1.100/24 dev ens160
เพิ่มหรือเปลี่ยน Default Route
sudo ip route replace default via 192.168.1.1 dev ens160
อย่างไรก็ตาม ค่าที่ตั้งด้วยวิธีนี้อาจหายเมื่อ Restart NetworkManager หรือรีบูตเครื่อง จึงเหมาะสำหรับการทดลองหรือแก้ปัญหาชั่วคราว หากต้องการค่าถาวรควรตั้งผ่าน nmcli
#11. ตำแหน่งไฟล์ Configuration
ใน CentOS Stream รุ่นใหม่ NetworkManager จัดเก็บ Connection Profile แบบ Keyfile ไว้ที่
/etc/NetworkManager/system-connections/
ไฟล์เหล่านี้อาจมีข้อมูลสำคัญและมี Permission จำกัด ไม่ควรแก้ไขด้วย Text Editor หากไม่จำเป็น การใช้ nmcli ช่วยลดความผิดพลาดและทำให้ NetworkManager รับรู้การเปลี่ยนแปลงอย่างถูกต้อง
หากมีการแก้ไฟล์ด้วยตนเอง ต้องสั่งให้ NetworkManager โหลด Connection Profile ใหม่
sudo nmcli connection reload
จากนั้นจึงเปิด Profile ที่ต้องการ
sudo nmcli connection up "System ens160"
#หมายเหตุสำหรับ CentOS 7
CentOS 7 สามารถใช้ nmcli ได้เช่นกัน แต่ระบบเดิมจำนวนมากอาจยังจัดเก็บค่าที่ไฟล์ลักษณะนี้
/etc/sysconfig/network-scripts/ifcfg-ens160
หาก NetworkManager ทำงานอยู่ แนะนำให้ใช้ nmcli เป็นหลัก เพื่อหลีกเลี่ยงความไม่สอดคล้องระหว่างค่าที่แก้ในไฟล์กับ Connection Profile ที่กำลังใช้งาน
CentOS Linux 7 สิ้นสุดระยะการสนับสนุนทั่วไปแล้ว จึงควรวางแผนอัปเกรดไปยังระบบที่ยังได้รับการอัปเดตด้านความปลอดภัย
#การแก้ปัญหาเบื้องต้น
#ปัญหา: ระบุชื่อ Connection ผิด
ตรวจสอบชื่อที่ถูกต้องด้วยคำสั่ง
nmcli connection show
แล้วนำค่าจากคอลัมน์ NAME ไปใช้กับ nmcli connection modify และ nmcli connection up
#ปัญหา: Connection Profile ไม่ผูกกับ Interface
sudo nmcli connection modify "System ens160" connection.interface-name ens160
sudo nmcli connection up "System ens160"
#ปัญหา: มี IP Address ซ้ำในเครือข่าย
ตรวจสอบว่า IP ที่กำหนดไม่ถูกอุปกรณ์อื่นใช้งาน และควรกำหนด Static IP นอกช่วงที่ DHCP Server แจกอัตโนมัติ หรือทำ DHCP Reservation ให้เครื่องนั้น
#ปัญหา: ติดต่อเครื่องในวง LAN ได้ แต่ออกอินเทอร์เน็ตไม่ได้
ตรวจสอบ Default Gateway
ip route
ควรมีรายการลักษณะดังนี้
default via 192.168.1.1 dev ens160
#ปัญหา: ติดต่อด้วย IP ได้ แต่เปิดชื่อโดเมนไม่ได้
ตรวจสอบ DNS ที่ NetworkManager ส่งให้ระบบ
nmcli device show ens160 | grep -E 'IP4.DNS|IP6.DNS'
จากนั้นทดสอบ Resolve ชื่อโดเมน
getent hosts example.com
#ปัญหา: Firewall ปิดกั้น Service
การเปลี่ยน IP สำเร็จไม่ได้หมายความว่า Service ทุกตัวจะเข้าถึงได้ ตรวจสอบ Firewall ด้วยคำสั่ง
sudo firewall-cmd --state
sudo firewall-cmd --list-all
ตัวอย่างการอนุญาต SSH แบบถาวร
sudo firewall-cmd --permanent --add-service=ssh
sudo firewall-cmd --reload
#คำสั่งสรุปสำหรับตั้ง Static IP
# 1. ตรวจสอบชื่อ Interface และ Connection Profile
nmcli device status
nmcli connection show
# 2. กำหนด Static IP
sudo nmcli connection modify "System ens160" \
ipv4.method manual \
ipv4.addresses 192.168.1.100/24 \
ipv4.gateway 192.168.1.1 \
ipv4.dns "1.1.1.1 8.8.8.8"
# 3. เปิดใช้งานค่าที่แก้ไข
sudo nmcli connection up "System ens160"
# 4. ตรวจสอบผลลัพธ์
ip -4 address show ens160
ip route
getent hosts example.com
#สรุป
การตั้งค่า IP บน CentOS Stream ควรจัดการผ่าน NetworkManager โดยใช้ nmcli เพราะสามารถกำหนด Static IP, DHCP, Gateway และ DNS ได้อย่างเป็นระบบ และค่าจะคงอยู่หลังรีบูต สิ่งสำคัญที่สุดคือการตรวจสอบชื่อ Connection Profile ให้ถูกต้อง เตรียมช่องทาง Console สำรองเมื่อแก้ไขผ่าน SSH และทดสอบทั้ง IP, Route และ DNS หลังเปลี่ยนค่า