Ubuntu server 18.04 config static IP with ifupdown not netplan

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

แต่ใน 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)

(ย้ำ) บทความนี้ไม่ได้บอกเล่าให้ทุกคนต้องทำแบบนี้ เพียงแต่หากท่านมีงานเฉพาะอย่างที่ต้องการใช้แบบก่อนหน้านี้

หลังจากติดตั้ง Ubuntu server เสร็จ

1.แก้ไขไฟล์ /etc/default/grub ดังนี้

sudo nano /etc/default/grub

เพิ่มบรรทัดนี้

GRUB_CMDLINE_LINUX="netcfg/do_not_use_netplan=true"

หรือหากต้องการใช้ชื่อ interface เป็น ethX เช่น eth0 เป็นต้น ก็ให้เพิ่มบรรทัดแบบนี้

GRUB_CMDLINE_LINUX="net.ifnames=0 netcfg/do_not_use_netplan=true"

ทำการ Save และ ออก

2.ทำคำสั่งนี้เพื่อ update grub

sudo update-grub

3.ติดตั้ง ifupdown package

sudo apt install ifupdown

4.ติดตั้ง resolvconf package

sudo apt install resolvconf

5.รีบูต server

เมื่อ login กลับเข้าไปใน command prompt สั่ง ping www.google.com สำเร็จ ก็แสดงว่าใช้งานได้ (เซิร์ฟเวอร์นี้ต้องได้รับอนุญาตออกเน็ตด้วยนะ) หรือไม่ก็ใช้คำสั่งตรวจสอบชื่อโดเมน ดังนี้ host www.google.com ก็จะต้องได้รับ output ที่แสดงว่าสำเร็จ

สำหรับวิธีการตั้งค่าแบบ netplan ก็มีเว็บเพจที่เขียนไว้มากพอสมควร เช่น Ubuntu Bionic: Netplan posted by Joshua Powers on 1 December 2017 [ https://insights.ubuntu.com/2017/12/01/ubuntu-bionic-netplan ] ลองทำความเข้าใจรูปแบบใหม่นี้ได้เลย

Output ของค่า default เมื่อติดตั้ง Ubuntu server 18.04 เสร็จใหม่ ๆ (/etc/resolv.conf, /etc/network/interfaces และ /etc/netplan/01-netcfg.yaml)

Output ของไฟล์ที่ใช้ในการตั้งค่า static IP เมื่อใช้ ifupdown package (/etc/resolv.conf และ /etc/network/interfaces)

References:
Disable netplan on Ubuntu 17.10 Posted on January 10, 2018 by ruchi [ http://www.ubuntugeek.com/disable-netplan-on-ubuntu-17-10.html ]
Predictable Network Interface Names [ https://www.freedesktop.org/wiki/Software/systemd/PredictableNetworkInterfaceNames/ ]