Sổ tay kỹ thuật

Netplan trên Ubuntu – static IP, bond, VLAN, bridge

how-to#linux#netplan#ubuntu· cập nhật 2026-11-06

Dùng khi cấu hình mạng bền vững trên Ubuntu Server (IP tĩnh, LACP bond, VLAN, bridge cho VM) và áp dụng an toàn qua SSH.

Sửa trang này
Mục lục

Tóm tắt: Netplan đọc /etc/netplan/*.yaml (theo thứ tự tên file), sinh cấu hình cho backend networkd (server) hoặc NetworkManager (desktop). Khi làm qua SSH luôn dùng sudo netplan try (tự rollback sau 120s nếu không xác nhận) trước khi netplan apply. Ví dụ dưới dùng cú pháp routes: - to: default; gateway4 đã bị deprecate.

Luồng hoạt động

flowchart LR A["/etc/netplan/*.yaml"] --> B["netplan generate"] B --> C["/run/systemd/network/*"] B --> D["NetworkManager profiles"] C --> E["systemd-networkd"] A --> F{"netplan try"} F -->|"Enter trong timeout"| G["giữ cấu hình"] F -->|"không xác nhận"| H["rollback"] G --> I["netplan apply"]

Cấu hình

Mỗi file phải có network: + version: 2. Nên gom vào một file và đặt quyền 600 (netplan cảnh báo nếu file đọc được bởi người khác).

IP tĩnh

/etc/netplan/01-netcfg.yaml
network:
  version: 2
  renderer: networkd
  ethernets:
    eno1:
      dhcp4: false
      dhcp6: false
      addresses:
        - 198.51.100.10/24
        - 2001:db8:100::10/64
      routes:
        - to: default
          via: 198.51.100.1
        - to: 203.0.113.0/24
          via: 198.51.100.254
          metric: 100
      nameservers:
        addresses: [198.51.100.53, 2001:db8:100::53]
        search: [example.com]
      mtu: 1500

LACP bond + VLAN

/etc/netplan/01-netcfg.yaml
network:
  version: 2
  renderer: networkd
  ethernets:
    eno1: {}
    eno2: {}
  bonds:
    bond0:
      interfaces: [eno1, eno2]
      mtu: 9000
      parameters:
        mode: 802.3ad
        lacp-rate: fast
        mii-monitor-interval: 100
        transmit-hash-policy: layer3+4
  vlans:
    bond0.100:
      id: 100
      link: bond0
      addresses: [198.51.100.10/24]
      routes:
        - to: default
          via: 198.51.100.1
      nameservers:
        addresses: [198.51.100.53]
    bond0.200:
      id: 200
      link: bond0
      addresses: [203.0.113.10/24]

Switch phía đối diện phải cấu hình port-channel LACP (active) và trunk VLAN 100, 200 tương ứng.

Bridge cho VM/container

/etc/netplan/01-netcfg.yaml
network:
  version: 2
  renderer: networkd
  ethernets:
    eno1:
      dhcp4: false
  bridges:
    br0:
      interfaces: [eno1]
      addresses: [198.51.100.10/24]
      routes:
        - to: default
          via: 198.51.100.1
      nameservers:
        addresses: [198.51.100.53]
      parameters:
        stp: false
        forward-delay: 0

IP đặt trên br0, không đặt trên eno1.

Lệnh

sudo chmod 600 /etc/netplan/*.yaml
sudo netplan generate                  # kiểm cú pháp, sinh file backend, chưa áp dụng
sudo netplan try --timeout 120         # áp dụng thử, Enter để giữ, không thì tự rollback
sudo netplan apply                     # áp dụng chính thức
sudo netplan get                       # cấu hình hợp nhất từ mọi file
sudo netplan --debug apply             # xem chi tiết khi lỗi
networkctl status bond0                # trạng thái theo networkd
cat /proc/net/bonding/bond0            # LACP partner, slave nào up
ip -d link show bond0.100              # xác nhận VLAN id

netplan apply không xoá thiết bị ảo (bond, bridge, VLAN) đã bỏ khỏi YAML; phải ip link del <dev> hoặc reboot. netplan try cũng có giới hạn với thiết bị ảo và đôi khi rollback không trọn: hãy có đường console/IPMI dự phòng khi đổi bond/bridge trên máy ở xa.

Lỗi thường gặp

Triệu chứng Nguyên nhân Cách xử lý
Error in network definition / lỗi YAML Thụt lề sai, tab thay vì space sudo netplan generate để thấy dòng lỗi; chỉ dùng space
gateway4 has been deprecated Cú pháp cũ Đổi sang routes: - to: default via: ...
Permissions ... are too open File đọc được bởi người khác chmod 600 /etc/netplan/*.yaml
Cấu hình bị ghi đè sau reboot (cloud VM) cloud-init sinh 50-cloud-init.yaml Tắt network của cloud-init: /etc/cloud/cloud.cfg.d/99-disable-network-config.cfg với network: {config: disabled}
Hai default route Cả DHCP và static cùng cấp gateway dhcp4: false hoặc dhcp4-overrides: {use-routes: false}
Bond chỉ có 1 slave active / LACP không lên Switch chưa cấu hình LACP, hoặc mode lệch Kiểm tra /proc/net/bonding/bond0 (Partner MAC toàn 0 là switch không trả LACP)
Mất SSH sau apply Sai IP/route Dùng netplan try lần sau; giờ thì vào console
Tên interface khác dự kiến Tên dự đoán thay đổi theo phần cứng Khớp bằng match: {macaddress: ...} + set-name:

Tham khảo