Khoản nợ tài liệu
Tài liệu tĩnh là một lời nói dối. Trong bất kỳ hạ tầng nào phát triển nhanh hơn vài rack mỗi năm, giấy tờ thường là thứ đầu tiên bị lỗi thời. Tôi không thể nhớ nổi mình đã mất bao nhiêu giờ để nheo mắt nhìn những sơ đồ Visio mờ nhạt hay lục tìm trong các tệp Excel, chỉ để nhận ra một máy chủ đã được chuyển sang một cổng switch khác từ ba tháng trước mà không ai cập nhật nhật ký. Đó là một cuộc chiến vô vọng khi mà hệ thống cáp vật lý mới là nguồn sự thật (source of truth) duy nhất.
Sáu tháng trước, tôi đã loại bỏ hoàn toàn quy trình vẽ sơ đồ thủ công. Tôi thay thế nó bằng một hệ thống phát hiện tự động dựa trên lldpd. Thiết lập này đã xử lý hàng trăm node trong môi trường production mà không gặp một lỗi nào. Bằng cách sử dụng các giao thức phát hiện lớp 2 (Layer 2) như LLDP (Link Layer Discovery Protocol) và CDP (Cisco Discovery Protocol), các máy chủ Linux của tôi hiện giờ tự báo cáo vị trí chính xác của chúng. Chúng xác định switch thượng nguồn (upstream switch), cổng cụ thể mà chúng đang kết nối và IP quản lý của hệ thống mạng mà chúng đang nằm trong đó.
Bắt đầu nhanh: Xem các thiết bị lân cận trong 5 phút
Cách nhanh nhất để có được cái nhìn tổng quan là sử dụng daemon lldpd. Mặc dù có các công cụ khác, tôi thích lldpd vì nó cực kỳ nhẹ — tiêu tốn chưa đến 10MB RAM — và hỗ trợ hầu hết mọi giao thức, bao gồm LLDP, CDP, FDP và SONMP.
1. Cài đặt
Đối với hệ thống Debian hoặc Ubuntu:
sudo apt update
sudo apt install lldpd -y
Đối với RHEL, CentOS hoặc AlmaLinux:
sudo dnf install epel-release -y
sudo dnf install lldpd -y
2. Kích hoạt và Khởi chạy
sudo systemctl enable --now lldpd
3. Kiểm tra các thiết bị lân cận
Hãy để daemon chạy khoảng 30 giây để trao đổi các gói tin đầu tiên. Sau đó, chạy lệnh:
lldpcli show neighbors
Nếu bạn đang cắm vào một switch quản lý (managed switch) có kích hoạt LLDP hoặc CDP, bạn sẽ thấy thông tin chi tiết như sau:
Interface: eth0, via: LLDP, RID: 1, Time: 0 ngày, 00:01:24
Chassis:
ChassisID: mac 00:25:90:7a:bc:de
SysName: Core-Switch-01
SysDescr: Cisco Nexus Operating System (NX-OS) Software
MgmtIP: 10.10.50.1
Capability: Bridge, Router
Port:
PortID: ifname Ethernet1/12
PortDescr: Server-Rack-A1-Node-05
VLAN: 100
Cách thức hoạt động của tính năng phát hiện Topology
Các giao thức phát hiện lớp 2 không quan tâm đến địa chỉ IP của bạn. Chúng hoạt động bằng cách quảng bá các khung (frame) nhỏ theo khoảng thời gian đều đặn, thường là mỗi 30 giây. Các khung này mang các đơn vị Type-Length-Value (TLV) — về cơ bản là các gói dữ liệu nhỏ chứa danh tính của host. Vì điều này xảy ra ở lớp Data Link (Liên kết dữ liệu), việc phát hiện vẫn hoạt động ngay cả khi máy chủ của bạn không được gán IP cho giao diện mạng.
LLDP so với CDP: Tại sao nên dùng cả hai?
LLDP là tiêu chuẩn công nghiệp (IEEE 802.1AB). Mọi nhà sản xuất hiện đại như Arista, Juniper và HP đều hỗ trợ nó. Tuy nhiên, CDP là giao thức độc quyền cũ của Cisco. Lý do lldpd là lựa chọn hàng đầu của tôi là khả năng “song ngữ” của nó. Nó thu thập các khung CDP từ các thiết bị Cisco cũ, đồng thời trao đổi LLDP với các thiết bị còn lại trong tủ rack. Điều này giúp loại bỏ nỗi lo bị lệ thuộc vào một nhà cung cấp (vendor lock-in) khi nâng cấp phần cứng.
Sức mạnh của lldpcli
Công cụ lldpcli đóng vai trò là giao diện quản lý cho daemon chạy ngầm. Mặc dù tôi thường tự động hóa nó, nhưng chế độ tương tác (interactive mode) là “cứu cánh” khi xử lý sự cố. Ví dụ, nếu bạn nghi ngờ cáp bị hỏng hoặc cấu hình port channel sai, hãy chạy:
lldpcli watch
Lệnh này cung cấp luồng thông tin trực tiếp về các sự kiện phát hiện. Nếu một kỹ sư mạng thay đổi VLAN hoặc di chuyển cáp, bạn sẽ thấy bản cập nhật xuất hiện trên màn hình theo thời gian thực.
Tự động hóa việc kiểm kê
Vẽ sơ đồ một máy chủ là một thủ thuật thú vị. Vẽ sơ đồ 500 máy chủ là một sự thay đổi mang tính đột phá. Để làm cho dữ liệu này hữu ích ở quy mô lớn, chúng ta cần chuyển từ văn bản thuần túy sang dữ liệu có cấu trúc.
Xuất dữ liệu JSON
Khả năng hỗ trợ JSON gốc được tích hợp trực tiếp vào lldpcli. Điều này biến nó thành nền tảng hoàn hảo cho các script tự động hóa:
lldpcli -f json show neighbors
Tích hợp Python đơn giản
Tôi sử dụng một trình bao bọc (wrapper) nhỏ bằng Python để đưa dữ liệu này vào NetBox hoặc cơ sở dữ liệu giám sát trung tâm. Dưới đây là một script cơ bản để phân tích các thiết bị lân cận của bạn:
import subprocess
import json
def get_network_neighbors():
try:
# Chạy lệnh và lấy đầu ra JSON
result = subprocess.run(['lldpcli', '-f', 'json', 'show', 'neighbors'],
capture_output=True, text=True)
data = json.loads(result.stdout)
# Điều hướng cấu trúc JSON của lldpd
interfaces = data.get('lldp', {}).get('interface', {})
for iface_name, details in interfaces.items():
neighbor = details.get('chassis', [{}])[0]
port = details.get('port', [{}])[0]
print(f"Giao diện {iface_name} được kết nối với {neighbor.get('name')} tại cổng {port.get('id')}")
except Exception as e:
print(f"Lỗi khi phân tích dữ liệu LLDP: {e}")
if __name__ == "__main__":
get_network_neighbors()
Những bài học từ thực tế tại trung tâm dữ liệu
1. Đừng để lộ sơ đồ mạng của bạn
LLDP là một rủi ro bảo mật nếu nó bị lộ ra internet công cộng. Nó quảng bá sơ đồ đặt tên nội bộ và IP quản lý của bạn cho bất kỳ ai ở đầu dây bên kia. Luôn giới hạn lldpd trong các giao diện nội bộ. Bạn có thể thực hiện việc này dễ dàng trong cấu hình:
# Chỉ lắng nghe trên các card mạng quản lý và backend
sudo lldpcli configure system interface pattern eth1,eth2
2. “Cái bẫy” ảo hóa
Các gói tin LLDP thường bị chặn tại Linux bridge. Nếu bạn đang chạy KVM hoặc Docker, switch vật lý sẽ không nhìn thấy VM và VM cũng sẽ không nhìn thấy switch. Lời khuyên của tôi? Hãy chạy lldpd ngay trên máy chủ hypervisor thay vì cố gắng chuyển các khung tin qua các máy ảo khách.
3. Xử lý các Switch “im lặng”
Nếu lệnh lldpcli show neighbors không trả về kết quả, switch có khả năng là nguyên nhân. Các switch “ngu” (unmanaged switch) không hỗ trợ các giao thức này. Trên phần cứng Cisco, bạn có thể cần phải bật nó một cách rõ ràng bằng lệnh lldp run trong chế độ cấu hình global.
4. Kết nối với hệ thống NMS của bạn
Bằng cách kích hoạt SNMP subagent tùy chọn, các công cụ như LibreNMS hoặc Zabbix có thể tự động lấy dữ liệu LLDP. Điều này tạo ra một bản đồ tự phục hồi cho toàn bộ mạng của bạn. Khi một sợi cáp được chuyển đi, bản đồ sẽ tự cập nhật trong vòng vài phút.
Chuyển sang sử dụng lldpd đã thay đổi cách nhóm của tôi xử lý sự cố. Chúng tôi không còn hỏi “Đây là cổng nào?” mà bắt đầu khắc phục sự cố ngay lập tức. Nó biến một công việc dò tìm thủ công mất 20 phút thành một câu lệnh chỉ mất 2 giây. Trong một sự cố production, khoảng thời gian đó chính là sự khác biệt giữa một sự cố nhỏ và một thảm họa lớn.

