เชี่ยวชาญ Netplan บน Ubuntu: คู่มือครบวงจรสำหรับการกำหนดค่าเครือข่ายด้วย YAML

目次

1. ภาพรวมของ Netplan บน Ubuntu

Netplan คืออะไร?

Netplan เป็นเครื่องมือจัดการการกำหนดค่าเครือข่ายที่ถูกนำมาใช้ใน Ubuntu ตั้งแต่เวอร์ชัน 17.10 เป็นต้นมา ก่อนหน้านี้จะใช้เครื่องมือต่าง ๆ เช่น ifconfig และ /etc/network/interfaces แต่ Netplan นำเสนอวิธีใหม่ในการกำหนดค่าเครือข่าย หนึ่งในข้อได้เปรียบที่ใหญ่ที่สุดของ Netplan คือการใช้ไฟล์ YAML เพื่ออธิบายการตั้งค่าเครือข่าย ทำให้การกำหนดค่าง่ายและสอดคล้องกัน ช่วยให้แม้แต่สภาพแวดล้อมเครือข่ายที่ซับซ้อนก็สามารถจัดการได้อย่างง่ายดาย

Netplan รองรับแบ็กเอนด์เช่น NetworkManager และ systemd-networkd และพร้อมใช้งานทั้งในรุ่น Ubuntu Desktop และ Server ซึ่งทำให้การจัดการเครือข่ายเป็นแบบรวมศูนย์ในสภาพแวดล้อมที่แตกต่างกันได้

ทำไมต้องใช้ Netplan?

เมื่อเทียบกับวิธีการกำหนดค่าเครือข่ายแบบดั้งเดิม Netplan มีข้อได้เปรียบดังต่อไปนี้

  1. ไวยากรณ์ง่าย : รูปแบบ YAML มีความเป็นธรรมชาติและโครงสร้างชัดเจน ทำให้การกำหนดค่าดูเข้าใจง่ายแม้สำหรับผู้เริ่มต้น
  2. การจัดการแบบรวมศูนย์ : เนื่องจากทำงานได้ทั้งบนเดสก์ท็อปและเซิร์ฟเวอร์ การกำหนดค่าเครือข่ายหลายแบบจึงสามารถจัดการจากจุดเดียวได้
  3. การเปลี่ยนแปลงแบบไดนามิก : การแก้ไขและนำไฟล์กำหนดค่าไปใช้ทำให้การอัปเดตการตั้งค่าเครือข่ายเป็นแบบเรียลไทม์

โครงสร้างพื้นฐานของ 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.

วิธีแก้ไข

  1. เรียกใช้ netplan apply หลังจากบันทึกไฟล์การกำหนดค่าแล้ว.
  2. ใช้ sudo netplan try เพื่อทดสอบการเปลี่ยนแปลงก่อนนำไปใช้ถาวร.
    sudo netplan apply
    
    sudo netplan try
    

2. ข้อผิดพลาดการเชื่อมต่อเครือข่าย

  • เกตเวย์หรือการตั้งค่า DNS ไม่ถูกต้อง : ตรวจสอบที่อยู่ IP และการกำหนดค่า DNS.
  • ปัญหาอินเทอร์เฟซทางกายภาพ : ตรวจสอบสายเคเบิลและฮาร์ดแวร์.

วิธีแก้ไข

  1. ใช้คำสั่ง ping เพื่อตรวจสอบการเชื่อมต่อ:
    ping 8.8.8.8
    
  1. นำการกำหนดค่าเครือข่ายไปใช้ใหม่และรีสตาร์ทบริการ:
    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

  1. การกำหนดค่า YAML ที่เข้าใจง่าย : อ่านและแก้ไขได้ง่าย.
  2. การออกแบบเครือข่ายที่ยืดหยุ่น : รองรับหลายอินเทอร์เฟซ, การรวม (bonding), เส้นทาง, และ VLAN.
  3. อินเทอร์เฟซแบบรวมศูนย์ : ทำงานร่วมกับ systemd-networkd และ NetworkManager.
  4. การอัปเดตแบบเรียลไทม์ : นำการเปลี่ยนแปลงไปใช้ทันทีด้วยคำสั่งเดียว.

ขั้นตอนต่อไปที่แนะนำ

  1. การออกแบบเครือข่ายเสมือน : ใช้หลาย VLAN เพื่อแบ่งเครือข่ายตามตรรกะ.
  2. การกำหนดค่า IPv6 : เตรียมพร้อมสำหรับโครงสร้างพื้นฐานเครือข่ายสมัยใหม่.
  3. สคริปต์อัตโนมัติ : ทำให้การกำหนดค่าเป็นอัตโนมัติโดยใช้ Ansible หรือ Puppet.
  4. การเสริมความปลอดภัย : เสริมความแข็งแกร่งให้ไฟร์วอลล์และการตั้งค่าการควบคุมการเข้าถึง.

แหล่งข้อมูลเพิ่มเติม