1. ภาพรวมของ Netplan บน Ubuntu
Netplan คืออะไร?
Netplan เป็นเครื่องมือจัดการการกำหนดค่าเครือข่ายที่ถูกนำมาใช้ใน Ubuntu ตั้งแต่เวอร์ชัน 17.10 เป็นต้นมา ก่อนหน้านี้จะใช้เครื่องมือต่าง ๆ เช่น ifconfig และ /etc/network/interfaces แต่ Netplan นำเสนอวิธีใหม่ในการกำหนดค่าเครือข่าย หนึ่งในข้อได้เปรียบที่ใหญ่ที่สุดของ Netplan คือการใช้ไฟล์ YAML เพื่ออธิบายการตั้งค่าเครือข่าย ทำให้การกำหนดค่าง่ายและสอดคล้องกัน ช่วยให้แม้แต่สภาพแวดล้อมเครือข่ายที่ซับซ้อนก็สามารถจัดการได้อย่างง่ายดาย
Netplan รองรับแบ็กเอนด์เช่น NetworkManager และ systemd-networkd และพร้อมใช้งานทั้งในรุ่น Ubuntu Desktop และ Server ซึ่งทำให้การจัดการเครือข่ายเป็นแบบรวมศูนย์ในสภาพแวดล้อมที่แตกต่างกันได้
ทำไมต้องใช้ Netplan?
เมื่อเทียบกับวิธีการกำหนดค่าเครือข่ายแบบดั้งเดิม Netplan มีข้อได้เปรียบดังต่อไปนี้
- ไวยากรณ์ง่าย : รูปแบบ YAML มีความเป็นธรรมชาติและโครงสร้างชัดเจน ทำให้การกำหนดค่าดูเข้าใจง่ายแม้สำหรับผู้เริ่มต้น
- การจัดการแบบรวมศูนย์ : เนื่องจากทำงานได้ทั้งบนเดสก์ท็อปและเซิร์ฟเวอร์ การกำหนดค่าเครือข่ายหลายแบบจึงสามารถจัดการจากจุดเดียวได้
- การเปลี่ยนแปลงแบบไดนามิก : การแก้ไขและนำไฟล์กำหนดค่าไปใช้ทำให้การอัปเดตการตั้งค่าเครือข่ายเป็นแบบเรียลไทม์
โครงสร้างพื้นฐานของ Netplan
ไฟล์กำหนดค่า Netplan มักจะอยู่ในไดเรกทอรี /etc/netplan/ และใช้ส่วนขยาย .yaml ไฟล์เหล่านี้จะบรรจุข้อมูลเช่น การกำหนดค่าอินเทอร์เฟซเครือข่าย ที่อยู่ IP และรายละเอียดเซิร์ฟเวอร์ DNS
ด้านล่างเป็นตัวอย่างของไฟล์กำหนดค่า Netplan ขั้นพื้นฐาน:
network:
version: 2
renderer: networkd
ethernets:
enp3s0:
dhcp4: true
ในตัวอย่างนี้ อินเทอร์เฟซ Ethernet enp3s0 ถูกกำหนดให้รับที่อยู่ IP ผ่าน DHCP
บทบาทของ Netplan บน Ubuntu 18.04 LTS และรุ่นต่อไป
Netplan ถูกติดตั้งมาโดยอัตโนมัติใน Ubuntu 18.04 LTS และรุ่นต่อ ๆ ไป และเป็นเครื่องมือที่ใช้กันอย่างแพร่หลายสำหรับการจัดการเครือข่ายในสภาพแวดล้อมเดสก์ท็อปและเซิร์ฟเวอร์ ในสภาพแวดล้อมเซิร์ฟเวอร์ที่ต้องการอินเทอร์เฟซหลายตัวหรือการกำหนด IP แบบคงที่ Netplan จะมีความยืดหยุ่นเป็นพิเศษ
ต่อไปเราจะสำรวจตัวอย่างการกำหนดค่าเครือข่ายโดยใช้ Netplan อย่างเป็นรูปธรรม
2. การกำหนดค่า Netplan เบื้องต้น
ตำแหน่งที่ตั้งของไฟล์กำหนดค่า Netplan
ไฟล์กำหนดค่า Netplan มักจะถูกเก็บไว้ในไดเรกทอรี /etc/netplan/ คุณสามารถแก้ไขการตั้งค่าเครือข่ายได้โดยการแก้ไขไฟล์ .yaml เหล่านี้ ชื่อไฟล์เช่น 50-cloud-init.yaml เป็นที่พบบ่อย แต่ก็อาจแตกต่างกันไปตามสภาพแวดล้อม
เพื่อเปิดไฟล์กำหนดค่า ให้ใช้โปรแกรมแก้ไขข้อความเช่น vi หรือ nano:
sudo vi /etc/netplan/50-cloud-init.yaml
การกำหนดค่า IP แบบไดนามิก (DHCP)
หากต้องการให้ระบบรับที่อยู่ IP โดยอัตโนมัติผ่าน DHCP ให้ใช้การกำหนดค่า YAML ด้านล่าง ซึ่งเป็นการตั้งค่าที่ง่ายที่สุดและมักใช้ในบ้านหรือสำนักงาน
network:
version: 2
renderer: networkd
ethernets:
enp3s0:
dhcp4: true
การกำหนดค่า IP แบบคงที่
บางสภาพแวดล้อมต้องการกำหนด IP แบบคงที่ให้กับเซิร์ฟเวอร์หรืออุปกรณ์เฉพาะ ตัวอย่างต่อไปนี้แสดงวิธีการกำหนดค่า IP แบบคงที่
network:
version: 2
renderer: networkd
ethernets:
enp3s0:
addresses:
- 192.168.1.100/24
gateway4: 192.168.1.1
nameservers:
addresses:
- 8.8.8.8
- 8.8.4.4
การนำการกำหนดค่าไปใช้
หลังจากแก้ไขไฟล์กำหนดค่าแล้ว ให้ใช้คำสั่งต่อไปนี้เพื่อทำให้การกำหนดค่า Netplan มีผล
sudo netplan apply
การตรวจสอบการกำหนดค่า
เพื่อยืนยันว่าได้ทำการนำการตั้งค่า Netplan ไปใช้สำเร็จหรือไม่ ให้ตรวจสอบสถานะของอินเทอร์เฟซเครือข่ายด้วยคำสั่งต่อไปนี้
ip a
3. การกำหนดค่าอินเทอร์เฟซเครือข่ายหลายตัว
การกำหนดค่าอินเทอร์เฟซ Ethernet หลายตัว
อุปกรณ์ที่มีอินเทอร์เฟซเครือข่ายหลายตัวสามารถกำหนดค่าต่าง ๆ ให้แต่ละอินเทอร์เฟซได้ ตัวอย่างด้านล่างกำหนดค่าอินเทอร์เฟซ Ethernet สองตัว:
network:
version: 2
renderer: networkd
ethernets:
enp3s0:
dhcp4: true
enp4s0:
addresses:
- 192.168.1.150/24
gateway4: 192.168.1.1
nameservers:
addresses:
- 8.8.8.8
- 8.8.4.4
การเชื่อมต่อแบบ Bonding เพื่อความซ้ำซ้อน
Bonding รวมหลายอินเทอร์เฟซเครือข่ายเป็นอินเทอร์เฟซเสมือนเดียว ให้ความซ้ำซ้อนและเพิ่มความพร้อมใช้งาน ตัวอย่างด้านล่างสร้างอินเทอร์เฟซ bond ชื่อ bond0:
network:
version: 2
renderer: networkd
bonds:
bond0:
interfaces:
- enp3s0
- enp4s0
addresses:
- 192.168.1.200/24
gateway4: 192.168.1.1
nameservers:
addresses:
- 8.8.8.8
- 8.8.4.4
parameters:
mode: active-backup
primary: enp3s0
การกำหนดค่า Wi‑Fi
Netplan ยังรองรับการกำหนดค่า Wi‑Fi ตัวอย่างต่อไปนี้เชื่อมต่อกับ SSID เฉพาะ:
network:
version: 2
renderer: networkd
wifis:
wlp2s0:
access-points:
"my_wifi_network":
password: "password1234"
dhcp4: true
การกำหนดค่า VLAN
Virtual LANs (VLANs) สามารถแบ่งเครือข่ายอย่างเป็นตรรกะ ตัวอย่างด้านล่างสร้าง VLAN บน enp3s0:
network:
version: 2
renderer: networkd
ethernets:
enp3s0:
dhcp4: true
vlans:
vlan10:
id: 10
link: enp3s0
addresses:
- 192.168.10.1/24

