Tôi muốn nắm bắt lưu lượng trên các giao diện ảo của Linux, cho mục đích gỡ lỗi. Tôi đã được thử nghiệm với veth
, tun
và dummy
giao diện loại; trên cả ba, tôi gặp khó khăn tcpdump
để hiển thị bất cứ điều gì.
Đây là cách tôi thiết lập giao diện giả:
ip link add dummy10 type dummy
ip addr add 99.99.99.1 dev dummy10
ip link set dummy10 up
Trong một thiết bị đầu cuối, xem nó với tcpdump
:
tcpdump -i dummy10
Trong một giây, lắng nghe nó với nc
:
nc -l 99.99.99.1 2048
Trong một phần ba, thực hiện một yêu cầu HTTP với curl
:
curl http://99.99.99.1:2048/
Mặc dù trong thiết bị đầu cuối 2 chúng ta có thể thấy dữ liệu từ curl
yêu cầu, không có gì hiển thị từ đó tcpdump
.
Một Tun / Tập hướng dẫn làm rõ một số tình huống mà hạt nhân có thể không thực sự gửi bất kỳ gói dữ liệu khi một đang hoạt động trên một giao diện địa phương:
Nhìn vào đầu ra của tshark, chúng ta thấy ... không có gì. Không có lưu lượng truy cập thông qua giao diện. Điều này là chính xác: vì chúng tôi ping địa chỉ IP của giao diện, hệ điều hành quyết định chính xác rằng không có gói nào cần được gửi "trên dây" và chính hạt nhân đang trả lời các ping này. Nếu bạn nghĩ về nó, đó chính xác là điều sẽ xảy ra nếu bạn ping địa chỉ IP của giao diện khác (ví dụ eth0): không có gói tin nào được gửi đi. Điều này nghe có vẻ rõ ràng, nhưng có thể là một nguồn gây nhầm lẫn lúc đầu (nó là cho tôi).
Tuy nhiên, thật khó để thấy điều này có thể áp dụng cho các gói dữ liệu TCP.
Có lẽ tcpdump
nên bị ràng buộc với giao diện một cách khác?