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.