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

15

Ich versuche, mehrere LXC-Container auf einem Host mit jeweils eigenen öffentlichen statischen IP-Adressen einzurichten.

Auf meinem Host läuft das neueste Ubuntu. Es hat eine einzige Netzwerkschnittstelle mit dem Namen eth0. Die statischen IP-Adressen können über das Internet gepingt werden und heißen eth0: 210, eth0: 211 ... Die Zahlen nach dem Doppelpunkt sind das niederwertigste 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, einschließlich Bridging LXC-Container, um eth0 zu hosten, damit sie eine öffentliche IP-Adresse haben , die mir beim Einrichten hilft.

Die Konfigurationsdatei des Containers hat:

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

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

Apropos Interface-Datei des Containers:

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 Route hinzufügen, um Befehle zu dieser Datei hinzuzufügen. Andernfalls würde der Container einige Minuten zum Booten benötigen.

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

Das Problem ist, dass ich nicht aus dem Container herauspingen kann, obwohl das "route -n" des Containers so aussieht, wie es sollte. Wenn ich mich an die IP des Containers wende, verbinde ich mich mit dem Host.

BEARBEITEN: Das Entfernen der statischen IP des Containers vom Host hat geholfen, aber jetzt erhalte ich einen neuen Fehler. Der Versuch, den Container vom Host aus zu pingen, führt zu Redirect HostFrom, New nexthop. Die Pakete werden einfach 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.

Ethernet Kabel
quelle

Antworten:

17

In der Tat Sie können die Adresse und Gateway von eingestellt innerhalb der Host und den Container konfigurieren nicht die Schnittstelle an alle mit dem Schlüsselwort zu berühren manual.

Platzieren Sie 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 wird sich so verhalten, als ob das BIOS die Schnittstelle bereits eingerichtet hat und sie einfach verwendet.

Besonders erforschen lxc.network.ipv4.gateway.

sebastianwagner
quelle
Danke! Dies hat mir das Leben gerettet ... mein Container hat immer versucht, eine neue DHCP-Adresse zu erhalten ... das Festlegen eines festen Wertes im Container (statisch) führte dazu, dass der Container nicht mehr bootete!
Dominik Dorn
Beachten Sie, dass dies nicht gut funktioniert, wenn der Host angehalten und fortgesetzt wird. Der lxc fährt mit seiner zugewiesenen IP-Adresse fort, aber der Host denkt, dass er keine IP-Adresse mehr hat. Ich habe festgestellt, dass es besser ist, dnsmasq für lxc-net zu konfigurieren und dort eine feste Adresse auszuteilen.
HRJ
@HRJ - Sie sollten das "Wie" in Ihren Kommentar oder Link zum Verweis aufnehmen, anstatt nur "Mach es" zu sagen. Dies ist eine technische Seite und Sie sollten etwas sagen, das tatsächlich verwendbar ist.
Ian Macintosh
2
Es scheint , wie der richtige Ort , dies zu tun ist sowohl in / etc / default / lxc , wo Sie Ihren Bereich (siehe LXC_DHCP_RANGE) und in /etc/dnsmasq.d-available/lxc gemäß dem dnsmasq docs oder manpage einstellen
Ian Macintosh
2
Weitere
Ian Macintosh,
4

Da Sie überbrücken, müssen Sie die IP - Adressen in den Behälter gesetzt nur , und nicht auf dem Host. Der Host sollte nur seine eigene (n) IP-Adresse (n) haben.

Michael Hampton
quelle
2

Ich habe es neulich mit Ubuntu 14.04 gemacht. Es ist einfach. Sie müssen nur die /etc/network/interfacesDatei 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 haben, etwas anderes zu tun!

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

Enrique Moreno Zelt
quelle
dies führte dazu, dass mein container nicht mehr bootete (ubuntu 14.04 server) .. die antwort von sebastianwagner funktioniert für mich.
Dominik Dorn
2

Am besten und schnellsten finde ich die lxc-Profile

lxc profile list - Befehlen Sie der Liste alle Profile, die Sie haben

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 das Profil dann 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

Jayferret
quelle
1

Nachdem ich die Antwort von @Enrique Moreno Tent befolgt habe, konnte ich meine lxc-Container korrekt einrichten. Falls Sie nicht wissen, wie Sie die anderen Elemente einrichten sollen, werde ich Ihnen im Detail erklären, was zu tun ist.

1. Greifen Sie per lxc-attachBefehl auf Ihren LXC-Container zu

Befehl:

$ lxc-attach -n YOUR-CONTAINER-NAME

2. Zeigen Sie Ihre aktuellen Konfigurationen mit an ifconfig

Befehl

root@mycontainer:~# 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 ifconfigwir das Ergebnis des obigen Befehls sehen, sehen wir:

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 Broadcast- Adresse mit 10.0.3.255

Wie Sie oben sehen können, haben Sie derzeit alle Informationen, die Sie benötigen, um Ihren Gast (Container) zu füllen /etc/network/interfaces.

4. dns-nameserversWert bekommen.

Geben Sie den folgenden Befehl ein:

cat /etc/resolv.conf

Aber vielleicht am besten mit Google DNS, die asre 8.8.8.8und8.8.4.4

5. Bearbeiten von /etc/network/interfacesINNERHALB DES CONTAINERS

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

Iacchus
quelle
ifconfigwurde ersetzt durch ip ain neueren debian / ubuntu-versionen linuxconfig.org/…
rvazquezglez