it-swarm.com.de

Einrichten von überbrückten LXC-Containern mit statischen IPs

Ich versuche, mehrere LXC-Container auf einem Host einzurichten, von denen jeder seine eigenen öffentlichen statischen IP-Adressen hat.

Auf meinem Host läuft das neueste Ubuntu. Es hat eine einzige Netzwerkschnittstelle mit dem Namen eth0. Die statischen IPs können aus dem Internet gepingt werden und heißen eth0: 210, eth0: 211 ... Die Zahlen nach dem Doppelpunkt sind das niedrigstwertige Byte der Adressen. Zusätzlich zu diesen Schnittstellen habe ich br0 auf der öffentlichen IP des Hosts eingerichtet. Es gibt auch die Schnittstellen lo, veth2LPP9A und lxcbr0. Das lxcbr0 hat die Adresse einer privaten IP.

Der Host/etc/network/interfaces sieht folgendermaßen aus:

auto br0
iface br0 inet static
        bridge_ports eth0
        bridge_fd 0
        [...]

Bisher habe ich verschiedene Online-Quellen verwendet, darunter Überbrückung von LXC-Containern mit Host eth0, damit diese eine öffentliche IP haben können , um mich beim Einrichten zu unterstützen.

Die Konfigurationsdatei des Containers enthält:

lxc.network.type = veth
lxc.network.link = br0

Ich habe die statische Konfiguration lxc.network.ipv4 aus dieser Datei entfernt, da sie Probleme verursacht hat. Wenn ich lxc-ls --fancy mit dieser Konfiguration ausführte, sah ich dieselbe öffentliche IP zweimal in der Ausgabe. Außerdem würde dies die Subnetzkonfiguration der/etc/network/interfaces des Containers beeinträchtigen.

Apropos Schnittstellendatei des Containers: Es sieht ein bisschen so aus:

auto eth0
iface eth0 inet static
        address [...]
        netmask 255.255.255.255
        #gateway [...]
        dns-nameservers 8.8.8.8

        post-up route add [...] dev eth0
        post-up route add default gw [...]
        post-down route del [...] dev eth0
        post-down route del default gw [...]

Ich musste das Gateway auskommentieren und die Befehle zum Hinzufügen der Route zu dieser Datei hinzufügen. Andernfalls würde der Start des Containers Minuten dauern.

Die Dateien/proc/sys/net/bridge/bridge-nf- * auf dem Host sind alle auf 0 gesetzt. Der Wert/proc/sys/net/ipv4/ip_forward ist 1.

Das Problem ist, dass ich nicht aus dem Container pingen kann, obwohl die "Route -n" des Containers so aussieht, wie sie sollte. SSHing mit der IP des Containers verbindet mich mit dem Host.

BEARBEITEN: Das Entfernen der statischen IP des Containers vom Host hat geholfen, aber jetzt wird ein neuer Fehler angezeigt. Der Versuch, den Container vom Host aus zu pingen, führt zu Redirect HostFrom, New nexthop. Die Pakete werden nur wiederholt vom Gateway zum Host gesendet. Das Ausführen einer Traceroute vom Host aus zeigt, dass sich der erste Stopp am Gateway befindet. Dann sind alle anderen Routen * * *. Ich habe das gleiche Problem, unabhängig davon, ob der Container online ist oder nicht.

15
EthernetCable

Tatsächlich können Sie können die Adresse und das Gateway von innerhalb dem Host einstellen und den Container so konfigurieren, dass die Schnittstelle bei nicht berührt wird alle mit dem Schlüsselwort manual .

Platziere dies innerhalb der Gäste /etc/network/interfaces:

auto eth0
iface eth0 inet manual

Überlassen Sie es auch der Konfigurationsdatei des Containers, um die Schnittstelle einzurichten:

lxc.network.type = veth
lxc.network.flags = up
lxc.network.link = lxc-bridge-nat
lxc.network.ipv4 = 192.168.100.16/24
lxc.network.ipv4.gateway = auto

Der Gast verhält sich so, als hätte das BIOS die Schnittstelle bereits eingerichtet und verwendet sie einfach.

Besonders erkunden lxc.network.ipv4.gateway .

17
sebastianwagner

