Linux im Linux System – Einstieg in LXC Container mit Bridge

Virtualisierung kann gelegentlich schon recht praktisch sein, neben Virtualbox, VM-Ware, Qemu und Docker gibt’s auch noch das gute alte LXC. Da ich’s gerade bei mehreren Projekten benötige schreibe ich hier mal schnell die Schritte zusammen die nötig sind um unter Ubuntu 20.04 ein Virtuelles Ubuntu im LXC Container zu installieren – das ganze mit einer Network Bridge damit der direkte Zugriff auf’s interne Netzwerk gewährleistet ist.

Die Installation erfolgt recht einfach, ich installiere mit folgendem Befehl die nötigen Pakete:

apt-get install lxc lxc-templates lxc-utils bridge-utils

Anschließend wird das für die Bridge zur Verfügung stehende Interface passend konfiguriert:

network:
  bridges:
    br0:
      interfaces: [enp1s0f0]
      dhcp4: yes
  ethernets:
    enp1s0f0: {}
  version: 2

Das war die netplan Variante, manche nutzen ja noch gerne die alte Config im /etc/network/interfaces – die sieht dann wie folgt aus:

auto br0
iface br0 inet static
address 0.0.0.0
# oder falls eine adresse am host rechner
# auf dem bridge interface gefragt ist diese variante:
# address 172.16.1.1
# netmask 255.255.255.0
# gateway 172.16.1.254
bridge_ports eth0
bridge_stp on
bridge_maxwait 0
bridge_fd 0

In der /etc/lxc/default.conf veränderen wir den Wert für lxc.net.0.link von lxcbr0 auf br0:

lxc.net.0.type = veth
lxc.net.0.link = br0
lxc.net.0.flags = up
lxc.net.0.hwaddr = 00:16:3e:xx:xx:xx

Und anschließend deaktivieren wir noch die integrierte Bridge vom LXC die per Default aktiv ist (/etc/default/lxc-net)

# This file is auto-generated by lxc.postinst if it does not
# exist.  Customizations will not be overridden.
# Leave USE_LXC_BRIDGE as "true" if you want to use lxcbr0 for your
# containers.  Set to "false" if you'll use virbr0 or another existing
# bridge, or mavlan to your host's NIC.
USE_LXC_BRIDGE="false"

Und jetzt wären wir soweit den Container zu erstellen, ich hab gerne die Daten in einem eigenen Verzeichnis welches nicht unter /var zu finden ist – daher hier der etwas längere Befehl zum erstellen des Containers:

lxc-create -t /usr/share/lxc/templates/lxc-ubuntu -n contS01 --bdev dir --dir /srv/lxc/cont01/rootfs -- -u meinuser --password meinkennwort -r focal

Der Befehl läuft eine weil und anschließend findet sich unter /srv/lxc/cont01/rootfs die Dateistruktur des neu erstellten Systems. Jetzt muss dieses nur noch gestartet werden:

lxc-start cont01

Und anschließend kann man sich direkt ins System hinein verbinden:

lxc-console cont01

Mit [STRG A][Q] kommt man wieder raus. Wer wissen will welche Container am Laufen sind, dem Hilft der Befehl

lxc-ls -f
NAME  STATE   AUTOSTART GROUPS IPV4         IPV6 UNPRIVILEGED 
cont01 RUNNING 0         -      172.16.0.1 -    false        

Soll das so erstellte System beim booten des Host-Systems mit gestartet werden, dann ändert dies der folgende Befehl:

echo "lxc.start.auto = 1" >> /var/lib/lxc/cont01/config 

Anschließend muss man mit lxc-stop und lxc-start den Container noch neu starten.

Ich hoffe diese Anleitung hilft jemanden, ansonsten dient sie mir zum Nachschlagen! 🙂

20.10.2021 – Nachtrag: Wer auf einem VMWare System in einer virtuellen Umgebung arbeitet der muss am vswitch den promiscuous Modus aktivieren! (https://kb.vmware.com/s/article/1004099)
Ohne diesen läuft die Bridge nicht aus dem LXC heraus und es gehen keine Pakete über’s Netzwerk.

25.10.2021 – Nachtrag: Das mit dem promiscuous Modus aktivieren ist nicht ganz korrekt, hier habe ich die richtige Vorgehensweise nochmal in einem eigenen Beitrag gepostet!

Schlagwörter:

Schreibe einen Kommentar

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