CentOS 7 – libvirt – LXC Container mit multiplen Netzwerkkarten und IP Adressen

Für ein komplexes Netzwerksetup innerhalb eine virtualisierten Umgebung ist es möglich LXC Containern weitere virtuelle Netzwerkkarten hinzuzufügen. Diese können wir den auf dem Hostsystem eingerichteten Netzwerkbrücken zuordnen. Somit können wir unsere LXC-Container in verschiede Netzwerke einbinden und komplexe Netzwerke simulieren.

Vorab verweise ich auf meine anderen Tutorials zum Thema libvirt und LXC-Container. Auf das Erstellen und Verwalten eines Containers sowie der Bereitstellung anderen Netzwerke gehe ich hier nicht mehr ein.

Das Tutorial wurde mit CentOS 7 erstelle und getestet. Es sollte aber auch mit anderen Distributionen funktionieren sofern alles andere richtig konfiguriert ist.

LXC Container zusätzliche Netzwerkkarten hinzufügen

Dazu editieren wir die Konfiguration unseres LXC-Containers. Wichtig ist, dass wir die Datei wie folgt editieren. Ein manuelles Ändern des Konfigurations-Datei führt nicht zum Erfolg.

virsh --connect lxc:/// edit <container_name>
... 

  <devices>
    <emulator>/usr/libexec/libvirt_lxc</emulator>
    <filesystem type='mount' accessmode='passthrough'>
      <source dir='/var/lib/libvirt/lxc/centos-7-x86_64'/>
      <target dir='/'/>
    </filesystem>
    <interface type='network'>
      <mac address='00:16:3e:91:51:39'/>
      <source network='default'/>
    </interface>
    <console type='pty'>
      <target type='lxc' port='0'/>
    </console>
  </devices>

...

Im Bereich <devices> können wir dann beliebig viele neue Netzwerkkarten hinzufügen. Dazu benötigen wir eine neue MAC-Adresse, diese könne wir uns ausdenken oder wie hier beschrieben ganz leicht selber generieren.

Im Punkt <source network> wird das Netzwerk definiert. Wie man verschiedene auch externe Netzwerken definiert und libvirt bereitstellt kann man im Artikel libvirt – LXC Container mit public IP nachlesen.

...

    <interface type='network'>
      <mac address='00:16:3e:41:31:39'/>
      <source network='extern'/>
    </interface>
    <interface type='network'>
      <mac address='00:16:3e:91:52:11'/>
      <source network='default'/>
    </interface>

...

Nach dem Restart des LXC Container können wir nun testweise auf beiden Netzwerkkarten den dhcp-Client ausführen und uns eine IP automatisch zuweisen lassen.

dhclient eth0
dhclient eth1

Dann schauen wir uns die Netzwerkeinstellungen nochmals an.

ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
    inet6 ::1/128 scope host
       valid_lft forever preferred_lft forever
35: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000
    link/ether 6e:d0:a7:85:14:4e brd ff:ff:ff:ff:ff:ff
    inet 192.168.1.133/24 brd 192.168.1.255 scope global eth0
       valid_lft forever preferred_lft forever
    inet6 fe80::6cd0:a7ff:fe85:144e/64 scope link
       valid_lft forever preferred_lft forever
37: eth1: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000
    link/ether 00:16:3e:91:52:11 brd ff:ff:ff:ff:ff:ff
    inet 192.168.122.184/24 brd 192.168.122.255 scope global dynamic eth1
       valid_lft 3596sec preferred_lft 3596sec
    inet6 fe80::216:3eff:fe91:5211/64 scope link
       valid_lft forever preferred_lft forever

Das soll als kurzer Test genügen. Wie man sieht haben die 2 DHCP-Server den Netzwerkkarten IPs aus unterschiedlichen Netzwerken zugeteilt. Unser Setup solle damit funktionieren.

Bei Fragen dazu einfach die Kommentarfunktion nutzen. Vorher aber mal die Dokumentation von libvirt studieren, dort wird alles sehr gut erklärt wenn auch die Lösung oft etwas schwer zu finden ist.

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert

Diese Website verwendet Akismet, um Spam zu reduzieren. Erfahre mehr darüber, wie deine Kommentardaten verarbeitet werden.