Te metody robią zasadniczo różne rzeczy. Aby zrozumieć dlaczego, musisz zrozumieć warstwowy model sieci. Dla naszych celów tutaj warstwy 1, 2 i 3 są ważne:
- Warstwa 1 jest warstwą fizyczną - określa takie rzeczy, jak kable, których można użyć, jakie wzorce napięcia / prądu reprezentują wartości 1 i 0 na tym kablu, jak urządzenia na każdym końcu kabla negocjują, przy jakiej prędkości bitowej działają i tak dalej.
- Warstwa 2 jest warstwą łącza - określa, w jakim języku rzeczy na każdym końcu kabla rozmawiają ze sobą. Urządzenia Ethernet na tej warstwie mają takie elementy, jak ramki i adresy MAC.
- Warstwa 3 jest warstwą sieciową - określa, w jaki sposób urządzenia używają bezpośredniego łącza warstwy 2 do innego urządzenia, aby dotrzeć do trzeciego urządzenia, do którego nie mogą dotrzeć bezpośrednio w warstwie 2. Urządzenia w tej warstwie mają adresy IP i tabele routingu.
MACVLAN / MACVTAP
MACVLAN tworzy wirtualne urządzenie warstwy 2 lub warstwy łącza z własnym adresem MAC, który dzieli warstwę 1 lub warstwę fizyczną z istniejącym urządzeniem. Najbardziej zrozumiałym przypadkiem jest podłączenie urządzenia Ethernet do sieci i utworzenie urządzenia MACVLAN na podstawie tego urządzenia Ethernet; teraz masz dwa „urządzenia” Ethernetowe o różnych adresach MAC, ale oba przesyłają swoje ramki tym samym kablem. Porozmawiam o MACVTAP nieco dalej.
Interfejsy MACVLAN mogą oddziaływać na kilka różnych sposobów z istniejącym interfejsem Ethernet, w szczególności gdy ramka pojawia się na jednym z interfejsów, który jest adresem do drugiego:
- W trybie prywatnym ramka jest wyrzucana; oba interfejsy nie mogą się ze sobą komunikować, tylko z urządzeniami zewnętrznymi.
- W trybie vepa ramka jest przesyłana przez warstwę fizyczną, jak każda inna ramka. Jeśli masz urządzenie podłączone do przełącznika, który jest wystarczająco sprytny, aby wykryć, że ramka musi zostać odesłana z powrotem przez ten sam port, do którego przybył, wtedy zostanie odebrana przez tę samą warstwę fizyczną, która ją wysłała, a następnie warstwa 2 będzie użyj MAC, aby wysłać go do zamierzonego interfejsu sieciowego.
- W trybie mostu , gdy ramka pojawia się na jednym urządzeniu, sprawdza się, czy jest przeznaczona dla drugiego, a jeśli tak, to jest tam przesyłana bez przechodzenia przez warstwę 1.
- Istnieje również kilka bardziej niejasnych trybów.
Należy pamiętać, że interfejsy MACVLAN mają ważne ograniczenie: nie są one zdolne do uczenia się adresów. Nie można więc zmostkować interfejsu MACVLAN z drugim urządzeniem fizycznym i oczekiwać, że będzie można uzyskać dostęp do tego drugiego urządzenia fizycznego przez pierwsze. Działa to z oryginalnym interfejsem Ethernet, ale nie z podłączonym do niego interfejsem MACVLAN.
TUN / TAP
Interfejs TAP jest również nowym wirtualnym urządzeniem warstwy 2, ale bez dołączonej warstwy 1. Zamiast tego program może uzyskać deskryptor pliku reprezentujący warstwę fizyczną. Następnie może zapisać surowe dane ramki Ethernet do tego deskryptora pliku, a jądro będzie traktować je jak każdy inny pakiet Ethernet otrzymany na prawdziwym interfejsie fizycznym.
Wielką zaletą interfejsów TAP jest to, że warstwa fizyczna jest w trybie użytkownika; dowolne oprogramowanie z odpowiednimi uprawnieniami może generować ramki Ethernet w dowolny sposób i wrzucić je w coś, co jądro traktuje tak samo jak prawdziwy interfejs fizyczny. To sprawia, że są bardzo przydatne w takich rzeczach jak VPN i tunelowanie; możesz pisać dowolne oprogramowanie do tunelowania w przestrzeni użytkownika i nie ma potrzeby wtrącania się w przestrzeń jądra, aby wprowadzić ramki do stosu sieciowego, wystarczy utworzyć urządzenie TAP i zapisać ramki w deskryptorze pliku.
Urządzenia TUN są takie same jak urządzenia TAP, tyle że działają na warstwie 3 zamiast na warstwie 2, a oprogramowanie trybu użytkownika musi zapisywać surowe pakiety IP w deskryptorze plików zamiast surowych ramek Ethernet.
Wracając do urządzeń MACVTAP , są one swego rodzaju pomieszaniem między interfejsami MACVLAN i TAP. Podobnie jak interfejsy TAP, program trybu użytkownika może uzyskać deskryptor pliku i zapisać w nim surowe ramki Ethernet. Ramki te, podobnie jak interfejs MACVLAN, są następnie przesyłane przez fizyczną warstwę rzeczywistego urządzenia Ethernet. Umożliwia to łatwe dostosowanie oprogramowania napisanego do korzystania z urządzeń TAP do korzystania z urządzenia MACVLAN.
VNet
Jest to koncepcyjnie podobne do sieci TUN / TAP, ale ma bardziej rozwiniętą płaszczyznę sterowania (dzięki czemu oprogramowanie w trybie użytkownika może konfigurować interfejs bardziej elastycznie) i bardziej zoptymalizowaną płaszczyznę danych (dzięki czemu można przenosić dane przez wirtualne urządzenie sieciowe więcej wydajnie).
Wszystkie z nich robią podobne rzeczy, ale mają nieco inne możliwości. Wszystkie z nich można wykorzystać do podłączenia maszyny wirtualnej do sieci Ethernet:
- Produkt wirtualizacji może pobierać ramki Ethernet od gościa i zapisywać je w deskryptorze pliku dla urządzenia TAP. To urządzenie TAP może zostać przypisane przez hosta do własnego adresu IP lub może zostać podłączone do mostu wraz z interfejsem Ethernet w celu współdzielenia adresu IP hosta, lub można skonfigurować iptables do przekazywania ruchu na nim za pomocą NAT.
- Produkt do wirtualizacji może łączyć ramki Ethernet od gościa i zapisywać je w deskryptorze pliku dla urządzenia MACVTAP; są one następnie przesyłane bezpośrednio w warstwie fizycznej urządzenia Ethernet, co skutecznie daje maszynie wirtualnej „rzeczywiste” urządzenie Ethernet (choć należy pamiętać, że możliwe jest tworzenie urządzeń MACVLAN / MACVTAP dla innych typów interfejsów sieciowych, takich jak mosty).
- Produkt wirtualizacji może połączyć sterownik virtio u gościa ze sterownikiem virtio na hoście, aby uzyskać bardzo wydajną sieć.