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.