Ubuntu server 18.04 config static IP with netplan

เดิมก่อนหน้า Ubuntu server 18.04 LTS จะออกมาให้ใช้งานกันนั้น จะเป็น Ubuntu server 16.04 LTS เราตั้งค่า (config) static IP ให้กับ server ด้วยไฟล์นี้ /etc/network/interfaces ซึ่งก็คือ software package ชื่อ ifupdown และ DNS resolver ที่ใช้ก็คือ resolvconf

แต่ใน Ubuntu server 18.04 นี้ เปลี่ยนไปใช้ package ชื่อ netplan แก้ไขที่ไฟล์ /etc/netplan/01-netcfg.yaml และใช้ DNS resolver คือ systemd-resolve ซึ่งจะ connect สอบถามชื่อ DNS จาก internal DNS ที่ IP 127.0.0.53 (ตรวจดูด้วยคำสั่ง cat /etc/resolv.conf)

โดย default จะเป็นค่า network interface แบบ รับค่า IP มาจาก DHCP server

ไฟล์ /etc/netplan/01-netcfg.yaml

network:
version: 2
renderer: networkd
ethernets:
enp0s3:
dhcp4: yes
dhcp6: yes

หากต้องการใช้เลข IP แบบ Static IP ก็ต้องตั้งค่าเองในแฟ้ม /etc/netplan/01-netcfg.yaml เป็นตัวอย่างประมาณว่า IP คือ 10.0.100.251 ใน class C (/24) มี gateway คือ 10.0.100.1 ทำหน้าที่ nameserver ด้วย และมี nameserver ที่สองคือ 192.100.77.10

 network:
version: 2
renderer: networkd
ethernets:
enp0s3:
dhcp4: no
addresses: [ 10.0.100.251/24 ]
gateway4: 10.0.100.1
nameservers:
addresses:
- 10.0.100.1
- 192.100.77.10

หลังจากแก้ไขค่าเสร็จแล้ว สั่งให้ network ทำงานใหม่ ใช้คำสั่ง sudo netplan apply

ถ้าตอนนี้ใช้ netplan version 0.36.3 เราสามารถตั้งชื่อ network interface เป็นชื่อ vif1 แทน physical network interface เดิม

ก่อนอื่น ให้ใช้คำสั่ง ifconfig เพื่อดูค่า MAC address ของ enp0s3 สมมติคือ 44:bb:33:85:91:08

ตัวอย่างการแก้ไขข้อมูล

network:
version: 2
renderer: networkd
ethernets:
vif1:
match:
macaddress: "44:bb:33:85:91:08"
set-name: vif1
dhcp4: no
addresses: [ 10.0.100.251/24 ]
gateway4: 10.0.100.1
nameservers:
addresses:
- 10.0.100.1
- 192.100.77.10

หลังจากแก้ไขค่าเสร็จแล้ว ใช้คำสั่ง sudo reboot

หลาย ๆ คน อาจจะอยากตั้งชื่อ network interface เป็นชื่อ eth0 แบบเดิมที่ชินตา ก็ทำได้ครับ ลองดูครับ และหมายเหตุไว้สักนิดว่า ไวยกรณ์ของไฟล์ *.yaml นี้ ต้องมีการเว้นวรรค เยื้องเข้า ให้ถูกต้องด้วยนะ เยื้องด้วยช่องว่างอย่างน้อย 2 spaces (เค้าว่ามา)

ผมได้รวบรวมเป็น wiki เอาไว้สำหรับเรื่องคล้าย ๆ กันนี้