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
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: 1500LACP bond + VLAN
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
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: 0IP đặ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 idnetplan 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
- Netplan documentation, Netplan YAML reference
- Linux network cheatsheet để verify bằng
ip. - BFD/LAG troubleshooting cho phía switch/router.