Forgot your password?

Forgot your username?

All about IT, Web and Development.
By users for users.

Virtuelle Netzwerkschnittstellen unter Linux mit MacVLAN



Mit dem Macvlan Modul ist es möglich einer Netzwerkschnittstelle mehrere virtuelle Schnittstellen mit eigener MAC Adresse zuzuweisen.



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


Ubuntu / Debian


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.

Michael Kostka

Fachinformatiker / Systemintegration
Ich schreibe hier regelmäßig zu den Themen Android, Web, Linux und Hardware.

Raspberry Pi Starter Kit
DataCloud

Leave a comment

I have read the privacy policy and agree to electronically store and process my input data to answer the request.