4. การกำหนดค่า Netplan ขั้นสูง
การกำหนดค่าเส้นทางแบบคงที่
เมื่อเชื่อมต่อเครือข่ายผ่านเราเตอร์หลายตัว จำเป็นต้องใช้การกำหนดเส้นทางแบบคงที่ ตัวอย่างด้านล่างระบุเส้นทางสำหรับการเข้าถึงเครือข่ายเฉพาะ:
network:
version: 2
renderer: networkd
ethernets:
enp3s0:
addresses:
- 192.168.1.100/24
routes:
- to: 10.0.0.0/24
via: 192.168.1.1
การกำหนดค่านี้ตั้งเส้นทางคงที่สำหรับเครือข่าย 10.0.0.0/24 ผ่านเกตเวย์เริ่มต้น 192.168.1.1.
เกตเวย์เริ่มต้นหลายค่า
Netplan อนุญาตให้ตั้งค่าเกตเวย์เริ่มต้นที่แตกต่างกันตามอินเทอร์เฟซ ซึ่งเป็นประโยชน์เมื่อเข้าถึงอินเทอร์เน็ตผ่านส่วนเครือข่ายที่ต่างกัน:
network:
version: 2
renderer: networkd
ethernets:
enp3s0:
addresses:
- 192.168.1.100/24
gateway4: 192.168.1.1
enp4s0:
addresses:
- 10.0.0.100/24
gateway4: 10.0.0.1
การกำหนดค่าเซิร์ฟเวอร์ DNS
ตัวอย่างด้านล่างระบุเซิร์ฟเวอร์ DNS สาธารณะของ Google:
network:
version: 2
renderer: networkd
ethernets:
enp3s0:
addresses:
- 192.168.1.100/24
nameservers:
addresses:
- 8.8.8.8
- 8.8.4.4
การกำหนดค่า Bonding ขั้นสูง
โหมด Bonding สามารถเปลี่ยนแปลงเพื่อให้ได้พฤติกรรมที่แตกต่าง ตัวอย่างด้านล่างกำหนดค่า Bonding แบบ round‑robin:
network:
version: 2
renderer: networkd
bonds:
bond0:
interfaces:
- enp3s0
- enp4s0
addresses:
- 192.168.1.200/24
gateway4: 192.168.1.1
nameservers:
addresses:
- 8.8.8.8
- 8.8.4.4
parameters:
mode: balance-rr
โหมด balance-rr จะสลับการจราจรระหว่างสองอินเทอร์เฟซ ทำให้ประสิทธิภาพดีขึ้นผ่านการกระจายแบนด์วิดท์.
การกำหนดค่า VLAN ขั้นสูง
VLAN ถูกใช้ในเครือข่ายขนาดใหญ่เพื่อแบ่งสภาพแวดล้อมอย่างเป็นตรรกะ ตัวอย่างด้านล่างกำหนด VLAN ID 100:
network:
version: 2
renderer: networkd
ethernets:
enp3s0:
dhcp4: true
vlans:
vlan100:
id: 100
link: enp3s0
addresses:
- 192.168.100.1/24
การกำหนดค่านี้ตั้ง VLAN ID 100 ให้กับอินเทอร์เฟซ enp3s0 สร้างเครือข่ายเสมือนที่แบ่งส่วน.
5. การแก้ไขปัญหา Netplan
แม้ Netplan จะสะดวก แต่ข้อผิดพลาดในการกำหนดค่าหรือข้อจำกัดของระบบอาจทำให้เกิดปัญหา ส่วนนี้อธิบายปัญหาที่พบบ่อยและวิธีแก้ไขของมัน.
ปัญหา Netplan ที่พบบ่อยและสาเหตุ
1. การกำหนดค่าไม่ได้รับการนำไปใช้
- ข้อผิดพลาดการเยื้อง YAML : YAML มีความเข้มงวดเรื่องการเยื้อง การเว้นวรรคที่ไม่ถูกต้องทำให้การพาร์เซไม่สำเร็จ.
- ชื่ออินเทอร์เฟซไม่ถูกต้อง : ตรวจสอบให้แน่ใจว่าชื่ออินเทอร์เฟซตรงกับผลลัพธ์ของคำสั่ง
ip a.
วิธีแก้ไข
- เรียกใช้
netplan applyหลังจากบันทึกไฟล์การกำหนดค่าแล้ว. - ใช้
sudo netplan tryเพื่อทดสอบการเปลี่ยนแปลงก่อนนำไปใช้ถาวร.sudo netplan applysudo netplan try
2. ข้อผิดพลาดการเชื่อมต่อเครือข่าย
- เกตเวย์หรือการตั้งค่า DNS ไม่ถูกต้อง : ตรวจสอบที่อยู่ IP และการกำหนดค่า DNS.
- ปัญหาอินเทอร์เฟซทางกายภาพ : ตรวจสอบสายเคเบิลและฮาร์ดแวร์.
วิธีแก้ไข
- ใช้คำสั่ง
pingเพื่อตรวจสอบการเชื่อมต่อ:ping 8.8.8.8
- นำการกำหนดค่าเครือข่ายไปใช้ใหม่และรีสตาร์ทบริการ:
sudo systemctl restart networkd
3. ข้อความแสดงข้อผิดพลาดระหว่าง netplan apply
ข้อผิดพลาดเกิดขึ้นเมื่อการกำหนดค่าไม่ถูกต้องหรืออินเทอร์เฟซไม่ถูกจดจำ.
- ตัวอย่างข้อความแสดงข้อผิดพลาด :
Error in network configuration: failed to bring up device enp3s0
ตรวจสอบชื่ออินเทอร์เฟซที่ถูกต้องโดยใช้ ip a.
วิธีแก้ไข
ตรวจสอบการเยื้อง, การสะกด, ชื่ออินเทอร์เฟซ, และความถูกต้องของที่อยู่ IP.
การตรวจสอบบันทึก
บันทึกระบบมีประโยชน์สำหรับการแก้ไขปัญหา ใช้คำสั่งด้านล่างเพื่อดูบันทึกที่เกี่ยวกับเครือข่าย:
journalctl -u systemd-networkd
คำสั่งนี้จะแสดงข้อมูลรายละเอียดเพื่อช่วยแก้ไขข้อผิดพลาดในการกำหนดค่า.
6. สรุปและขั้นตอนต่อไป
การใช้ Netplan ทำให้การจัดการการตั้งค่าเครือข่ายของ Ubuntu เป็นเรื่องง่ายและมีประสิทธิภาพ ด้านล่างเป็นสรุปและขั้นตอนต่อไปที่แนะนำสำหรับการสำรวจเพิ่มเติม.
ข้อได้เปรียบหลักของ Netplan
- การกำหนดค่า YAML ที่เข้าใจง่าย : อ่านและแก้ไขได้ง่าย.
- การออกแบบเครือข่ายที่ยืดหยุ่น : รองรับหลายอินเทอร์เฟซ, การรวม (bonding), เส้นทาง, และ VLAN.
- อินเทอร์เฟซแบบรวมศูนย์ : ทำงานร่วมกับ
systemd-networkdและNetworkManager. - การอัปเดตแบบเรียลไทม์ : นำการเปลี่ยนแปลงไปใช้ทันทีด้วยคำสั่งเดียว.
ขั้นตอนต่อไปที่แนะนำ
- การออกแบบเครือข่ายเสมือน : ใช้หลาย VLAN เพื่อแบ่งเครือข่ายตามตรรกะ.
- การกำหนดค่า IPv6 : เตรียมพร้อมสำหรับโครงสร้างพื้นฐานเครือข่ายสมัยใหม่.
- สคริปต์อัตโนมัติ : ทำให้การกำหนดค่าเป็นอัตโนมัติโดยใช้ Ansible หรือ Puppet.
- การเสริมความปลอดภัย : เสริมความแข็งแกร่งให้ไฟร์วอลล์และการตั้งค่าการควบคุมการเข้าถึง.