Da Sie eine Überbrückung durchführen, müssen Sie die IP-Adressen im Container nur und nicht auf dem Host festlegen. Der Host sollte nur seine eigene IP-Adresse (n) haben.

4
Michael Hampton

Der beste und schnellste Weg, den ich finde, ist die Verwendung der lxc-Profile

lxc profile list - befehle der Liste alle Profile, die du dann hast

lxc profile copy default minecraft (dies ist der Name Ihres neuen Profils)

Dann lxc profile edit minecraft

Das wird kommen

devices:
  eth0:
    ipv4.address: 192.168.1.114/24  - add this line and enter any ip address you like
    name: eth0
    nictype: macvlan - this is my setting
    parent: enp0s25
    type: nic
  root:
    path: /
    pool: lxc_zfs
    type: disk
name: mine
used_by:

dann speichere es

weisen Sie als Nächstes das Profil wie folgt Ihrem LXC-Container zu

lxc profile assign YOUR_CONTAINER_NAME YOUR_NEW_PROFILE_NAME

starten Sie dann einfach den Container neu und Ihre neue IP-Adresse wird auf diesen Container gesetzt

2
Jayferret

Ich habe es neulich mit Ubuntu 14.04 gemacht. Es ist einfach. Sie müssen nur die Datei /etc/network/interfaces In Ihrem Container bearbeiten und Folgendes festlegen:

auto eth0
iface eth0 inet static
 address $IP
 netmask $NETMASK
 gateway $GW
 dns-nameservers $DNS

Ersetzen Sie jede Variable durch den gewünschten Wert.

Sie NICHT müssen noch etwas tun!

PS: Beachten Sie das Leerzeichen vor einigen Zeilen. Es zwingend erforderlich ist.

2

Ich konnte meine lxc-Container korrekt einrichten, nachdem ich der Antwort von @Enrique Moreno Tent gefolgt war. Daher werde ich detaillierter erklären, was zu tun ist, falls Sie nicht wissen, wie Sie die anderen Elemente einrichten sollen.

1. Greifen Sie mit dem Befehl lxc-attach Auf Ihren LXC-Container zu

Befehl:

$ lxc-attach -n YOUR-CONTAINER-NAME

2. Zeigen Sie Ihre aktuellen Konfigurationen mit ifconfig an

Befehl

[email protected]:~# ifconfig
eth0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 10.0.3.160  netmask 255.255.255.0  broadcast 10.0.3.255
        inet6 fe80::216:3eff:fec9:2fa0  prefixlen 64  scopeid 0x20<link>
        ether 00:16:3e:c9:2f:a0  txqueuelen 1000  (Ethernet)
        RX packets 62  bytes 7142 (7.1 KB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 60  bytes 9788 (9.7 KB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

lo: flags=73<UP,LOOPBACK,RUNNING>  mtu 65536
        inet 127.0.0.1  netmask 255.0.0.0
        inet6 ::1  prefixlen 128  scopeid 0x10<Host>
        loop  txqueuelen 1  (Local Loopback)
        RX packets 20285  bytes 175021803 (175.0 MB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 20285  bytes 175021803 (175.0 MB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

`` `

3. Adresse, Netzmaske und Gateway abrufen

Wenn wir das Ergebnis des obigen Befehls ifconfig sehen, sehen wir dann:

Adresse ist die gewünschte Adresse, Sie können sie in 10.0.3.166 ändern.

Netzmaske ist da: 255.255.255.0

Gateway: Für das Gateway verwenden Sie die Adresse Broadcast mit der Nummer 10.0.3.255

Wie Sie oben sehen können, verfügen Sie derzeit über alle Informationen, die Sie zum Füllen Ihres Gastes (Containers) benötigen /etc/network/interfaces.

4. Den Wert dns-nameservers Erhalten.

Geben Sie den folgenden Befehl ein:

cat /etc/resolv.conf

Aber vielleicht ist es am besten, Google DNS zu verwenden, das 8.8.8.8 Und 8.8.4.4

5. Bearbeiten von /etc/network/interfaces IM BEHÄLTER

auto eth0 iface eth0 inet static address 10.0.3.166 netmask 255.255.255.0 gateway 10.0.3.255 dns-nameservers 8.8.8.8

1
Iacchus