Traceroute Trên Hệ Điều Hành FreeBSD
Hôm nay khi cấu hình VPN tại công ty, mình gặp sự cố lạ trên máy FreeBSD: lệnh traceroute liên tục thất bại.
Giao diện dòng lệnh hiển thị lỗi:
traceroute: sendto: Permission denied
(Thông báo này giúp các bạn gặp vấn đề tương tự có thể tìm kiếm trên Google dễ dàng hơn)
Ban đầu, ngay cả lệnh ping cũng không hoạt động. Mình đã kiểm tra cài đặt tường lửa (firewall) và mở quyền cho gói tin ICMP đi qua. Sau đó, ping bắt đầu chạy ổn định, nhưng traceroute vẫn báo lỗi.
Điều này khiến mình bối rối. Quyết định dùng tcpdump để bắt gói tin phân tích, mình phát hiện ra một chi tiết quan trọng: traceroute trên FreeBSD mặc định sử dụng giao thức UDP để thực hiện truy vết đường đi! Đây là điểm khác biệt so với Windows và Linux - nơi traceroute thường dùng ICMP.
Sau khi nhận ra điều này, mình lập tức tra cứu tài liệu hướng dẫn (man traceroute) và tìm thấy tùy chọn -P ICMP cho phép chuyển đổi sang giao thức ICMP. Chỉ cần thêm tham số này vào lệnh:
traceroute -P ICMP ten_mien_can_kiem_tra
Tất cả hoạt động trở lại bình thường mà không cần thay đổi cấu hình tường lửa thêm lần nào.
Bài học rút ra:
- Luôn kiểm tra kỹ cơ chế hoạt động mặc định của các công cụ mạng trên từng hệ điều hành.
- Sử dụng tcpdump hoặc các công cụ phân tích gói tin để xác định nguyên nhân gốc rễ thay vì đoán mò.
- Ghi nhớ sự khác biệt về giao thức giữa các nền tảng (UDP vs ICMP) khi làm việc với traceroute.