Jeżeli tcpdump nie jest zainstalowany, przygotuj pakiet wcześniej. Nie wymagaj Internetu podczas właściwego laboratorium. Format outputu może różnić się między wersjami, ale szukasz obecności tagu i numeru VLAN ID.
sudo tcpdump -eni enp0s3 vlan
sudo tcpdump -eni enp0s3 vlan 10
sudo tcpdump -eni enp0s3 vlan 20
Na enp0s3 widzisz ramki na łączu bazowym. enp0s3.10 udostępnia logiczny ruch VLAN 10, a enp0s3.20 logiczny ruch VLAN 20.
Brak tagu 802.1Q w pojedynczym przechwyceniu nie dowodzi błędnej konfiguracji. Wynik zależy od punktu przechwytywania, działania wirtualnego przełącznika oraz funkcji VLAN RX/TX offload, GRO i LRO. Sterownik może zdjąć lub dodać tag poza miejscem, w którym obserwuje go tcpdump.
Pakiet ethtool przygotuj przed odłączeniem dostępu do repozytoriów. Najpierw ustal interfejs przezip -br link, a następnie zapisz pełny stan funkcji. Polecenia wymagają uprawnień administratora.
STATE="$HOME/lab06-state"
IFACE=enp0s3
sudo ethtool -k "$IFACE" | tee "$STATE/ethtool-k.before"
for SPEC in "rxvlan rx-vlan-offload" "txvlan tx-vlan-offload" "gro generic-receive-offload" "lro large-receive-offload"
do
set -- $SPEC
VALUE=$(sudo ethtool -k "$IFACE" | awk -v key="$2" '$1 == key ":" { print $2 }')
printf '%s %s
' "$1" "$VALUE"
done > "$STATE/offload.before"
cat "$STATE/offload.before"
Opcjonalnie wyłącz funkcje pojedynczo tylko na czas powtórzenia przechwycenia. Wirtualna karta może odpowiedziećOperation not supported albo oznaczyć funkcję jako[fixed]; nie jest to błąd VLAN. Wyłączenie offloadingu może obniżyć wydajność, dlatego nie pozostawiaj go bez uzasadnienia.
IFACE=enp0s3
for OPTION in rxvlan txvlan gro lro; do
sudo ethtool -K "$IFACE" "$OPTION" off ||
echo "$OPTION: operacja nieobsługiwana"
done
sudo tcpdump -eni "$IFACE" vlan
Po teście przywróć dokładnie zapisane wartości i ponownie odczytaj funkcje. Nie wpisuj wszystkich wartości jako on, bo początkowy stan mógł być inny.
STATE="$HOME/lab06-state"
IFACE=enp0s3
while read -r OPTION VALUE; do
case "$VALUE" in
on|off) sudo ethtool -K "$IFACE" "$OPTION" "$VALUE" ||
echo "$OPTION: nie można odtworzyć automatycznie" ;;
esac
done < "$STATE/offload.before"
sudo ethtool -k "$IFACE"
Jeśli funkcji nie można zmienić, przechwytuj na innym punkcie: na interfejsie bazowym innej VM, na hoście z odpowiednią polityką promiscuous mode albo porównaj ruch bazowy z subinterfejsem.