Cứu nguy Wi-Fi cho Linux Server từ CLI: Tuyệt chiêu nmcli và wpa_supplicant

Network tutorial - IT technology blog
Network tutorial - IT technology blog

Khi Ethernet “phản bội” bạn lúc 2 giờ sáng

Kịch bản kinh điển: Bạn đang remote fix lỗi cho server ở chi nhánh vào lúc nửa đêm. Đùng một cái, switch trung tâm “đi xa” hoặc sợi dây LAN duy nhất bị chuột gặm đứt. Cổng Ethernet tê liệt. Hy vọng duy nhất là con server này bắt được Wi-Fi dự phòng của văn phòng, nhưng ngặt nỗi nó là bản headless — không giao diện, không chuột, chỉ có một dấu nhắc lệnh nhấp nháy.

Thú thật là trong tình cảnh đó, nếu không nắm chắc CLI, bạn rất dễ “toát mồ hôi hột”. Việc cắm màn hình trực tiếp vào server gần như là bất khả thi. Đây chính là lúc kỹ năng quản trị Network qua dòng lệnh lên tiếng để cứu lấy một đêm mất ngủ.

Nên chọn nmcli hay wpa_supplicant?

Để bắt sóng Wi-Fi trên Linux mà không dùng đến chuột, chúng ta thường có hai con đường. Tùy vào bản phân phối (distro) bạn đang dùng mà công cụ đi kèm sẽ khác nhau.

1. nmcli (NetworkManager CLI)

Đây là công cụ mặc định trên các distro hiện đại như Ubuntu 22.04+, CentOS/RHEL, hay Fedora. nmcli rất mạnh, cú pháp trực quan và tự động xử lý file cấu hình cực chuẩn. Nó giống như một con dao đa năng cho SysAdmin.

2. wpa_supplicant

Nếu nmcli là một chiếc SUV đa dụng thì wpa_supplicant giống như chiếc xe Jeep thô sơ nhưng cực kỳ lỳ lợm. Nó là công cụ cấp thấp, chuyên trị các giao thức bảo mật Wi-Fi (WPA2, WPA3). Trên các hệ thống siêu nhẹ (minimal) hoặc IoT như Raspberry Pi OS Lite, đây thường là lựa chọn duy nhất.

Cân nhắc ưu và nhược điểm

  • nmcli:
    • Ưu điểm: Cực nhanh, chỉ 1-2 câu lệnh là có mạng. Tự động kết nối lại sau khi reboot (persistent).
    • Nhược điểm: Gói network-manager khá nặng (tốn khoảng 10-15MB RAM) và kéo theo nhiều dependency như D-Bus.
  • wpa_supplicant:
    • Ưu điểm: Gần như máy Linux nào cũng có. Rất nhẹ, phù hợp cho server tài nguyên yếu.
    • Nhược điểm: Cú pháp dài dòng. Bạn phải tự gán IP bằng dhclient hoặc config file text thủ công, dễ sai một dấu cách là hỏng cả bài.

Chọn cách nào để “sống sót”?

Ưu tiên hàng đầu lúc 2 giờ sáng là tốc độ. Nếu server có sẵn NetworkManager (check bằng systemctl status NetworkManager), hãy dùng nmcli ngay. Nếu không, hãy trung thành với wpa_supplicant.

Cách 1: Sử dụng nmcli (Nhanh & Gọn)

Đầu tiên, hãy tìm tên interface Wi-Fi. Đừng mặc định nó là wlan0, đôi khi nó sẽ là wlp2s0 hoặc enp0s20f3.

ip link show

Bước 1: Kích hoạt card Wi-Fi

nmcli radio wifi on

Bước 2: Quét mạng xung quanh

Lệnh này giúp bạn chắc chắn server đang thấy sóng và biết chính xác SSID cần kết nối.

nmcli device wifi list

Bước 3: Kết nối

nmcli device wifi connect "SSID_CUA_BAN" password "MAT_KHAU_WIFI"

Nếu thấy dòng “Device ‘wlan0’ successfully activated” là bạn đã thành công. Profile này sẽ được lưu vĩnh viễn.

Cách 2: Sử dụng wpa_supplicant (Thủ công & Chắc chắn)

Cách này phù hợp khi bạn dùng Debian Minimal hoặc server đời cũ.

Bước 1: Tạo file cấu hình bảo mật

Dùng tool wpa_passphrase để mã hóa mật khẩu thay vì ghi text thuần vào file, tránh lộ pass khi lỡ tay cat file config.

wpa_passphrase "SSID_CUA_BAN" "MAT_KHAU" | sudo tee /etc/wpa_supplicant/wpa_supplicant.conf

Bước 2: Chạy service dưới nền

sudo wpa_supplicant -B -i wlan0 -c /etc/wpa_supplicant/wpa_supplicant.conf

Trong đó -B (Background) giúp bạn giữ được terminal để gõ lệnh tiếp theo.

Bước 3: Xin cấp IP

wpa_supplicant không tự xin IP, bạn cần gọi DHCP client:

sudo dhclient wlan0

Bẫy Routing: Tại sao báo Connected mà không có Internet?

Một lỗi cực kỳ phổ biến: Server vẫn cố đẩy traffic qua cổng Ethernet đã chết vì nó có metric thấp hơn (độ ưu tiên cao hơn). Bạn kết nối Wi-Fi thành công nhưng vẫn không ping được Google.

Hãy kiểm tra bảng route:

ip route show

Nếu gateway của Ethernet vẫn chễm chệ ở dòng đầu (default via…), bạn cần xóa nó hoặc tăng metric của Wi-Fi lên. Lúc này, việc tính toán dải IP để gán tĩnh (nếu cần) là cực kỳ quan trọng để tránh xung đột subnet.

Mẹo nhỏ: Nếu cần chia subnet nhanh hoặc check dải IP dự phòng, mình hay dùng toolcraft.app/vi/tools/developer/ip-subnet-calculator. Chỉ cần nhập CIDR (ví dụ /24 hoặc /26) là có ngay dải IP khả dụng và Broadcast, tránh lỗi gán trùng IP Gateway khiến mạng bị loop — lỗi này cực khó debug khi đang mệt.

Kiểm tra kết quả cuối cùng

Đừng quên lệnh ping thần thánh để chốt hạ:

ping -c 4 8.8.8.8

Nếu nhận được reply với độ trễ khoảng 20-50ms, chúc mừng bạn đã cứu server thành công mà không cần một sợi cáp nào.

Quản trị Linux qua CLI cần sự tỉ mỉ. Hy vọng kinh nghiệm “xử lý sự cố lúc nửa đêm” này giúp anh em tự tin hơn khi dây LAN đột ngột đình công.

Share: