- การตั้งค่า IP บน Ubuntu: DHCP, Static IP, Netplan และ nmcli
- ข้อมูลที่ต้องเตรียม
- 1. ตรวจสอบสถานะเครือข่ายปัจจุบัน
- 2. ตรวจสอบไฟล์ Netplan เดิม
- 3. ตั้งค่า IP อัตโนมัติด้วย DHCP
- 4. ตั้งค่า Static IPv4 ด้วย Netplan
- 5. ตรวจสอบและนำ Configuration ไปใช้
- 6. ตรวจสอบผลหลังตั้งค่า
- 7. ตั้งค่า Static IP ด้วย nmcli
- 8. ตั้งค่า IP ชั่วคราวด้วยคำสั่ง ip
- 9. ปัญหาที่พบบ่อย
- สรุป
- เอกสารอ้างอิง
#การตั้งค่า IP บน Ubuntu: DHCP, Static IP, Netplan และ nmcli
การตั้งค่า IP Address เป็นงานพื้นฐานที่ผู้ดูแลระบบ Linux ควรทำได้ ไม่ว่าจะเป็นการติดตั้ง Web Server ภายในองค์กร การเตรียมเครื่องสำหรับ Docker หรือ Kubernetes หรือการกำหนดให้เซิร์ฟเวอร์ใช้ IP เดิมหลังจากรีสตาร์ต
Ubuntu รุ่นปัจจุบันใช้ Netplan เป็นเครื่องมือหลักในการประกาศค่าระบบเครือข่ายผ่านไฟล์ YAML แล้วส่งค่าต่อให้ระบบเบื้องหลัง เช่น systemd-networkd หรือ NetworkManager บทความนี้อธิบายทั้งการรับ IP อัตโนมัติด้วย DHCP การตั้ง Static IP การใช้ nmcli และการตั้งค่าชั่วคราวด้วยคำสั่ง ip
คำเตือน: หากกำลังตั้งค่าเครื่องระยะไกลผ่าน SSH การแก้ IP, Gateway หรือชื่อ Network Interface ผิดอาจทำให้การเชื่อมต่อขาด ควรมี Console สำรองจากผู้ให้บริการและใช้
sudo netplan tryก่อนใช้sudo netplan apply
#ข้อมูลที่ต้องเตรียม
ก่อนกำหนด Static IP ควรทราบข้อมูลต่อไปนี้
| รายการ | ตัวอย่าง | ความหมาย |
|---|---|---|
| Network Interface | enp0s3 |
ชื่อการ์ดเครือข่ายที่ต้องการตั้งค่า |
| IP Address | 192.168.1.50 |
หมายเลข IP ที่ต้องการให้เครื่องใช้ |
| Prefix | /24 |
Subnet Mask; /24 เท่ากับ 255.255.255.0 |
| Default Gateway | 192.168.1.1 |
Router ที่ใช้เชื่อมต่อไปยังเครือข่ายอื่น |
| DNS Server | 1.1.1.1, 8.8.8.8 |
เซิร์ฟเวอร์สำหรับแปลงชื่อโดเมนเป็น IP |
Static IP ที่เลือกต้องอยู่ใน Subnet เดียวกับ Gateway และต้องไม่ซ้ำกับอุปกรณ์อื่น หากเป็นเครือข่ายองค์กรควรขอหมายเลข IP จากผู้ดูแลระบบก่อน
#1. ตรวจสอบสถานะเครือข่ายปัจจุบัน
#ดูชื่อ Network Interface
ip link
หรือดูพร้อม IP Address:
ip address
ชื่อ Interface อาจเป็น enp0s3, ens18, ens33, eth0 หรือชื่ออื่นตามฮาร์ดแวร์และแพลตฟอร์มที่ใช้งาน ส่วน lo คือ Loopback Interface ไม่ใช่การ์ด LAN
หากติดตั้ง Netplan รุ่นที่รองรับคำสั่ง status สามารถดูข้อมูลแบบสรุปได้ด้วย:
sudo netplan status --all
#ตรวจสอบ Default Gateway
ip route
ตัวอย่างผลลัพธ์:
default via 192.168.1.1 dev enp0s3 proto dhcp src 192.168.1.120 metric 100
192.168.1.0/24 dev enp0s3 proto kernel scope link src 192.168.1.120
บรรทัดที่ขึ้นต้นด้วย default via แสดง Default Gateway ของเครื่อง
#ตรวจสอบ DNS
resolvectl status
Ubuntu ใช้ systemd-resolved จัดการ DNS ในหลายการติดตั้ง จึงไม่ควรแก้ /etc/resolv.conf โดยตรง เพราะไฟล์นี้มักเป็น Symbolic Link และค่าที่แก้อาจถูกเขียนทับ
#2. ตรวจสอบไฟล์ Netplan เดิม
ไฟล์ตั้งค่า Netplan อยู่ในไดเรกทอรี /etc/netplan และใช้นามสกุล .yaml
ls -l /etc/netplan/
sudo netplan get
ชื่อไฟล์ที่พบอาจเป็น:
00-installer-config.yaml
01-network-manager-all.yaml
50-cloud-init.yaml
สำรองค่าปัจจุบันก่อนแก้ไข:
sudo cp -a /etc/netplan /etc/netplan.backup
หากพบ
50-cloud-init.yamlให้อ่านคำอธิบายส่วนต้นของไฟล์ก่อน บน Cloud VM ไฟล์นี้อาจถูกสร้างจากcloud-initและการแก้ไขโดยตรงอาจไม่คงอยู่หลังรีบูต ควรตรวจสอบคู่มือเครือข่ายของผู้ให้บริการ Cloud ก่อนเปลี่ยนค่า
#3. ตั้งค่า IP อัตโนมัติด้วย DHCP
สร้างหรือแก้ไขไฟล์ Netplan เช่น:
sudo nano /etc/netplan/99-custom-network.yaml
กำหนดค่าให้ตรงกับชื่อ Interface จริงของเครื่อง:
network:
version: 2
renderer: networkd
ethernets:
enp0s3:
dhcp4: true
ความหมายของค่าหลัก:
version: 2คือรูปแบบ Configuration ของ Netplanrenderer: networkdให้systemd-networkdจัดการเครือข่าย เหมาะกับ Ubuntu Server โดยทั่วไปenp0s3ต้องเปลี่ยนเป็นชื่อ Interface ของเครื่องdhcp4: trueให้รับ IPv4, Gateway และ DNS จาก DHCP Server
ถ้าเป็น Ubuntu Desktop ที่ใช้ NetworkManager สามารถกำหนด Renderer เป็น:
renderer: NetworkManager
#4. ตั้งค่า Static IPv4 ด้วย Netplan
ตัวอย่างนี้กำหนดค่าดังต่อไปนี้:
- Interface:
enp0s3 - IP Address:
192.168.1.50/24 - Gateway:
192.168.1.1 - DNS: Cloudflare และ Google
แก้ไขไฟล์:
sudo nano /etc/netplan/99-custom-network.yaml
ใส่ Configuration ดังนี้:
network:
version: 2
renderer: networkd
ethernets:
enp0s3:
dhcp4: false
addresses:
- 192.168.1.50/24
routes:
- to: default
via: 192.168.1.1
nameservers:
addresses:
- 1.1.1.1
- 8.8.8.8
จุดสำคัญคือ:
dhcp4: falseปิดการรับ IPv4 จาก DHCPaddressesต้องใส่ Prefix เช่น/24เสมอroutesกำหนด Default Route ผ่าน Gatewaynameservers.addressesกำหนด DNS ได้มากกว่าหนึ่งรายการ
บทความและตัวอย่างเก่าบางแห่งอาจใช้ gateway4: 192.168.1.1 แต่ Configuration สมัยใหม่ควรกำหนด Default Gateway ผ่าน routes ดังตัวอย่างข้างต้น
#กรณีมี DNS ภายในและ Search Domain
network:
version: 2
renderer: networkd
ethernets:
enp0s3:
dhcp4: false
addresses:
- 10.10.10.20/24
routes:
- to: default
via: 10.10.10.1
nameservers:
search:
- example.local
addresses:
- 10.10.10.2
- 1.1.1.1
เมื่อเรียกชื่อสั้น เช่น database ระบบจะทดลองค้นหา database.example.local ตาม Search Domain ที่กำหนด
#5. ตรวจสอบและนำ Configuration ไปใช้
Netplan ใช้ YAML ซึ่งให้ความสำคัญกับการเยื้องบรรทัด ควรใช้ Space และไม่ใช้ Tab
กำหนด Permission ของไฟล์ไม่ให้ผู้ใช้อื่นแก้ไขหรืออ่านข้อมูลที่อาจมีความสำคัญ:
sudo chmod 600 /etc/netplan/*.yaml
ตรวจสอบไวยากรณ์และสร้าง Configuration สำหรับระบบเบื้องหลัง:
sudo netplan generate
หากไม่มี Error และกำลังทำงานผ่าน SSH ให้ทดลองค่าก่อน:
sudo netplan try
netplan try จะนำค่าใหม่ไปใช้ชั่วคราวและรอการยืนยัน โดยค่าปริยายจะย้อนกลับอัตโนมัติภายใน 120 วินาทีหากไม่ได้รับการยืนยัน จึงช่วยลดความเสี่ยงจากการตั้งค่าผิดบนเครื่องระยะไกล อย่างไรก็ตาม หลังการย้อนค่าควรตรวจสอบสถานะเครือข่ายอีกครั้ง
หากทดสอบแล้วใช้งานได้ ให้ยืนยันตามข้อความบนหน้าจอ หรือใช้คำสั่งต่อไปนี้เมื่อต้องการนำค่าบนดิสก์ไปใช้โดยตรง:
sudo netplan apply
เมื่อเปลี่ยน IP ของเครื่องที่เชื่อมต่อผ่าน SSH การเชื่อมต่อเดิมอาจขาดตามปกติ ให้เชื่อมต่อใหม่ด้วย IP ใหม่
#6. ตรวจสอบผลหลังตั้งค่า
ตรวจสอบ IP Address:
ip address show enp0s3
ตรวจสอบ Route:
ip route
ตรวจสอบสถานะจาก Netplan:
sudo netplan status --all
ทดสอบตามลำดับจากใกล้ไปไกล:
ping -c 4 192.168.1.1
ping -c 4 1.1.1.1
ping -c 4 ubuntu.com
การแปลผล:
- Ping Gateway ไม่ได้: ตรวจสอบสาย LAN, VLAN, Wi-Fi, IP, Prefix และ Gateway
- Ping
1.1.1.1ได้ แต่ Pingubuntu.comไม่ได้: มีแนวโน้มว่า DNS ผิดหรือ DNS ถูกบล็อก - Ping ภายนอกไม่ได้ แต่ Ping Gateway ได้: ตรวจสอบ Router, Default Route, Firewall หรือข้อกำหนดของผู้ให้บริการ
ตรวจสอบ DNS เพิ่มเติม:
resolvectl status
resolvectl query ubuntu.com
#7. ตั้งค่า Static IP ด้วย nmcli
nmcli เป็นเครื่องมือบรรทัดคำสั่งสำหรับ NetworkManager เหมาะกับ Ubuntu Desktop หรือระบบที่แสดงว่า Interface ถูกจัดการโดย NetworkManager
ตรวจสอบอุปกรณ์และ Connection Profile:
nmcli device status
nmcli connection show
สมมติ Connection Profile ชื่อ Wired connection 1 ให้กำหนด Static IP ด้วย:
sudo nmcli connection modify "Wired connection 1" \
ipv4.method manual \
ipv4.addresses "192.168.1.50/24" \
ipv4.gateway "192.168.1.1" \
ipv4.dns "1.1.1.1,8.8.8.8"
เปิดใช้งาน Profile ใหม่:
sudo nmcli connection up "Wired connection 1"
ตรวจสอบผล:
nmcli device show
ip address
ip route
หากต้องการกลับไปใช้ DHCP:
sudo nmcli connection modify "Wired connection 1" \
ipv4.method auto \
ipv4.addresses "" \
ipv4.gateway "" \
ipv4.dns ""
sudo nmcli connection up "Wired connection 1"
ชื่อ Connection Profile อาจไม่เหมือนชื่อ Interface จึงควรดูชื่อจริงจาก nmcli connection show ก่อนทุกครั้ง
#8. ตั้งค่า IP ชั่วคราวด้วยคำสั่ง ip
วิธีนี้เหมาะสำหรับห้องปฏิบัติการหรือการทดสอบ เพราะค่าจะหายเมื่อรีบูต และอาจถูก NetworkManager หรือ Netplan เปลี่ยนกลับ
เพิ่ม IP Address:
sudo ip address add 192.168.1.50/24 dev enp0s3
sudo ip link set enp0s3 up
กำหนด Default Route:
sudo ip route replace default via 192.168.1.1 dev enp0s3
ลบ IP ที่เพิ่ม:
sudo ip address delete 192.168.1.50/24 dev enp0s3
การใช้
ip route replace defaultจะเปลี่ยน Default Route ที่กำลังใช้งานทันที จึงไม่ควรทดลองผ่าน SSH หากไม่มีช่องทาง Console สำรอง
#9. ปัญหาที่พบบ่อย
#YAML เยื้องบรรทัดผิด
ตัวอย่าง Error มักระบุหมายเลขบรรทัด ให้เปิดไฟล์แล้วตรวจสอบ Space:
sudo netplan --debug generate
#ใช้ชื่อ Interface ผิด
ตรวจสอบด้วย:
ip link
แล้วแก้ชื่อภายใต้ ethernets ให้ตรงกันทุกตัวอักษร
#IP ซ้ำกับอุปกรณ์อื่น
อาการที่พบบ่อยคือเชื่อมต่อได้เป็นช่วง ๆ หรือ SSH หลุด ควรเลือก IP นอกช่วงแจกของ DHCP หรือสร้าง DHCP Reservation ที่ Router
#แก้ /etc/resolv.conf แล้วค่าหาย
ให้กำหนด DNS ผ่าน nameservers ใน Netplan หรือผ่าน nmcli เพราะ /etc/resolv.conf มักถูก systemd-resolved จัดการ
#มีหลายไฟล์ใน /etc/netplan
Netplan อ่านไฟล์ .yaml ทั้งหมดและรวม Configuration เข้าด้วยกัน ค่าที่กำหนดซ้ำกันอาจทำให้ผลไม่ตรงกับที่คาดไว้ ตรวจสอบค่าที่รวมแล้วด้วย:
sudo netplan get
จากนั้นจัดการให้ Interface เดียวกันมีแหล่ง Configuration ที่ชัดเจน
#ใช้งานบน Cloud VM
ผู้ให้บริการ Cloud หลายรายใช้ DHCP, Metadata Service หรือ cloud-init แม้ Public IP ที่แสดงใน Control Panel จะดูเหมือน Static IP ก็ตาม ห้ามนำ Public IP ไปใส่ใน Netplan โดยอัตโนมัติ ควรใช้ค่าที่ผู้ให้บริการกำหนดและเตรียม Web Console ก่อนแก้เครือข่าย
#สรุป
การตั้งค่า IP บน Ubuntu เลือกใช้ได้ตามสถานการณ์:
| วิธี | เหมาะกับ | คงอยู่หลังรีบูต |
|---|---|---|
Netplan + networkd |
Ubuntu Server | คงอยู่ |
Netplan + NetworkManager |
Desktop หรือระบบที่ใช้ NetworkManager | คงอยู่ |
nmcli |
จัดการ NetworkManager ผ่าน Terminal | คงอยู่ |
คำสั่ง ip |
ทดลองหรือแก้ปัญหาชั่วคราว | ไม่คงอยู่ |
สำหรับเซิร์ฟเวอร์ทั่วไป ขั้นตอนที่ปลอดภัยคือ ตรวจสอบชื่อ Interface สำรองไฟล์เดิม กำหนด IP ด้วย Netplan ตรวจสอบด้วย netplan generate ทดลองด้วย netplan try และยืนยันผลด้วย ip address, ip route และ resolvectl