HỌC BẰNG THỰC HÀNH
← Lộ trình học
01 · Linux Administration

Lệnh mạng và cấu hình bền vững bằng nmcli

Thực hiện trên server của bạn, rồi kiểm tra từng tiêu chí.

Cốt lõi

Vì sao cần học

Phần lớn sự cố "ứng dụng không kết nối được" nằm ở tầng mạng: sai địa chỉ, sai route, port không mở, tên không phân giải. Bạn cần đọc nhanh trạng thái mạng của một máy. Bạn cũng cần biết cấu hình nào chỉ tồn tại trong bộ nhớ (ip addr add) và cấu hình nào còn sau reboot (profile của NetworkManager). Module 02 sẽ đi sâu vào networking; bài này là các lệnh quản trị cơ bản.

Mục tiêu

  • Đọc địa chỉ, route, socket bằng ip và ss.
  • Kiểm tra kết nối và phân giải tên bằng ping, getent, curl.
  • Phân biệt cấu hình runtime (ip) với cấu hình bền vững (nmcli connection).
  • Thêm interface và địa chỉ IP bằng nmcli mà không làm mất kết nối SSH.

Điều kiện tiên quyết

  • Bài Thêm ổ dữ liệu bằng LVM và fstab.

Mental model

NetworkManager quản lý mạng trên RHEL. Cấu hình nằm trong connection profile, lưu dưới dạng file keyfile trong /etc/NetworkManager/system-connections/. Khi boot, NetworkManager đọc profile và áp vào device (interface).

LệnhTác dụngCòn sau reboot?
ip address addThêm địa chỉ trực tiếp vào kernelKhông
nmcli connection modify + upSửa profile rồi áp dụngCó

Phân giải tên đi theo thứ tự trong /etc/nsswitch.conf, thường là files (tức /etc/hosts) trước, rồi dns. getent hosts <tên> đi đúng đường mà ứng dụng dùng; dig chỉ hỏi DNS và bỏ qua /etc/hosts.

Bài này dùng interface dummy kdc0: một interface ảo chỉ tồn tại trong máy. Bạn thực hành đầy đủ nmcli mà không đụng tới card mạng đang giữ kết nối SSH.

Thực hành (Guided Lab)

1. Đọc trạng thái mạng

ip -brief address
ip route
ip route get 1.1.1.1
ss -tulpn
nmcli device status
nmcli connection show
cat /etc/resolv.conf
getent hosts localhost
Giải thích lệnh và tham số
Lệnh / tùy chọnÝ nghĩa
ip routeXem bảng định tuyến; ip route get 1.1.1.1 hỏi route/địa chỉ nguồn sẽ dùng để tới IP này, không gửi ping.
ss -tulpn-t TCP, -u UDP, -l socket đang nghe, -p tiến trình sở hữu, -n in IP/port số thay vì phân giải tên. Có thể cần sudo để xem mọi tiến trình.
nmcli device statusXem trạng thái thiết bị mạng do NetworkManager quản lý.
nmcli connection showLiệt kê profile cấu hình kết nối.
cat /etc/resolv.confXem cấu hình resolver, gồm DNS server.
getent hosts localhostPhân giải tên qua cơ chế của hệ điều hành, gồm nguồn /etc/hosts nếu được cấu hình.

ip route get cho biết gói tin tới một địa chỉ sẽ đi qua interface và gateway nào. ss -tulpn liệt kê socket TCP/UDP đang lắng nghe kèm tiến trình.

2. Cấu hình runtime: mất sau reboot

sudo ip link add kdc-tmp type dummy
sudo ip address add 10.98.0.1/24 dev kdc-tmp
ip -brief address show kdc-tmp
sudo ip link delete kdc-tmp
Giải thích lệnh và tham số

ip link add kdc-tmp type dummy tạo interface ảo dummy. ip address add 10.98.0.1/24 dev kdc-tmp gắn IP/prefix lên interface: dev chỉ thiết bị. /24 là độ dài prefix IPv4, tương ứng netmask 255.255.255.0. show kdc-tmp chỉ xem thiết bị đó; ip link delete xóa interface runtime. Các lệnh ip này chưa lưu profile bền vững.

Cấu hình này không được lưu ở đâu. Đây là lỗi "mất cấu hình sau reboot" bạn sẽ gặp lại ở bài Break/Fix.

3. Profile bền vững bằng nmcli

sudo nmcli connection add type dummy ifname kdc0 con-name kdc-dummy \
  ipv4.method manual ipv4.addresses 10.99.0.10/24 ipv6.method disabled
