Quick Start: Chạy được ngay trong 5 phút
Đang SSH vào server và cần kiểm tra hoặc thay đổi cấu hình mạng ngay lập tức? Đây là 3 lệnh cần biết trước tiên:
# Xem trạng thái tất cả kết nối
nmcli connection show
# Xem thông tin card mạng
nmcli device status
# Xem chi tiết IP, gateway, DNS của một device
nmcli device show ens33
Hệ thống báo command not found? Cài NetworkManager trước:
# Ubuntu/Debian
sudo apt install network-manager
# CentOS/AlmaLinux/RHEL
sudo dnf install NetworkManager
sudo systemctl enable --now NetworkManager
Chạy được rồi? Giờ đi vào từng bước chi tiết.
Hiểu nmcli trước khi dùng
nmcli là CLI frontend của NetworkManager — daemon quản lý mạng mặc định trên Ubuntu 18.04+, Fedora 21+, RHEL/CentOS 7+ và Debian 10+. Thay vì edit file /etc/network/interfaces hay /etc/sysconfig/network-scripts/ tay, bạn dùng nmcli để giao tiếp với NetworkManager, và nó lo phần còn lại.
Có 2 khái niệm cần phân biệt rõ:
- Device: card mạng vật lý hoặc virtual (eth0, ens33, wlan0…)
- Connection: profile cấu hình mạng (tên, IP, DNS…) — một device có thể có nhiều connection nhưng chỉ active 1 cái tại một thời điểm
# Liệt kê devices và trạng thái
nmcli device
# Liệt kê connections — kể cả inactive
nmcli connection show
# Chỉ xem connections đang active
nmcli connection show --active
Output của nmcli connection show sẽ có dạng:
NAME UUID TYPE DEVICE
ens33 a1b2c3d4-e5f6-... ethernet ens33
lo ... loopback lo
Cột NAME là tên dùng cho tất cả các lệnh modify phía sau.
Cấu hình IP tĩnh với nmcli
Bước 1: Xác định tên connection
nmcli connection show
Lấy giá trị cột NAME — thường trùng tên với device (ens33, eth0…) nhưng không phải lúc nào cũng vậy.
Bước 2: Set IP tĩnh
nmcli connection modify "ens33" \
ipv4.method manual \
ipv4.addresses "192.168.1.100/24" \
ipv4.gateway "192.168.1.1" \
ipv4.dns "8.8.8.8,1.1.1.1"
Bước 3: Apply thay đổi
nmcli connection up "ens33"
Lệnh này disconnect rồi reconnect với cấu hình mới. Nếu đang SSH và IP thay đổi, session sẽ bị drop — hãy chuẩn bị console backup hoặc đảm bảo IP mới vẫn reachable trước khi chạy.
Quay lại DHCP khi cần
nmcli connection modify "ens33" ipv4.method auto
nmcli connection up "ens33"
Quản lý DNS đúng cách
Đây là điểm mình thấy nhiều người mới hay làm sai: trên máy dùng NetworkManager, file /etc/resolv.conf thường là symlink và sẽ bị ghi đè mỗi khi kết nối thay đổi. Chỉnh tay file đó rồi restart NetworkManager là mất sạch.
Cách đúng là set DNS qua nmcli:
# Set DNS server cho connection
nmcli connection modify "ens33" ipv4.dns "8.8.8.8,1.1.1.1"
# Thêm DNS search domain (hữu ích trong môi trường corporate)
nmcli connection modify "ens33" ipv4.dns-search "company.local internal.dev"
# Xem DNS đang được cấu hình
nmcli connection show "ens33" | grep -i dns
Muốn bỏ qua DNS do DHCP server cấp và chỉ dùng DNS tự set:
nmcli connection modify "ens33" ipv4.ignore-auto-dns yes
nmcli connection up "ens33"
Tạo connection mới từ đầu
Hồi mới bắt đầu làm sysadmin, mình từng mất cả buổi chiều debug vấn đề này chỉ vì không đọc kỹ log — connection đang conflict với một profile cũ còn sót từ lần cài OS trước. Từ đó mình có thói quen tạo connection mới thay vì modify cái cũ khi setup server fresh:
nmcli connection add \
type ethernet \
ifname ens33 \
con-name "server-static" \
ipv4.method manual \
ipv4.addresses "10.0.0.50/24" \
ipv4.gateway "10.0.0.1" \
ipv4.dns "8.8.8.8"
# Activate connection mới
nmcli connection up "server-static"
# Xóa connection cũ nếu không cần
nmcli connection delete "ens33"
Nâng cao: Các tình huống thường gặp
Thêm IP thứ 2 vào cùng card mạng
# Dùng dấu + để append, không ghi đè
nmcli connection modify "ens33" +ipv4.addresses "192.168.1.101/24"
nmcli connection up "ens33"
Cấu hình IPv6
nmcli connection modify "ens33" \
ipv6.method manual \
ipv6.addresses "2001:db8::1/64" \
ipv6.gateway "2001:db8::fffe"
nmcli connection up "ens33"
Disable IPv6 trên connection
nmcli connection modify "ens33" ipv6.method disabled
nmcli connection up "ens33"
Xem toàn bộ chi tiết connection dạng đẹp
nmcli -p connection show "ens33"
Flag -p (pretty) hiển thị output dạng bảng, dễ đọc hơn nhiều so với default.
Tắt autoconnect khi boot
nmcli connection modify "ens33" connection.autoconnect no
Tips thực tế khi làm việc hàng ngày
1. Verify ngay sau khi thay đổi:
ip addr show ens33
ip route show
cat /etc/resolv.conf
2. Test DNS hoạt động không:
resolvectl query google.com
# hoặc dùng nslookup nếu không có resolvectl
nslookup google.com
3. Xem log NetworkManager khi debug:
# Theo dõi realtime
journalctl -u NetworkManager -f
# Xem 50 dòng gần nhất
journalctl -u NetworkManager -n 50
4. Backup và replicate cấu hình: File connection nằm ở /etc/NetworkManager/system-connections/. Copy folder này sang server mới là xong — không cần gõ lại từng lệnh:
rsync -avz /etc/NetworkManager/system-connections/ \
root@new-server:/etc/NetworkManager/system-connections/
ssh root@new-server systemctl restart NetworkManager
5. Restart NetworkManager khi cần:
sudo systemctl restart NetworkManager
Dùng khi thay đổi không có hiệu lực, DNS bị cache cũ, hoặc sau khi edit file config thủ công.
Phần lớn tác vụ mạng hàng ngày của sysadmin gói gọn trong khoảng 10–15 lệnh nmcli thường dùng — không cần nhớ path config file khác nhau giữa distro. Thêm một điểm hữu ích khi viết script hay Ansible playbook: exit code của nmcli rõ ràng, 0 là thành công, khác 0 là lỗi, bắt trong điều kiện if dễ hơn nhiều so với parse output của ifconfig hay route ngày xưa.

