Lệnh traceroute trong Linux — Kiểm tra lộ trình gói tin

Bạn đã bao giờ cảm thấy vô cùng lúng túng khi hệ thống kết nối mạng bỗng dưng chậm chạp một cách khó hiểu, nhưng lại không biết lỗi nằm ở đâu chưa nhỉ? Có phải do nhà cung cấp dịch vụ, do router hay do chính đường truyền từ VPS của bạn đang gặp vấn đề? Lúc này, việc hiểu rõ traceroute là gì sẽ trở thành "chìa khóa" giúp bạn giải quyết mọi rắc rối. Traceroute là một công cụ mạng mạnh mẽ giúp hiển thị lộ trình mà các gói tin đi qua để đến được đích. Trong vai trò một Senior System Admin, tôi đã vô cùng nhiều lần sử dụng traceroute Linux để chẩn đoán chính xác các điểm nghẽn (bottleneck) trong hạ tầng mạng phức tạp, giúp tiết kiệm hàng giờ đồng hồ mò mẫm. Tất nhiên, bài viết này sẽ hướng dẫn bạn chi tiết cách dùng traceroute cũng như cách kiểm tra lộ trình mạng một cách chuyên nghiệp nhất. Hãy cùng mình khám phá ngay nhé!

Cần chuẩn bị gì trước khi dùng lệnh traceroute?

  • Quyền người dùng: Yêu cầu quyền sudo hoặc quyền root để có thể gửi các gói tin ICMP hoặc UDP cần thiết cho quá trình dò tìm lộ trình.
  • Hệ điều hành hỗ trợ: Hoạt động trên hầu hết các bản phân phối Linux (Ubuntu, Debian, CentOS, Fedora, Arch Linux) và macOS.
  • Gói phần mềm cần thiết: - Trên Ubuntu/Debian: Chạy lệnh sudo apt install traceroute - Trên CentOS/RHEL/Fedora: Chạy lệnh sudo yum install traceroute hoặc sudo dnf install traceroute - Trên Arch Linux: Chạy lệnh sudo pacman -S traceroute

Cú pháp lệnh traceroute là gì?

Lệnh traceroute hỗ trợ nhiều dạng cú pháp khác nhau trên các hệ điều hành Linux để kiểm tra lộ trình gói tin qua các node mạng.

traceroute [OPTIONS] DESTINATION

Các tùy chọn của lệnh traceroute là gì?

Lệnh traceroute cung cấp nhiều tùy chọn để tùy chỉnh cách thức theo dõi đường đi gói tin, bao gồm các tùy chọn điều chỉnh tham số mạng, kiểm soát đầu ra và cấu hình phương thức truyền.

Tùy chọn ngắn Tùy chọn dài Mô tả
-4 traceroute -4 chỉ định sử dụng IPv4 cho truy vấn.
-6 traceroute -6 chỉ định sử dụng IPv6 cho truy vấn.
-d traceroute -d bật chế độ gỡ lỗi sockets.
-F traceroute -F không phân mảnh các gói tin được gửi.
-f traceroute -f giá_trị đặt giá trị TTL ban đầu thay vì mặc định là 1.
-g traceroute -g địa_chỉ_ip chỉ định tuyến đi qua các địa chỉ IP được liệt kê (tính năng tuyến tối thiểu).
-I traceroute -I sử dụng các gói tin ICMP ECHO thay vì UDP.
-m traceroute -m số_bước đặt số bước nhảy tối đa để theo dõi (mặc định là 30).
-M traceroute -M phương_thức chỉ định phương thức tracing như default, icmp, tcp (yêu cầu quyền root cho tcp).
-n traceroute -n không thực hiện phân giải tên DNS, chỉ hiển thị địa chỉ IP.
-p traceroute -p cổng đặt cổng UDP đích ban đầu để gửi truy vấn (mặc định là 33434).
-q traceroute -q số_gói đặt số lượng gói tin được gửi cho mỗi bước nhảy (mặc định là 3).
-r traceroute -r bỏ qua bảng định tuyến thông thường và gửi gói tin trực tiếp đến máy chủ.
-s traceroute -s địa_chỉ_ip chỉ định địa chỉ IP nguồn để gửi truy vấn.
-t traceroute -t giá_trị_tos đặt giá trị Type of Service (ToS) cho các gói tin.
-w traceroute -w thời_gian đặt thời gian chờ phản hồi tính bằng giây (mặc định là 5).
-z traceroute -z thời_gian đặt thời gian chờ giữa các truy vấn tính bằng miligiây.

