#การตั้งค่า 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 ของ Netplan
  • renderer: 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 จาก DHCP
  • addresses ต้องใส่ Prefix เช่น /24 เสมอ
  • routes กำหนด Default Route ผ่าน Gateway
  • nameservers.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 ได้ แต่ Ping ubuntu.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

#เอกสารอ้างอิง