Tại sao tcpdump-uw thường khiến bạn thất vọng?
Nếu thường xuyên quản trị VMware ESXi, chắc hẳn bạn đã quen thuộc với tcpdump-uw. Nhưng công cụ này có một điểm yếu chí mạng. Nó chỉ bắt được traffic đi qua các interface VMkernel như Management hay vMotion. Khi cần tìm hiểu tại sao VM A không ping được VM B, hoặc tại sao gói tin từ Switch vật lý “biến mất” sau khi qua card mạng vmnic, tcpdump-uw hoàn toàn bất lực.
VMware đã giải quyết vấn đề này bằng pktcap-uw (có từ bản ESXi 5.5). Công cụ này cho phép bạn “chặn đầu” gói tin tại mọi điểm: từ vSwitch, Distributed Switch đến các Uplink vật lý. Nó giống như việc bạn có một camera giám sát đặt tại mọi ngã tư trong mạng ảo hóa của mình.
Bắt gói tin trên ESXi trong 60 giây
Đầu tiên, hãy bật SSH trên Host ESXi và đăng nhập. Giả sử bạn muốn kiểm tra xem traffic có thực sự đi qua card mạng vật lý vmnic0 hay không. Hãy thử bắt 10 gói tin đầu tiên:
# Bắt 10 gói tin trên uplink vmnic0 và hiển thị trực tiếp
pktcap-uw --uplink vmnic0 -c 10
Để tránh bị trôi màn hình do quá nhiều traffic rác, hãy lọc chính xác IP của máy ảo đang gặp sự cố (ví dụ: 192.168.1.50):
# Lọc theo IP cụ thể để thu hẹp phạm vi
pktcap-uw --uplink vmnic0 --ip 192.168.1.50
Lưu ý: Đừng quên nhấn Ctrl + C để dừng. Nếu không dùng tham số -c, lệnh sẽ chạy liên tục. Với các link 10Gbps, điều này có thể gây áp lực lớn lên CPU của Host.
Giải mã các tham số cốt lõi
Để dùng pktcap-uw hiệu quả, bạn cần hiểu rõ gói tin đang bị kẹt ở đâu trong chuỗi: Physical NIC → vSwitch → Portgroup → Virtual NIC.
1. Điểm bắt (Capture Points)
--uplink [vmnicX]: Kiểm tra traffic tại card mạng vật lý.--vmport [Port ID]: Kiểm tra traffic tại cổng của máy ảo. Dùng lệnhnet-stats -lđể lấy Port ID chính xác.--vswitch [vSwitch Name]: Bắt gói tin ở cấp độ Switch ảo.
2. Hướng di chuyển (Direction)
Bạn cần biết gói tin đang đi vào hay đi ra khỏi điểm bắt:
--dir 0: Inbound (Gói tin đi vào Host hoặc VM).--dir 1: Outbound (Gói tin từ VM hoặc Host đi ra ngoài).
3. Giai đoạn kiểm tra (Stage)
Đây là tính năng cực hay để biết Firewall của ESXi có đang chặn traffic không:
--stage 0: Trước khi xử lý (Pre-check).--stage 1: Sau khi đã qua các bộ lọc (Post-check).
Cách xuất file PCAP để phân tích bằng Wireshark
Đọc log text trên terminal rất mỏi mắt, nhất là với các luồng TCP phức tạp. Cách tốt nhất là xuất ra file .pcap để soi trên Wireshark.
# Lưu traffic của VM vào Datastore dưới dạng file pcap
pktcap-uw --vmport 33554440 -o /vmfs/volumes/DATASTORE_NAME/debug_network.pcap
Sau khi chạy lệnh, hãy thực hiện vài lệnh ping hoặc truy cập web từ VM để tạo traffic. Sau đó tải file về máy qua WinSCP.
Mẹo: Nếu chỉ cần xem header (IP, Port) mà không cần xem nội dung gói tin, hãy thêm -s 128. File log sẽ nhẹ hơn rất nhiều, giúp bạn capture được thời gian dài hơn.
Kinh nghiệm thực chiến: Tránh những sai lầm ngớ ngẩn
Qua nhiều lần “cứu hộ” hệ thống, mình rút ra 4 quy tắc vàng:
- Tránh xa phân vùng root: Tuyệt đối không lưu file pcap vào
/tmphay/. Phân vùng này trên ESXi rất nhỏ. Một file capture 500MB có thể làm treo toàn bộ Host ngay lập tức. Luôn lưu vào Datastore. - Luôn check net-stats: Port ID của VM sẽ thay đổi nếu bạn khởi động lại VM hoặc vMotion sang Host khác. Hãy chạy
net-stats -lngay trước khi bắt gói tin để có ID mới nhất. - Dọn dẹp process: Đôi khi bạn nhấn Ctrl+C nhưng tiến trình vẫn chạy ngầm. Hãy dùng
ps -c | grep pktcap-uwđể kiểm tra. Nếu thấy nó vẫn tồn tại, hãy dùngkill -9để giải phóng CPU. - Cảnh giác với CPU: Việc bắt gói tin trên card 25Gbps đang tải cao có thể đẩy CPU lên 100%. Hãy ưu tiên dùng các bộ lọc (filter) về Port hoặc IP để giảm tải cho hệ thống.
Làm chủ pktcap-uw giúp bạn thoát khỏi cảnh đoán mò. Thay vì tranh cãi với đội Network, bạn chỉ cần đưa ra file pcap làm bằng chứng xác thực gói tin bị rơi ở đâu.

