Die grundlegende Funktionsweise entspricht damit dem aus der Virtualisierung bekannten Bridge Modus bei Netzwerkverbindungen. Somit ist es möglich virtuelle Netzwerkschnittstellen mit eigenen MAC Adressen zu erzeugen.
Voraussetzungen
Die Suche nach vollständigen und korrekten Dokumentation für Macvlan gestaltet sich wie die Suche nach der Nadel im Heuhaufen.
Das Kernelmodul existiert wohl seit Kernel 2.6.23 im experimentellen Status und ist seit Version 3.0 fest implementiert und stabil.
Um zu prüfen ob eine passende Kernelversion vorliegt, kann der nachfolgende Befehl verwendet werden.
uname -r
Zusätzlich muss das entsprechende Modul geladen werden.
modprobe macvlan
Konfiguration
Die Einrichtung eines Macvlan Gerätes erfolgt über den Befehl ip.
ip link add name <Name der virtuellen Schnittstelle> address <MAC Adresse der Schnittstelle> link <Name der physischen Schnittstelle> type macvlan
Über nachfolgendendes Beispiel wird ein neues Interface veth0 mit der MAC Adresse 02:4e:a6:27:01:07 angelegt und mit der physischen Schnittstelle eth0 verknüpft.
ip link add name veth0 address 02:4e:a6:27:01:07 link eth0 type macvlan
Alternativ kann der Parameter "address <MAC>" auch weggelassen werden. Hierdurch wird vom Kernel automatisch eine MAC Adresse generiert.
Beim Aufruf von ifconfig sollte die neue virtuelle Netzwerkschnittstelle aufgelistet sein.
ifconfig
veth0 Link encap:Ethernet Hardware Adresse 02:4e:a6:27:01:07
UP BROADCAST RUNNING MULTICAST MTU:1500 Metrik:1
RX packets:0 errors:0 dropped:0 overruns:0 frame:0
TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
Kollisionen:0 Sendewarteschlangenlänge:0
RX bytes:0 (0.0 B) TX bytes:0 (0.0 B)
Vergibt man eigene MAC Adressen, sind bestimmte Adressräume zu beachten. Es sollten nur sogenannte Locally Administered Addresses vergeben werden um nicht in Konflikt mit anderen (physischen) Netzwerkschnittstellen zu kommen.
Bei Locally Administered Addresses ist das U/L Bit auf 1 gesetzt, woraus sich die folgenden möglichen Adressen ergeben.
- x2-xx-xx-xx-xx-xx
- x6-xx-xx-xx-xx-xx
- xA-xx-xx-xx-xx-xx
- xE-xx-xx-xx-xx-xx
Die restlichen Werte sind dabei mit hexadezimalen Werten aufzufüllen.
Statische Konfiguration / Systemstart
Nach einem Neustart ist die virtuelle Schnittstelle wieder verschwunden. Um die virtuelle Schnittstelle auch nach einem Neustart zu erstellen muss ein Eintrag in der Netzwerkkonfiguration vorgenommen werden.
Grundvoraussetzung unter allen Distributionen ist hierzu das geladene Modul macvlan, weshalb wir dieses zu den automatisch zu ladenden Modulen hinzufügen.
echo "macvlan" >> /etc/modules
In Ubuntu bzw. Debian erfolgt die Konfiguration über die Datei /etc/network/interfaces.
Hierzu hängen wir die folgenden Zeilen an:
auto veth0
iface veth0 inet dhcp
pre-up ip link add name veth0 address 02:4e:a6:27:01:07 link eth0 type macvlan
post-down ip link delete dev veth0
Hierdurch wird vor dem Aktivieren der veth0 Schnittstelle zunächst die virtuelle Schnittstelle angelegt. Beim Deaktivieren wird die virtuelle Schnittstelle automatisch entfernt.
Abschließend muss die Netzwerkkonfiguration neu eingelesen werden.
sudo service networking restart
RedHat / CentOS
Bei den RedHat und CentOS Systemen ist die Anpassung zweier Dateien nötig
/sbin/ifup-pre-local
ip link add name veth0 address 02:4e:a6:27:01:07 link eth0 type macvlan
Zusätzlich wird noch ein Skript zum Entfernen der Schnittstellen benötigt:
nano /sbin/ifdown-local
ip link delete dev veth0
Abschließend stellen wir sicher, dass die Skripte ausführbar sind.
chmod +x /sbin/ifup-pre-local
chmod +x /sbin/ifdown-local
Funktionsumfang
Im Test vertrugen sich die virtuellen Netzwerkschnittstellen mit allen gängigen Konfigurationen. Man kann ihnen VLANs, Aliase, statische/dynamische (DHCP) IPs zuweisen oder Bridges und Bonds einrichten.
Es scheint auch keine Beschränkung der maximalen Macvlan Schnittstellen pro physischer Schnittstelle zu geben.
Fazit
Leider ist das Macvlan Modul schlecht dokumentiert, bietet aber vielfältige Möglichkeiten. Für Testzwecke können z.B. auf einem Raspberry Pi mehrere Netzwerkschnittstellen nachgebildet werden.
Similar articles
- Raspberry Pi als WLAN Access Point
- Stabile Verbindung mit Realtek RTL8188EU unter Linux
- HAProxy Load Balancer mit Ubuntu / Debian
- Netzwerk Penetrationstests mit OpenVAS
- Netzwerkgeschwindigkeit mit Iperf testen
- Sicherheit mit einem Reverse Proxy
- Sophos UTM - Site to Site VPN mit OpenVPN
- SSH Port Knocking unter Ubuntu einrichten
Leave a comment