Cài đặt Server

Hướng dẫn cài đặt IP tĩnh và tắt Cloud-init trên Ubuntu VM

Giới thiệu

Tài liệu này hướng dẫn chi tiết cách cấu hình IP tĩnh và vô hiệu hóa Cloud-Init trên Ubuntu Server 24.04.3 LTS chạy trong môi trường máy ảo (VM). Cloud-Init thường được sử dụng để tự động cấu hình máy ảo khi khởi động lần đầu, nhưng trong nhiều trường hợp production, việc tắt nó giúp tránh các thay đổi cấu hình không mong muốn.

Cấu hình IP tĩnh với Netplan

Bước 1: Xác định interface mạng hiện tại

Đầu tiên, kiểm tra tên interface mạng và cấu hình hiện tại:

# Liệt kê các interface mạng
ip addr show

# Hoặc sử dụng lệnh
ip link show

# Kiểm tra cấu hình Netplan hiện tại
ls -la /etc/netplan/

Interface mạng thường có tên như ens33, ens160, enp0s3 hoặc eth0 tùy thuộc vào hypervisor.

Bước 2: Sao lưu file cấu hình hiện tại

# Tạo thư mục backup
sudo mkdir -p /etc/netplan/backup

# Sao lưu tất cả file cấu hình hiện tại
sudo cp /etc/netplan/*.yaml /etc/netplan/backup/

Bước 3: Tạo file cấu hình IP tĩnh mới

Xóa hoặc di chuyển các file cấu hình cũ:

# Di chuyển file cấu hình cũ (thường là 50-cloud-init.yaml hoặc 00-installer-config.yaml)
sudo mv /etc/netplan/*.yaml /etc/netplan/backup/

Tạo file cấu hình mới:

sudo nano /etc/netplan/01-netconfig.yaml

Bước 4: Nội dung file cấu hình

Nhập nội dung sau (điều chỉnh theo nhu cầu của bạn):

network:
  version: 2
  renderer: networkd
  ethernets:
    ens33:  # Thay đổi tên interface phù hợp với hệ thống của bạn
      dhcp4: false
      dhcp6: false
      addresses:
        - 192.168.1.100/24  # IP tĩnh mong muốn
      routes:
        - to: default
          via: 192.168.1.1   # Gateway
      nameservers:
        addresses:
          - 8.8.8.8
          - 8.8.4.4
        search:
          - local.domain     # Domain local (tùy chọn)

Giải thích các tham số:

  • ens33: Tên interface mạng (thay đổi theo hệ thống của bạn)
  • dhcp4: false: Tắt DHCP IPv4
  • dhcp6: false: Tắt DHCP IPv6
  • addresses: IP tĩnh kèm subnet mask (dạng CIDR)
  • routes: Định tuyến, thường là default gateway
  • nameservers: DNS servers và search domain

Bước 5: Áp dụng cấu hình

# Kiểm tra cú pháp file cấu hình
sudo netplan try

# Nếu không có lỗi, áp dụng cấu hình
sudo netplan apply

# Hoặc áp dụng với debug mode để xem chi tiết
sudo netplan --debug apply

Vô hiệu hóa Cloud-Init

Phương pháp 1: Vô hiệu hóa hoàn toàn (Khuyến nghị)

# Tạo file để vô hiệu hóa cloud-init
sudo touch /etc/cloud/cloud-init.disabled

# Xác nhận file đã được tạo
ls -la /etc/cloud/cloud-init.disabled

Phương pháp 2: Vô hiệu hóa network configuration của Cloud-Init

Nếu bạn muốn giữ một số tính năng của cloud-init nhưng tắt phần network:

# Tạo file cấu hình
sudo nano /etc/cloud/cloud.cfg.d/99-disable-network-config.cfg

Thêm nội dung:

network: {config: disabled}

Phương pháp 3: Gỡ bỏ Cloud-Init (Tùy chọn)

Nếu bạn muốn gỡ bỏ hoàn toàn cloud-init:

# Dừng và vô hiệu hóa các services
sudo systemctl stop cloud-init.service
sudo systemctl disable cloud-init.service
sudo systemctl stop cloud-init-local.service
sudo systemctl disable cloud-init-local.service
sudo systemctl stop cloud-config.service
sudo systemctl disable cloud-config.service
sudo systemctl stop cloud-final.service
sudo systemctl disable cloud-final.service

# Gỡ bỏ package (tùy chọn - cẩn thận với dependencies)
# sudo apt purge cloud-init -y
# sudo apt autoremove -y

Bước 4: Xóa dữ liệu cũ của Cloud-Init

# Xóa dữ liệu và logs của cloud-init
sudo rm -rf /var/lib/cloud/
sudo rm -rf /var/log/cloud-init*

# Xóa file cấu hình mạng cũ của cloud-init (nếu có)
sudo rm -f /etc/netplan/50-cloud-init.yaml

Kiểm tra và xác nhận

Kiểm tra cấu hình IP

# Kiểm tra IP hiện tại
ip addr show

# Kiểm tra routing table
ip route show

# Kiểm tra DNS
cat /etc/resolv.conf

# Test kết nối
ping -c 4 8.8.8.8
ping -c 4 google.com

Kiểm tra trạng thái Cloud-Init

# Kiểm tra cloud-init đã bị vô hiệu hóa
sudo cloud-init status

# Kết quả mong đợi: "status: disabled" hoặc "error"

# Kiểm tra services
sudo systemctl status cloud-init.service
sudo systemctl status cloud-init-local.service

Khởi động lại để kiểm tra

# Khởi động lại hệ thống
sudo reboot

# Sau khi khởi động lại, kiểm tra:
# 1. IP tĩnh vẫn được giữ nguyên
ip addr show

# 2. Cloud-init không chạy
sudo cloud-init status

# 3. Không có file network mới được tạo bởi cloud-init
ls -la /etc/netplan/

Xử lý sự cố thường gặp

Vấn đề 1: Mất kết nối sau khi apply netplan

Nếu mất kết nối, đợi 120 giây để cấu hình tự động rollback, hoặc:

  • Truy cập console VM trực tiếp
  • Khôi phục file backup: sudo cp /etc/netplan/backup/*.yaml /etc/netplan/sudo netplan apply

Vấn đề 2: DNS không hoạt động

Kiểm tra và sửa file /etc/resolv.conf:

# Nếu file là symlink, remove nó
sudo rm /etc/resolv.conf

# Tạo file mới
sudo nano /etc/resolv.conf

# Thêm nội dung:
nameserver 8.8.8.8
nameserver 8.8.4.4

Vấn đề 3: Cloud-init vẫn chạy sau khi disable

Đảm bảo đã tạo file disable và clear cache:

sudo touch /etc/cloud/cloud-init.disabled
sudo rm -rf /var/lib/cloud/*
sudo reboot

Vấn đề 4: Multiple default routes

Kiểm tra và xóa route thừa:

# Xem tất cả routes
ip route show

# Xóa route thừa (ví dụ)
sudo ip route del default via 192.168.1.254

Script tự động hóa (Tùy chọn)

Tạo script để tự động hóa quá trình:

#!/bin/bash
# File: setup-static-ip.sh

# Các biến cấu hình
INTERFACE="ens33"
IP_ADDRESS="192.168.1.100/24"
GATEWAY="192.168.1.1"
DNS1="8.8.8.8"
DNS2="8.8.4.4"

# Backup cấu hình hiện tại
echo "Backing up current configuration..."
sudo mkdir -p /etc/netplan/backup
sudo cp /etc/netplan/*.yaml /etc/netplan/backup/ 2>/dev/null

# Tạo file cấu hình mới
echo "Creating new netplan configuration..."
cat <<EOF | sudo tee /etc/netplan/01-netconfig.yaml
network:
  version: 2
  renderer: networkd
  ethernets:
    ${INTERFACE}:
      dhcp4: false
      dhcp6: false
      addresses:
        - ${IP_ADDRESS}
      routes:
        - to: default
          via: ${GATEWAY}
      nameservers:
        addresses:
          - ${DNS1}
          - ${DNS2}
EOF

# Vô hiệu hóa cloud-init
echo "Disabling cloud-init..."
sudo touch /etc/cloud/cloud-init.disabled

# Xóa dữ liệu cloud-init
echo "Cleaning cloud-init data..."
sudo rm -rf /var/lib/cloud/
sudo rm -f /etc/netplan/50-cloud-init.yaml

# Áp dụng cấu hình
echo "Applying network configuration..."
sudo netplan apply

echo "Configuration complete!"
echo "Current IP configuration:"
ip addr show ${INTERFACE} | grep inet

Chạy script:

chmod +x setup-static-ip.sh
./setup-static-ip.sh

Lưu ý quan trọng

  1. Luôn backup trước khi thay đổi: Đảm bảo có backup của cấu hình hiện tại
  2. Test trong môi trường lab trước: Thử nghiệm trên VM test trước khi áp dụng lên production
  3. Console access: Đảm bảo có quyền truy cập console VM trong trường hợp mất kết nối mạng
  4. Document thay đổi: Ghi chép lại các thông số IP đã cấu hình
  5. Cẩn thận với firewall: Kiểm tra firewall rules sau khi thay đổi IP

Tổng kết

Việc cấu hình IP tĩnh và vô hiệu hóa Cloud-Init trên Ubuntu 24.04.3 giúp đảm bảo hệ thống có cấu hình mạng ổn định và không bị thay đổi ngoài ý muốn. Hãy luôn thực hiện các bước backup và test cẩn thận trước khi áp dụng lên môi trường production.