Ich weiß, dass ich statische IP manuell mit zuweisen kann /etc/network/interfaces
.
Ich weiß auch, dass ich die MAC-Adresse des LXC-Containers lesen kann (z. B. indem ich nach einem lxc.network.hwaddr
Eintrag in suche /var/lib/lxc/<container-name>/config
und die IP anhand von Einträgen dhcp-host=<mac-addr>,10.0.3.3
in zuweise /etc/dnsmasq.d/<some file>
.
In der Datei habe /etc/default/lxc-net
ich gelesen
# Uncomment the next line if you'd like to use a conf-file for the lxcbr0
# dnsmasq. For instance, you can use 'dhcp-host=mail1,10.0.3.100' to have
# container 'mail1' always get ip address 10.0.3.100.
#LXC_DHCP_CONFILE=/etc/lxc/dnsmasq.conf
Das würde meinen Bedürfnissen entsprechen; dies hat leider keine auswirkung.
lxc-net
hilft ein Neustart nicht, wenn Sie Ihre lxcbr0-Brücke nicht entfernen. Siehe meine Antwort.Antworten:
Ich bin kürzlich darauf gestoßen und denke, ich habe eine einfache Lösung gefunden. Ich habe es (nur) unter Ubuntu 14.04 getestet.
Kommentieren Sie zunächst diese Zeile / etc / default / lxc-net aus:
Definieren Sie in /etc/lxc/dnsmasq.conf eine dhcp-hosts-Datei:
Fügen Sie dann Einträge in /etc/lxc/dnsmasq-hosts.conf wie folgt hinzu:
Achtung: Änderungen werden wirksam, nachdem Sie lxc-net neu gestartet haben (wodurch dnsmasq neu gestartet wird):
Anschließend können Sie /etc/lxc/dnsmasq-hosts.conf ändern und das SIGHUP-Signal an dnsmasq senden:
Also ja, Sie müssen lxc-net neu starten, aber nur einmal. Hoffe das hilft.
quelle
killall -s SIGHUP dnsmasq
. Ich bin damit einverstanden, dass nur "SIGHUP-ing" dnsmasq effizienter ist als ein Neustart des gesamten Daemons (insbesondere, wenn es nicht funktioniert, ohne seine Upstart-Skripte zu patchen).lxc-net
ist nur erforderlich, damit der dnsmasq die Konfiguration von /etc/lxc/dnsmasq.conf verwenden kann (und diese Information ist in der vorhanden, die/etc/default/lxc-net
dem unbekannt istdnsmasq
). Wenn Sie es schon einmal eingestellt hatten, sollte nur ein weiteres SIGHUP ausreichen.kill -HUP $(cat /var/run/lxc/dnsmasq.pid)
Wenn Sie keinekillall
anderendnsmasq
Instanzen installieren oder neu laden möchtenEs funktioniert gut in Ubuntu 14.04.1
Kommentieren Sie diese Zeile aus
/etc/default/lxc-net
Stoppen Sie alle Container und starten Sie lxc-net neu:
Konfigurieren Sie IP-Adressen in
/etc/lxc/dnsmasq.conf
Wo
{NAME}
ist der Name Ihres LXC-Containers:quelle
/var/lib/lxc/<container-name>/rootfs/etc/network/interfaces
Dateien zu bearbeiten und dem Container eine statische IP-Adresse zuzuweisen.Die Antwort des Tombart funktioniert, wenn Sie geduldig genug sind, um auf die DNS-Aktualisierung zu warten, UND wenn Sie bereit sind, den Container (den Gast) anschließend neu zu starten.
Was folgt, ist das Rezept, das erfordert, dass alle anderen möglicherweise laufenden lxc-Container heruntergefahren werden . Wenn Sie sich das nicht leisten können, sehe ich keine Möglichkeit, eine neue dnsmasq-Konfiguration zu erzwingen. (Aus irgendeinem Grund funktioniert die Signalisierung von HUP an dnsmasqs in gefundene PID
/run/lxc/dnsmasq.pid
auch nicht.)Wenn Sie also etwas haben möchten, das sofort funktioniert und keine anderen lxc-Container ausgeführt werden, folgen Sie meiner Antwort.
$name
ist der Name des Knotens, für den wir die Zuweisung zurücksetzen möchten, und$internalif
der Name des überbrückten Adapters des LXC. Sie können den Wert von$internalif
mit erhalten, z. B.augtool -L -A --transform "Shellvars incl /etc/default/lxc-net" get "/files/etc/default/lxc-net/LXC_BRIDGE" | sed -En 's/\/.* = (.*)/\1/p'
wenn Sie installieren,augeas-tools
aber normalerweise ist es nur solxcbr0
.Leider gibt es
/etc/init/lxc-net.conf
in Ubuntu 14.04 einen Fehler (Feature?) , Der das Neuladen verhindert, esdnsmasq
sei denn, das Bridge-Gerät ist für den Host ausgefallen.quelle
Diese Lösung funktioniert durch Patchen der lxc-Upstart-Skripte. Die komplexe Aufgabe, die lxcbr0-Brücke hochzufahren und a zu starten, wird
dnsmasq
in zwei separate Jobs aufgeteilt. Jetzt müssen Sie nicht mehr die gesamtelxc-net
Brücke neu starten, um nur die Brücke neu zu laden. Dasdnsmasq
Nachladen der Brückesudo service restart lxc-dnsmasq
ist ausreichend und erfordert kein Herunterfahren der Brücke.sudo service lxc-net stop
und stellen Sie sicher, dass keine lxcbr0-Brücke (oder eine gleichwertige Brücke) vorhanden ist./etc/init/lxc-net.conf
durch den folgenden Inhalt:.
/etc/init/lxc-dnsmasq
mit folgendem Inhalt hinzu:.
quelle
Hier ist ein einfaches Python-Skript, das LXC dnsmasq lease veröffentlicht. Sie können es vom Host-Computer ausführen oder von einem anderen Container aus fälschen - ja, das funktioniert!:
Voraussetzung dafür ist die Scapy-Python-Bibliothek:
Nach dem Ausführen sollte im Systemprotokoll Folgendes angezeigt werden:
Zur Bestätigung überprüfen Sie einfach, ob der Eintrag von entfernt wurde
/var/lib/misc/dnsmasq.lxcbr0.leases
. Der Container selbst behält die IP bei, daher sollte er gestoppt werden, bevor ein neuer Container gestartet wird, der die IP wiederverwenden soll.quelle
Mir ist klar, dass meine Antwort Jahre zu spät ist, aber vielleicht hilft sie jemand anderem. Das Problem war, dass Sie Code speziell für das LXC Ubuntu-Paket (
write_lxc_net
Funktion) bearbeitet haben, der als Zeichenfolge an ein anderes Ziel geschrieben werden sollte und nicht imlxc-net
Skript selbst verarbeitet wurde!Infolgedessen hat der dnsmasq- Prozess die Konfigurationsdatei, die Sie zu übergeben versucht haben, nicht erhalten, sodass Sie, wie Sie sagen, "keine Auswirkung" haben.
Stattdessen möchten Sie diese Variable unter anderem am oberen Rand des Skripts festlegen:
quelle