Centos 7 – libvirt – LXC Container mit public IP und externem Netzwerk

In diesem Tutorial werden wir unseren LXC-Container eine IP aus unserem LAN vergeben. Somit ist es möglich unsere Container direkt von extern anzusprechen.

Voraussetzung für dieses Tutorial ist ein installiertes und lauffähiges libvirt-Setup. Ein detaillierte Anleitung findet man in dem Artikel Centos 7 im LXC-Container. Dieser dient uns auch als Grundlage für dieses HowTo.

Anpassen der Netzwerkkonfiguration

lxc-network-setting
libvirt Netzwerk Umgebung

Zuerst benötigen wir eine Bridge (br0). In diese binden wir unser primäres Netzwerk-Interface ein, also die Netzwerkkarte mit der wir auch mit unserem LAN verbunden sind. Die virtuellen NICs der LXC-Container die eine externe IP bekommen sollen werden dann dieser Bridge hinzugefügt. Alle andern kommen in das interne Netz, also in die Bridge (virbr0).

Netzwerkbrücke konfigurieren (br0)

In diesem Scenario heisst die physisch echte Netzwerkkarte enp2s0f5 dies kann je nach Hardware unterschiedlich sein.

Zuerst erstellen wir eine Netzwerkbrücke br0. Dazu erstellen wir eine Konfigurationsdatei /etc/sysconfig/network-scripts/ifcfg-br0.

vi /etc/sysconfig/network-scripts/ifcfg-br0

dort fügen wir die gewünschte Netzwerkkonfiguration ein. Dies können die gleichen IP-Adressen sein die derzeit für die physische Schnittstelle konfiguriert sind.

DEVICE=br0
TYPE=Bridge

DEFROUTE=yes
IPV4_FAILURE_FATAL=no
IPV6INIT=yes
IPV6_AUTOCONF=yes
IPV6_DEFROUTE=yes
IPV6_FAILURE_FATAL=no
IPV6_PEERDNS=yes
IPV6_PEERROUTES=yes


IPADDR0=192.168.1.20
NETMASK=255.255.255.0
GATEWAY=192.168.1.1

DNS1=192.168.1.1
DNS2=8.8.8.8

ONBOOT=yes
BOOTPROTO=none
NM_CONTROLLED=no
DELAY=0
STP=yes

Unserer physischen Netzwerkkarte sagen wir nun, dass diese zur Netzwerkbrücke gehört und geben ihr keine IP-Adresse. Diese wird jetzt in der Brücke definiert.

Dazu editieren wie die Datei /etc/sysconfig/network-scripts/ifcfg-enp2s0f5.

vi /etc/sysconfig/network-scripts/ifcfg-enp2s0f5

und fügen folgende Konfiguration ein.

TYPE=Ethernet
BOOTPROTO=none
IPV4_FAILURE_FATAL=no
NAME=enp2s0f5
UUID=fbf03542-6e15-42bf-bcb6-7e063e23202b
ONBOOT=yes
BRIDGE=br0

Das war es schon. Um die Konfiguration der zweiten Brücke brauchen wir uns nicht kümmern, diese wird bei der Installation von libvirt schon angelegt. Nach einen Neustart des Netzwerkdienstes oder Reboot sollte wir mit brctl show unser neues Setup kontrollieren können.

brctl show
bridge name     bridge id               STP enabled  interfaces
br0             8000.80ee730a228d       yes          enp2s0f5
virbr0          8000.525400e31835       yes          virbr0-nic

Nun haben wir die Grundvorraussetzung für die Konfiguration von libvirt geschaffen. Wir haben 2 Netzwerkbrücken, jeweils für das externe Netzwerk br0 und für das interne virtuelle Netzwerk virtbr0.

externes Netzwerk in libvirt erstellen

Dazu erzeugen wir uns eine temporäre Datei extern.xml.

vi /tmp/extern.xml

Dort definieren wir den Namen und die Netzwerkbrücke.

<network>
  <name>extern</name>
  <forward mode='bridge'/>
  <bridge name='br0' />
  <mac address='12:54:00:17:9:12'/>
  <uuid>48f0b4fb-48c7-41b4-acbf-91df582b9637</uuid>
</network>

Eine zufällige MAC-Adressen können wir folgendermaßen erzeugen.

openssl rand -hex 6 | sed 's/\(..\)/\1:/g; s/.$//'

Eine zufällige UUID bekommen wir so.

cat /proc/sys/kernel/random/uuid

Jetzt binden wir unser Netzwerk in libvirt ein. Dazu starten wir die Verwaltungskonsole virsh.

virsh

Wir können uns alle bestehenden Netzwerke anzeigen lassen.

virsh # net-list
Name                 Status     Automatischer Start Dauerhaft
----------------------------------------------------------
default              Aktiv      ja            ja

Unser externes Netzwerk fügen wir nun hinzu.

virsh # net-define /tmp/extern.xml

Nun starten wir das neue externe Netzwerk.

net-start extern

Wir können dies nun wieder anzeigen lassen.

virsh # net-list
Name                 Status     Automatischer Start Dauerhaft
----------------------------------------------------------
default              Aktiv      ja            ja
extern               Aktiv      nein          ja

Zum Autostart fügen wir es wie folgt hinzu.

virsh # net-autostart extern

libvirt LXC-Container mit externer IP erstellen

Beim Erstellen eines neuen Containers kann nun mit dem Parameter –network network:extern unser neues Netzwerk ausgewählt werden.

virt-install --connect lxc:/// --name centos-7-x86_64 --ram 512 --vcpu 1 --filesystem /var/lib/libvirt/lxc/centos-7-x86_64/,/ --noautoconsole --network network:extern

Innerhalb des LXC Containers kann alles wir gewohnt konfiguriert werden. DHCP falls gewünscht bekommt der LXC Container nun vom externen Router nicht mehr von libvirt.

Fazit

Ich weise nochmal darauf hin, dass sich dieses Tutorial auf meine Testumgebung bezieht. Ein stumpfes Abtippen wird nicht zum Erfolg führen :D

Es ist ratsam, sich nochmal die Dokumentation von libvirt zu diesem Thema anzusehen.

Fragen dazu können gern in den Kommentaren gestellt werden.

 

Ein Kommentar

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.