sudo nmcli connection up kdc-dummy
ip -brief address show kdc0
nmcli connection show kdc-dummy | grep -E 'ipv4.(method|addresses)|autoconnect'
sudo cat /etc/NetworkManager/system-connections/kdc-dummy.nmconnection
ping -c 2 10.99.0.10
Giải thích lệnh và tham số

nmcli connection add tạo profile: type dummy chọn loại, ifname kdc0 đặt tên interface, con-name kdc-dummy đặt tên profile. ipv4.method manual chọn IP tĩnh, ipv4.addresses nhận IP/prefix, ipv6.method disabled tắt IPv6 trên profile này. connection up kích hoạt profile. ping -c 2 gửi 2 yêu cầu rồi dừng; dùng để kiểm tra có phản hồi mạng.

Thêm địa chỉ thứ hai vào cùng profile, áp dụng, rồi bỏ đi:

sudo nmcli connection modify kdc-dummy +ipv4.addresses 10.99.0.11/24
sudo nmcli connection up kdc-dummy
ip -brief address show kdc0
sudo nmcli connection modify kdc-dummy -ipv4.addresses 10.99.0.11/24
sudo nmcli connection up kdc-dummy
Giải thích lệnh và tham số

Trong nmcli connection modify, dấu + trước thuộc tính dạng danh sách là thêm một mục, dấu - là xóa một mục; không có dấu thường là thay giá trị. Chạy connection up để áp dụng thay đổi. ping -c 1 ở bước tiếp theo chỉ gửi một yêu cầu.

modify chỉ sửa profile; up mới áp dụng vào interface.

4. Tên máy nội bộ trong /etc/hosts

echo '10.99.0.10  db.kdc.lab' | sudo tee -a /etc/hosts
getent hosts db.kdc.lab
ping -c 1 db.kdc.lab
Giải thích lệnh và tham số

tee -a /etc/hosts thêm dòng phân giải vào cuối file. getent hosts <tên> tra cứu tên theo cấu hình hệ thống; ping -c 1 gửi một yêu cầu rồi dừng.

5. Reboot

sudo systemctl reboot

Sau khi đăng nhập lại: ip -brief address show kdc0 và getent hosts db.kdc.lab.

Tự kiểm tra (Verification)

ip -brief address show kdc0
nmcli -g ipv4.addresses connection show kdc-dummy
getent hosts db.kdc.lab
Giải thích lệnh và tham số

nmcli -g ipv4.addresses connection show ... chỉ in giá trị thuộc tính được chọn: -g là get-values. connection delete <profile> ở phần dọn dẹp xóa profile bền vững, khác ip link delete chỉ thay trạng thái runtime. hostnamectl set-hostname <tên> dùng khi cần đổi hostname bền vững; không tự sửa các dòng trong /etc/hosts.

Chọn server và bấm Kiểm tra kết quả.

Lỗi thường gặp

  • nmcli connection modify trên profile của card mạng chính rồi up: có thể mất SSH ngay lập tức. Luôn có console dự phòng khi sửa interface đang dùng.
  • Sửa thẳng file trong system-connections/ mà quên nmcli connection reload.
  • Dùng dig để kiểm tra tên khai báo trong /etc/hosts: dig không đọc file này. Dùng getent hosts.
  • Hostname: đổi bằng hostnamectl set-hostname, không sửa tay /etc/hostname khi máy đang chạy.

Ghi chú production

  • /etc/hosts phù hợp cho lab và vài máy. Hệ thống thật dùng DNS nội bộ; Module 02 sẽ dựng và phá DNS.
  • Đặt IP tĩnh cho server bằng profile NetworkManager hoặc cloud-init, không bằng ip address add trong script khởi động.

Ghi chú Ubuntu

Ubuntu Server dùng netplan với backend systemd-networkd, không phải NetworkManager. Lệnh ip, ss, getent giống nhau; phần nmcli và tiêu chí profile chỉ áp dụng cho RHEL-family hoặc Ubuntu đã chuyển sang NetworkManager.

Dọn dẹp

sudo nmcli connection delete kdc-dummy
sudo sed -i '/db\.kdc\.lab/d' /etc/hosts
Giải thích lệnh và tham số

nmcli connection delete kdc-dummy xóa profile đã lưu. sed -i sửa file tại chỗ; biểu thức /db\.kdc\.lab/d xóa dòng chứa hostname đó, dấu \. khớp dấu chấm theo nghĩa literal.

Tài liệu chính thức