Omówienie tworzenia wirtualnego interfejsu warstwy 2 w systemie Linux oraz specyfiki jego konfiguracji i atrybutów ethernetowych.
- Utworzenie trwałego interfejsu TAP warstwy 2 w systemie Linux: polecenie
sudo ip tuntap add mode tap dev tap0.
- Podgląd szczegółowych atrybutów sprzętowych (w tym wygenerowanego adresu MAC): polecenie
ip link show dev tap0.
- Ręczna modyfikacja sprzętowego adresu MAC wirtualnego interfejsu:
sudo ip link set dev tap0 address 00:aa:bb:cc:dd:ee.
- Konfiguracja parametrów zaawansowanych za pomocą polecenia ethtool (np. wyłączanie sumowania sprzętowego tx/rx offload).
- Przydzielenie dedykowanego adresu sieciowego IPv4:
sudo ip addr add 192.168.100.1/24 dev tap0 oraz aktywacja: sudo ip link set dev tap0 up.
- Zastosowanie praktyczne: interfejs TAP jest przygotowany do bezpośredniego wpięcia do mostka sieciowego lub do procesu maszyny QEMU.
Adres MAC (Media Access Control): 48-bitowy adres fizyczny identyfikujący kontroler w warstwie łącza danych; interfejs TAP posiada pełnoprawny adres MAC i emuluje obecność fizycznej karty sieciowej.
# 1. Utworzenie interfejsu TAP
$ sudo ip tuntap add dev tap0 mode tap user student
# 2. Ręczne ustawienie adresu MAC i konfiguracja IP
$ sudo ip link set dev tap0 address 02:11:22:33:44:55
$ sudo ip addr add 192.168.100.1/24 dev tap0
$ sudo ip link set dev tap0 up
# 3. Weryfikacja obecności warstwy Ethernet L2
$ ip addr show dev tap0
4: tap0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UNKNOWN
link/ether 02:11:22:33:44:55 brd ff:ff:ff:ff:ff:ff
inet 192.168.100.1/24 scope global tap0
Tworzenie interfejsu w trybie TAP (mode tap) uruchamia w sterowniku jądra zupełnie odmienną ścieżkę inicjalizacji niż w przypadku trybu TUN. Zamiast abstrakcyjnego urządzenia punkt-punkt, jądro rejestruje interfejs przy użyciu standardowej funkcji alloc_etherdev(), dedykowanej dla fizycznych kart sieciowych Ethernet. Oznacza to, że system przydziela interfejsowi pełen zestaw struktur danych właściwych dla standardu IEEE 802.3, w tym kolejki ramek, tablice multicastowe oraz sprzętowy adres MAC.
Podczas tworzenia interfejsu TAP jądro automatycznie generuje losowy adres sprzętowy MAC. Zgodnie ze standardem IEEE, w pierwszym bajcie adresu ustawiany jest tzw. bit U/L (Universal/Local) na wartość 1 (np. adresy zaczynające się od 02:..., 06:..., 0a:..., 0e:...), co oznacza adres administrowany lokalnie, niekolidujący z globalnie zarejestrowanymi identyfikatorami producentów OUI. Administrator ma pełną swobodę w nadpisaniu tego adresu poleceniem ip link set dev tap0 address, co jest kluczowe w scenariuszach wirtualizacji i klonowania środowisk.
Obecność flagi BROADCAST oraz wpisu brd ff:ff:ff:ff:ff:ff w wynikach polecenia ip addr show jednoznacznie potwierdza gotowość interfejsu do przetwarzania ruchu rozgłoszeniowego. W przeciwieństwie do TUN, interfejs TAP jest w stanie obsługiwać pakiety kierowane do wszystkich stacji w segmencie, co jest niezbędne dla poprawnego działania protokołów wykrywania usług, autokonfiguracji DHCP oraz dynamicznej wymiany tablic trasowania przez protokoły RIP czy OSPF.
Należy zwrócić uwagę, że interfejs TAP może funkcjonować samodzielnie (posiadając bezpośrednio przypisany adres IP, jak w powyższym przykładzie) lub w konfiguracji bezadresowej (unnumbered). W tym drugim przypadku interfejs TAP nie posiada własnego adresu IP w warstwie 3, lecz zostaje włączony jako port podrzędny do mostka sieciowego (Linux Bridge). Cała konfiguracja IP oraz polityki filtrowania są wówczas delegowane na poziom mostka, co omówiono szczegółowo na kolejnym slajdzie.
Źródła i dokumentacja techniczna: Podręcznik iproute2: Zarządzanie routingiem i urządzeniami sieciowymi.
Ważne skróty i pojęcia:
- MAC (Media Access Control) - Adres fizyczny warstwy łącza danych o długości 48 bitów.
- OUI (Organizationally Unique Identifier) - 24-bitowy prefiks adresu MAC identyfikujący producenta sprzętu sieciowego.
- IEEE (Institute of Electrical and Electronics Engineers) - Międzynarodowe stowarzyszenie inżynierów tworzące normy telekomunikacyjne.
- L2 (Layer 2) - Druga warstwa modelu OSI - warstwa łącza danych (Data Link Layer).