
Ok, ich möchte also wissen, wie man Netzwerke auf LXC-Containern einrichtet. Nicht nur die vagen Informationen, die man auf den anderen Websites bekommt, sondern eine echte Anleitung für Anfänger, wie man sie zum Laufen bringt. Da die meisten Beispiele grundsätzlich für Testzwecke eingerichtet sind, möchte ich einen Dienst auf einem davon ausführen, zum Beispiel einen Webserver.
Ich verwende Ubuntu 12.04 LTS und habe LXC installiert. Ich kann einen Container erstellen, starten und stoppen. Mein Server hat offensichtlich eine öffentliche IP-Adresse und ich würde gerne wissen, wie ich einen Container so einrichte, dass er ebenfalls eine öffentliche IP-Adresse haben kann. Da es von meinem aktuellen Container aus bereits eine Brücke zu geben scheint, muss ich den Containern entweder einen öffentlichen DHCP-Bereich zuweisen, mit dem sie arbeiten können, oder meinem Container manuell eine statische IP-Adresse zuweisen.
Wenn ich dem Container statisch eine IP zuweisen möchte, wie mache ich das? Muss ich an meiner Bridge-Konfiguration auf dem Host Änderungen vornehmen? Ist es tatsächlich besser, dies mit der MACVLAN-Option zu tun?
Jede Hilfe wäre willkommen.
Antwort1
Mein Ansatz geht davon aus, dass Ihr Server eine einzelne Netzwerkkarte hat und Sie diese Netzwerkkarte zwischen dem Host und den LXC-Gästen teilen müssen. Dazu ist eine Bridge erforderlich. Die Bridge besitzt und verwaltet eth0
. Der Host konfiguriert jetzt sein eigenes Netzwerk auf br0
statt auf eth0
. Die LXC-Gäste sind so konfiguriert, dass sie eine Verbindung zur Bridge herstellen.
Auf dem Host
sudo apt-get install bridge-utils
.Ersetzen Sie auf dem Host
eth0
durch eine Brücke:Das ist gefährlich. Wenn Sie das falsch machen, könnten Sie von Ihrem Server ausgesperrt werden. Stellen Sie sicher, dass die lokale Anmeldung aktiviert ist und der lokale Konsolenzugriff funktioniert, damit Sie diese Änderung bei Problemen rückgängig machen können.
In
/etc/network/interfaces
:- Ersetzen
auto eth0
mitauto br0
. Ersetzen:
iface eth0 inet dhcp
mit:
iface br0 inet dhcp bridge_ports eth0
Wenn Sie eine statische Netzwerkkonfiguration hätten, würden Sie Folgendes ersetzen:
iface eth0 inet static address ... netmask ... gateway ... etc.
mit:
iface br0 inet static bridge_ports eth0 address ... netmask ... gateway ... etc.
Sie ändern lediglich
eth0
die Zeilebr0
und fügen sie hinzubridge_ports eth0
.Starten Sie den Host neu. Wenn Sie dies lokal tun, reicht es auch aus
sudo ifdown eth0
, es vor dem Start undsudo ifup br0
danach auszuführen. Beachten Sie, dass es etwas dauern kann, bis die Bridge hochfährt. Warten Sie also nach dem Neustart fünf Minuten, bevor Sie davon ausgehen, dass alles verloren ist.
- Ersetzen
So verschieben Sie einen bestimmten benannten LXC-Container auf eine öffentliche IP:
- Stoppen Sie den Container.
- Bearbeiten Sie es auf dem Host und ändern Sie es in .
/var/lib/lxc/container_name/config
lxc.network.link
br0
- Bearbeiten und konfigurieren Sie auf dem Host Ihre öffentliche IP wie gewohnt (DHCP oder eine statische Konfiguration, je nach Bedarf). Beachten Sie, dass die Schnittstelle weiterhin aus der Sicht des Containers aufgerufen wird.
/var/lib/lxc/container_name/rootfs/etc/network/interfaces
eth0
- Starten Sie den Container neu.
Um die Vorgabe für neue LXC-Container zu ändern, bearbeiten Sie
/etc/lxc/default.conf
den Host und ändern Sielxc.network.link
ihn inbr0
.Wenn Sie die von LXC bereitgestellte NAT-Brücke überhaupt nicht benötigen (d. h. alle Ihre Container verwenden stattdessen die neue Brücke), bearbeiten Sie auf dem Host
/etc/default/lxc
und ändern SieUSE_LXC_BRIDGE
es in"false"
, und führen Sie dann auf dem Host aussudo service lxc restart
.
Antwort2
Robie, vielen Dank, dass du diese Antwort gepostet hast. Ich habe mir die Haare gerauft, um das in Gang zu bringen, und dies war die einzige Methode, die funktioniert hat!
Ich dachte, ich sollte ein paar Dinge erwähnen, die ich herausgefunden habe, um die Anweisungen für andere Administratoren verständlicher zu machen.
Mein Host hatte mehrere statische IP-Aliase, die eth0 auf dem Gast zugewiesen waren, zum Beispiel:
iface eth0:1 inet static
address 5.5.5.5
netmask 255.255.255.5
gateway 5.5.5.1
etc.
Jetzt möchten wir br0 nicht auf die gleiche Weise einrichten, wir möchten nur eine IP ohne Aliase, wie Robie oben angegeben hat.
Nehmen wir also an, Sie möchten 5.5.5.5 dem Container debian8 zuweisen.
Bearbeiten /var/lib/lxc/debian8/etc/network/interfaces
und hinzufügen:
iface eth0 inet static
address 5.5.5.5
netmask 255.255.255.5
gateway 5.5.5.1
etc.
Geben Sie dann diesen Befehl ein:route add default gw <gateway-ip, in my case 5.5.5.1>
Danach den Container neustarten und endlich sollte alles funktionieren! :)
Antwort3
Ich hatte das gleiche Problem und habe diese Lösung (schnell und schmutzig).
server: eth0 = 10.1.0.77/24
server: lxdbr0 (lxd bridge) = 10.255.255.77/24
container: eth0 = 10.255.255.100/24 (same network as lxdbr0)
container: eth0:0 = 194.99.99.99/28 (public ip address on eth0 alias)
Auf dem Server:route add -host 194.99.99.99 gw 10.255.255.100 dev lxdbr0
Fügen Sie bei Bedarf auch eine Route zu Upstream-Routern hinzu.
Wahrscheinlich nicht die beste Lösung, erfordert aber keinen großen Aufwand! Prost.