Làm chủ lệnh ss và ip để xử lý sự cố mạng Linux nâng cao

Linux tutorial - IT technology blog
Linux tutorial - IT technology blog

Chuyển đổi từ các công cụ cũ sang quản trị mạng Linux hiện đại

Trong nhiều năm, netstatifconfig là những công cụ quen thuộc của bất kỳ quản trị viên hệ thống nào. Tuy nhiên, các tiện ích này đã chính thức bị ngừng hỗ trợ (deprecated) hơn một thập kỷ qua. Việc hiện đại hóa Terminal Linux của bạn bằng cách thay thế các công cụ cũ là bước đi cần thiết để tăng hiệu suất làm việc. Chúng thuộc gói net-tools, vốn dựa trên việc đọc hệ thống tệp /proc để thu thập thông tin. Phương pháp này nổi tiếng là chậm và kém hiệu quả khi xử lý các máy chủ có lưu lượng truy cập cao.

Giải pháp thay thế hiện đại là bộ iproute2, bao gồm các lệnh ipss. Không giống như những người tiền nhiệm, các công cụ này giao tiếp trực tiếp với nhân Linux thông qua giao thức Netlink. Trên máy chủ Ubuntu 22.04 thực tế của tôi với 4GB RAM, tôi nhận thấy cách tiếp cận này giúp tự động hóa hiệu năng Linux và giảm đáng kể thời gian xử lý, đặc biệt là khi kiểm tra hàng nghìn kết nối socket đang hoạt động – tình huống thường khiến netstat bị treo hoặc lag.

Vấn đề: Tại sao Netstat không còn hiệu quả trên các hệ thống hiện đại

Khi một máy chủ xử lý tải nặng—chẳng hạn như Nginx reverse proxy bận rộn hoặc cơ sở dữ liệu lưu lượng lớn—số lượng network socket có thể lên tới hàng chục nghìn. Vì netstat phân tích các tệp văn bản trong /proc/net/, nó tiêu tốn đáng kể chu kỳ CPU chỉ để hiển thị danh sách các kết nối. Hơn nữa, netstat thường thiếu hỗ trợ cho các tính năng nhân mới hơn như thuật toán kiểm soát tắc nghẽn TCP hoặc thống kê socket chi tiết.

Nguyên nhân gốc rễ: Hiệu quả của Netlink

Bộ công cụ iproute2 giao tiếp bằng Netlink socket, cung cấp một giao diện nhị phân tới nhân hệ thống. Điều này cho phép ss (socket statistics) trích xuất dữ liệu kết nối gần như ngay lập tức. Tương tự, lệnh ip cung cấp một giao diện thống nhất để quản lý địa chỉ, bảng định tuyến và các đối tượng lân cận, giúp bạn dễ dàng phối hợp khi làm chủ systemd-resolved để xử lý DNS.

Cài đặt và thiết lập

Hầu hết các bản phân phối Linux hiện đại, bao gồm Ubuntu, Debian, CentOS Stream và AlmaLinux, đều được cài đặt sẵn iproute2. Bạn có thể kiểm tra sự hiện diện của các công cụ này bằng cách xem phiên bản của chúng.

# Kiểm tra phiên bản iproute2
ip -V
ss -V

Nếu vì lý do nào đó bản cài đặt tối giản của bạn thiếu các công cụ này, bạn có thể cài đặt chúng bằng trình quản lý gói cụ thể của bản phân phối.

# Trên Debian/Ubuntu
sudo apt update && sudo apt install iproute2

# Trên RHEL/AlmaLinux/Fedora
sudo dnf install iproute2

Cấu hình và cách sử dụng lệnh

Sử dụng ipss đòi hỏi sự thay đổi trong cách bạn tư duy về các đối tượng mạng. Lệnh ip sử dụng cú pháp hướng đối tượng: ip [ĐỐI_TƯỢNG] [LỆNH].

Quản lý Interface và địa chỉ IP

Thay vì ifconfig, hãy sử dụng các đối tượng addr (hoặc a) và link (hoặc l). Điều này cho phép kiểm soát chi tiết hơn nhiều đối với các ngăn xếp mạng (network stacks).

# Xem tất cả địa chỉ IP được gán cho các interface
ip addr show

# Bật hoặc tắt một interface
sudo ip link set eth0 up
sudo ip link set eth0 down

# Gán một địa chỉ IP phụ cho một interface
sudo ip addr add 192.168.1.50/24 dev eth0

Phân tích Socket với ss

