Am o stare ciudată de rețea virtuală (docker bridges).
Am două dockere conectate la același bridge prin docker-compose. Un docker este "sondă" și unul este "injector". Injector folosește tcpreplay pentru a reda captura și „sonda” ar trebui să o primească prin tcpdump. Inutil să spunem că captura reluată nu are nicio legătură cu IP-urile sau mac-urile NICS atașate la punte.ping-ul funcționează bine între gazde.
Acum există o a treia NIC expusă automat mașinii gazdă de către docker.
+--->NIC1 [docker „injector” / folosește tcpreplay pentru a injecta]
bridge +--->NIC2 [docker „sondă” / folosește tcpdump pentru a asculta]
|
+--- gazdă NIC3 [folosită pentru testare uneori ca injector și uneori ca ascultător]
Acum, ceea ce se întâmplă de fapt este că atunci când tcpreplay este rulat de la HOST (injectează captura prin NIC3), totul funcționează bine, iar tcpdump pe „sondă” arată traficul reluat. Cu toate acestea, când tcpreplay este utilizat pe injector și injectează captura prin NIC1, numai primele două pachete ale capturii pot fi văzute pe „sondă” și apoi tot traficul pe „sondă” se oprește (de asemenea, injectarea de la gazdă va înceta să funcționeze). dacă tcpdump este rulat pe NIC3, acesta primește în mod normal tot traficul capturat de la injector.
- ifconfig pe „sondă” nu arată niciun pachet pierdut
- iptables pe gazdă nu mărește contoarele de pachete abandonate (sper că o fac corect "sudo iptables -L -v -n | grep -i drop")
- tcpdump activează automat modul promiscuu pe sondă
Are cineva o explicație pentru acest comportament asimetric? Ai idee cum să-l depanezi?
Injector și gazdă - AlmaLinux:8, sonda -Centos:7
tcpreplay versiunea 4.4.1