xem thêm: Networking and Communication

Lệnh traceroute được sử dụng như thế nào trong thực tế?

Phần này trình bày các kịch bản kiểm tra lộ trình mạng thường gặp khi xử lý sự cố kết nối hoặc tối ưu hóa đường truyền.

traceroute là gì? [Kiểm tra lộ trình đến một host]

traceroute google.com
traceroute to google.com (28 hops)
 1  gateway (192.168.1.1)  1.234 ms  1.120 ms  1.050 ms
 2  dns.provider.net (10.0.0.1)  15.432 ms  15.120 ms  14.980 ms
 ...

Lệnh liệt kê danh sách các router (hop) mà gói tin đi qua để đến đích. Trong thực tế, đây là bước đầu tiên để xác định điểm nghẽn mạng nằm ở mạng nội bộ hay nhà cung cấp dịch vụ (ISP).

traceroute -n là gì? [Hiển thị địa chỉ IP thay vì tên miền]

traceroute -n 8.8.8.8
 1  192.168.1.1  1.100 ms  1.050 ms
 2  172.16.0.5  12.450 ms  12.300 ms

Tham số -n ngăn việc thực hiện reverse DNS lookup để hiển thị trực tiếp địa chỉ IP. Trên môi trường production, việc sử dụng cờ này giúp đẩy nhanh tốc độ quét khi không cần thiết phải phân giải tên miền của các hop trung gian.

traceroute -I là gì? [Sử dụng ICMP thay vì UDP]

traceroute -I google.com
 1  192.168.1.1  1.200 ms
 2  * * *
 3  10.1.1.5  25.400 ms

Tham số -I cho phép gửi gói tin ICMP Echo Request thay vì mặc định là UDP. Trong các trường hợp tường lửa (firewall) chặn các cổng UDP cao, việc chuyển sang ICMP giúp vượt qua các bộ lọc để quan sát lộ trình chính xác hơn.

traceroute -T -p là gì? [Sử dụng TCP để kiểm tra cổng dịch vụ]

traceroute -T -p 443 google.com
 1  192.168.1.1  0.800 ms
 2  core-router.isp.net  14.200 ms
 3  google.com  22.500 ms

Kết hợp tham số -T (TCP SYN) và -p (port) để mô phỏng lưu lượng truy cập vào một cổng cụ thể như 443. Đây là kỹ thuật quan trọng cho DevOps khi cần xác định xem một cổng dịch vụ cụ thể có bị chặn bởi thiết bị bảo mật trên đường đi hay không.

traceroute | grep là gì? [Lọc kết quả tìm kiếm điểm lỗi]

traceroute google.com | grep "\*"
 4  * * *
 5  * * *
 6  172.253.50.122  35.120 ms

Sử dụng pipe để kết hợp với lệnh grep nhằm lọc ra các hop bị mất gói (timeout). Trong các kịch bản automation hoặc script giám sát, cách làm này giúp nhanh chóng trích xuất thông tin về các vị trí gây mất kết nối trong hệ thống mạng phức tạp.

Tại sao lệnh traceroute không trả về kết quả hoặc gặp lỗi?

Trong quá trình triển khai và kiểm tra mạng, người dùng thường gặp phải các tình huống lệnh không thể truy vết được lộ trình đích hoặc trả về các ký tự sao (asterisks).

Lỗi không nhận được phản hồi từ các node trung gian (Request timed out)

traceroute google.com
traceroute to google.com [142.250.204.46], 30 hops max, 60 byte packets
 1  * * *
 2  * * *

Các thiết bị mạng hoặc firewall trên lộ trình được cấu hình để chặn các gói tin ICMP hoặc UDP, khiến traceroute không thể nhận được phản hồi từ các hop này.

Lỗi không thể phân giải tên miền (Unknown host)

traceroute website-khong-ton-tai.com
traceroute: could not resolve website-khong-ton-tai.com: Name or service not known

Lệnh thất bại ngay lập tức do hệ thống DNS không thể phân giải tên miền mục tiêu thành địa chỉ IP để bắt đầu quá trình truy vết.

Lỗi thiếu quyền quản trị khi sử dụng các tùy chọn đặc biệt

traceroute -I google.com
traceroute: ICMP traceroute requires root privileges

Khi sử dụng tham số -I để ép buộc sử dụng giao thức ICMP thay vì UDP, lệnh yêu cầu quyền root để can thiệp vào tầng network của hệ thống.

Lỗi bị chặn bởi tường lửa cục bộ (Local Firewall)

traceroute 8.8.8.8
traceroute to 8.8.8.8 (8.8.8.8), 30 hops max, 60 byte packets
 1  * * *

Cấu hình iptables hoặc firewalld trên máy chủ nội bộ ngăn chặn việc gửi các gói tin thăm dò, khiến quá trình traceroute không thể bắt đầu ngay từ hop đầu tiên.

Quy trình thực tế dùng traceroute để chẩn đoán lỗi kết nối mạng trong dự án Linux?

Trong kịch bản triển khai ứng dụng lên Cloud Server, traceroute được sử dụng như một bước trong quy trình kiểm tra độ trễ và xác định điểm nghẽn khi kết nối giữa client và máy chủ gặp sự cố.

Bước 1: Kiểm tra kết nối cơ bản bằng ping

ping -c 4 google.com
PING google.com (142.250.204.46): 56 data bytes
64 bytes from 142.250.204.46: icmp_seq=0 ttl=117 time=15.231 ms
...
--- google.com ping statistics ---
4 packets transmitted, 4 packets received, 0.0% packet loss

Trước khi sử dụng traceroute, người dùng xác định xem mục tiêu có đang phản hồi (reachable) hay không để phân loại lỗi là mất kết nối hoàn toàn hoặc chỉ bị nghẽn đường truyền.

Bước 2: Xác định lộ trình gói tin qua traceroute

traceroute google.com
traceroute to google.com (142.250.204.46), 30 hops max, 60 byte packets
 1  192.168.1.1 (192.168.1.1)  1.234 ms  1.152 ms  1.089 ms
 2  10.0.0.1 (10.0.0.1)  5.432 ms  5.210 ms  5.110 ms
 3  * * *
 4  172.217.161.142 (172.217.161.142)  15.678 ms  15.432 ms  15.210 ms

Lệnh traceroute cho phép bạn theo dõi danh sách các router (hop) mà gói tin đi qua, giúp xác định chính xác vị trí phát sinh độ trễ cao hoặc nơi gói tin bị chặn bởi firewall.

Bước 3: Phân tích chuyên sâu bằng mtr

mtr -rw google.com
HOST: local-machine      Loss%   Snt   Last   Avg  Best  Wrst StDev
  1.|-- 192.168.1.1       0.0%    10    1.2   1.3   1.1   1.5   0.1
  2.|-- 10.0.0.1          0.0%    10    5.4   5.5   5.2   6.1   0.2
  3.|-- * * *            100.0%    10   None  None  None  None   None

Trong các trường hợp cần theo dõi sự ổn định của đường truyền theo thời gian thực, mtr kết hợp khả năng của traceroute và ping để cung cấp số liệu thống kê chi tiết về tỉ lệ mất gói (packet loss) tại từng hop.

Việc sử dụng lệnh traceroute trên môi trường VPS thường gặp trở ngại do cấu hình tường lửa (Firewall). Nhiều nhà cung cấp dịch vụ VPS chặn các gói tin ICMP hoặc UDP để bảo mật, dẫn đến kết quả hiển thị toàn dấu sao (* * *). Trong các trường hợp này, lệnh traceroute không thể xác định được các hop tiếp theo. Để khắc phục, người dùng nên kết hợp với tùy chọn -I để sử dụng ICMP thay vì UDP mặc định: traceroute -I google.com. Ngoài ra, khi triển khai traceroute để debug lỗi mạng trên VPS, cần lưu ý sự khác biệt về giao thức giữa Windows (tracert) và Linux. Việc nhầm lẫn giữa các tham số này gây ra lỗi cú pháp khi chạy script tự động. Các kỹ sư DevOps cần kiểm tra kỹ cấu hình ACL trên router trước khi kết luận lỗi nằm ở server đích.

Những câu hỏi thường gặp về lệnh traceroute?

Dưới đây là các tình huống thực tế và thắc mắc phổ biến khi người dùng sử dụng công cụ traceroute để chẩn đoán mạng.

Làm thế nào để kiểm tra lộ trình kết nối đến một tên miền cụ thể?

Bạn có thể sử dụng traceroute kèm theo tên miền để xem danh sách các router (hop) mà gói tin đi qua.

traceroute google.com
traceroute to google.com (14 hops)
 1  gateway (192.168.1.1)  1.234 ms
 2  dns.google (8.8.8.8)  15.456 ms

Làm sao để sử dụng địa chỉ IP thay vì tên miền?

Trong các trường hợp DNS gặp sự cố, bạn có thể thực hiện traceroute trực tiếp đến địa chỉ IP của đích đến.

traceroute 8.8.8.8
traceroute to 8.8.8.8 (3 hops)
 1  192.168.1.1  0.542 ms
 2  8.8.8.8  12.341 ms

Lệnh traceroute hiển thị các dấu sao (*) nghĩa là gì?

Dấu sao xuất hiện khi router tại bước đó không phản hồi gói tin ICMP hoặc UDP, thường do cấu hình tường lửa chặn các gói tin này.

traceroute example.com
 1  router.local  1.123 ms
 2  * * *
 3  destination.com  20.456 ms

Làm thế nào để thay đổi giao thức từ UDP sang ICMP?

Mặc định traceroute trên Linux sử dụng UDP. Bạn có thể sử dụng tham số -I để chuyển sang giao thức ICMP, giúp vượt qua một số hạn chế của tường lửa.

sudo traceroute -I google.com
traceroute to google.com using ICMP
 1  192.168.1.1  0.876 ms

Làm sao để giới hạn số lượng bước nhảy (hops) tối đa?

Sử dụng tham số -m để chỉ định số lượng hop tối đa mà lệnh sẽ tìm kiếm trước khi dừng lại.

traceroute -m 5 google.com
traceroute to google.com (max 5 hops)
 1  192.168.1.1  1.123 ms
 2  10.0.0.1  5.432 ms
 3  * * *
 4  * * *
 5  * * *

Làm cách nào để thực hiện traceroute nhanh hơn bằng cách giảm số lần gửi gói tin mỗi hop?

Tham số -q cho phép bạn xác định số lượng gói tin gửi đến mỗi hop để giảm thời gian chờ đợi.

traceroute -q 1 google.com
traceroute to google.com (1 probe per hop)
 1  gateway (192.168.1.1)  1.012 ms
 2  8.8.8.8  14.556 ms

traceroute là một công cụ mạng mạnh mẽ giúp bạn xác định lộ trình di chuyển của các gói tin qua từng chặng (hop) trên đường truyền tới đích. Việc sử dụng kết hợp tham số -n để tránh phân giải tên miền hay -w để thiết lập thời gian chờ sẽ giúp bạn chẩn đoán lỗi kết nối một cách nhanh chóng và chính xác hơn nhiều, đúng không nhỉ? Hiểu rõ cách vận hành của lệnh này chắc chắn sẽ khiến việc quản trị hệ thống của bạn trở nên dễ dàng hơn vô cùng. Chúc bạn thành công!