Lệnh ss là nơi bạn sẽ thấy sự cải thiện hiệu suất rõ rệt nhất. Nó vượt trội trong việc lọc và cung cấp thông tin chi tiết về trạng thái TCP và UDP. Tôi thường xuyên sử dụng các cờ (flags) cụ thể để thu hẹp phạm vi vấn đề trong các sự cố thực tế.

# Hiển thị tất cả các cổng TCP và UDP đang lắng nghe kèm theo ID tiến trình
# -t: TCP, -u: UDP, -l: Đang lắng nghe, -p: Tiến trình, -n: Dạng số (không tra cứu DNS)
ss -tulpn

Một trong những tính năng hữu ích nhất của ss là khả năng lọc theo trạng thái. Nếu bạn nghi ngờ có một cuộc tấn công SYN flood hoặc điểm nghẽn trong việc đóng kết nối, bạn có thể lọc các trạng thái TCP cụ thể một cách dễ dàng.

# Hiển thị tất cả kết nối TCP ở trạng thái FIN-WAIT-1
ss -t state fin-wait-1

Xác minh và giám sát để chẩn đoán chuyên sâu

Khi đã hiểu cú pháp cơ bản, bạn có thể thực hiện chẩn đoán chuyên sâu—việc vốn rất khó khăn với các công cụ cũ. Dưới đây là ba tình huống thực tế mà ssip vượt trội hơn các giải pháp thay thế cũ.

1. Xác định các kết nối có độ trễ cao

Cờ -i trong ss cung cấp thông tin TCP nội bộ, bao gồm Round Trip Time (RTT) và kích thước cửa sổ tắc nghẽn (congestion window size). Điều này vô cùng quý giá khi người dùng báo cáo rằng “kết nối chậm” mặc dù băng thông vẫn cao.

# Lấy thống kê chi tiết cho một IP đích cụ thể
ss -ti dst 203.0.113.5

Hãy tìm giá trị rtt trong kết quả đầu ra. Nếu nó dao động mạnh, vấn đề có khả năng nằm ở lớp mạng (network layer) chứ không phải ở lớp ứng dụng (application layer). Trong những trường hợp phức tạp hơn, bạn có thể cần chẩn đoán Latency Kernel để tìm ra nguyên nhân gốc rễ.

2. Gỡ lỗi các vấn đề định tuyến

Lệnh ip route cung cấp cái nhìn rõ ràng hơn nhiều về cách nhân hệ thống xử lý các gói tin so với lệnh route -n cũ. Bạn thậm chí có thể mô phỏng việc tra cứu định tuyến để xem chính xác interface và gateway nào mà một gói tin sẽ sử dụng cho một đích đến cụ thể.

# Hiển thị bảng định tuyến
ip route show

# Kiểm tra tuyến đường nào được sử dụng cho một IP cụ thể
ip route get 8.8.8.8

3. Mức sử dụng bộ nhớ của Socket

Trên các hệ thống có RAM hạn chế, việc biết ngăn xếp mạng tiêu thụ bao nhiêu bộ nhớ là rất quan trọng. Cờ -m hiển thị mức sử dụng bộ nhớ của từng socket.

# Hiển thị các TCP socket cùng với mức tiêu thụ bộ nhớ của chúng
ss -tm

Trong một lần điều tra rò rỉ bộ nhớ trên máy chủ thực tế của mình, lệnh này đã giúp tôi xác định rằng một tập lệnh Python tùy chỉnh không đóng kết nối đúng cách, dẫn đến việc tích tụ một lượng lớn bộ đệm socket không được giải phóng.

Tóm tắt các cờ quan trọng

  • -a: Tất cả socket (đang lắng nghe và không lắng nghe).
  • -n: Không phân giải tên dịch vụ (đầu ra nhanh hơn).
  • -r: Phân giải tên máy chủ (hữu ích cho người đọc).
  • -e: Hiển thị thông tin socket chi tiết.
  • -o: Hiển thị thông tin bộ định thời (hữu ích để gỡ lỗi keep-alive).

Việc làm chủ các công cụ này không còn là tùy chọn đối với các kỹ sư Linux. Tốc độ và chiều sâu thông tin mà ssip cung cấp cho phép bạn giải mã các bí ẩn hiệu năng Linux và chẩn đoán các vấn đề mạng phức tạp trong vài giây thay vì vài phút. Mặc dù cú pháp ban đầu có vẻ khác lạ, nhưng hiệu quả đạt được trên các hệ thống tải cao khiến nỗ lực học tập là hoàn toàn xứng đáng.

Share: