staging.inyokaproject.org

DHCP im Container für den Host

Status: Ungelöst | Ubuntu-Version: Kubuntu 18.04 (Bionic Beaver)
Antworten |

Salamander76

Anmeldungsdatum:
14. März 2014

Beiträge: 205

Hallo an euch,

für ein Projekt möchte ich in einem Container DHCP für das Hostnetzwerk bereitstellen. Der Host selbst hat die 192.168.1.1. In Docker erstelle ich ein Netzwerk im bridge Modus mit 192.168.1.0/24. Dann erstelle ich einen Container mit dem ubuntu:latest Image und hänge diesen an das Netzwerk.

docker run -it --rm --name test ubuntu /bin/bash

Im Container installiere ich das Paket isc-dhcp-server und konfiguriere die /etc/dhcp/dhcp.conf

subnet 192.168.1.9 netmask 255.255.255.0{
  range 192.168.1.10 192.168.1.100;
  interface eth 0;

sowie die /etc/default/isc-dhcp-server

INTERFACESv4="eth0"

Am Ende starte ich über "service isc-dhcp-server start" den dhcpd und erhalte auch keine Fehlermeldung.

Soweit so gut. Wenn ich jedoch im Hostnetzwerk einen Client anschließe und auf DHCP stelle, erhält er keine IP-Adresse aus dem Container. Auf diesem Rechner zeigt mir tcpdump, dass er fleißig nach einem DHCP-Server schreit, im Container ist seitens tcpdump jedoch völlige Ruhe. Auch ein Export der Ports 67 und 68 (-p 67-68:67-68/udp) bringt nichts.

Das Image networkboot/dhcpd ist eigentlich exakt genauso aufgebaut, tut aber auch nicht?!?

Hat jemand noch eine Idee?

misterunknown Team-Icon

Ehemalige
Avatar von misterunknown

Anmeldungsdatum:
28. Oktober 2009

Beiträge: 4403

Also grundsätzlich würde ich dir für deinen Anwendungsfall eher LXC-Container empfehlen. Vom Anwendungsfall her eignen sich LXC-Container eher für System-Containerisierung, und Docker-Container eher als Anwendungs-Containerisierung.

Ich geh davon aus, dass dein grundsätzliches Problem ist, dass Docker netzwerkseitig viel selbst und implizit konfiguriert. Meines Wissens ist ein "Bridge"-Netzwerk in Docker nicht automatisch mit einem physischen Interface im Host assoziiert, sondern stellt eine autonome Netzwerkbrücke für die Kommunikation zwischen Containern dar, was erklärt, warum die die DHCP-Requests im Container nicht siehst.

BillMaier Team-Icon

Supporter

Anmeldungsdatum:
4. Dezember 2008

Beiträge: 6389

Genau so ist es.

Bridge in Docker bedeutet NAT zwischen Host und Container. Und DHCP wird eben nicht geroutet.

Mit lxc habe ich keine Erfahrung.

Wenn du das mit Docker machen willst, stellst du den Container ins Host-Netzwerk. Je nach Version und Art ist die Direktive

hostnet: true

oder

—network=host

oder ähnlich.

Die Portmappings alle weg machen.

Der Container läuft dann wie ein „normaler“ Dienst im Hostnetzwerk und belegt dort die Ports.

Bei Unklarheiten gerne nochmal fragen.

Viele Grüße BillMaier

BillMaier Team-Icon

Supporter

Anmeldungsdatum:
4. Dezember 2008

Beiträge: 6389

Und?

BillMaier Team-Icon

Supporter

Anmeldungsdatum:
4. Dezember 2008

Beiträge: 6389

Hallo,

Hilfe gefunden und Thema gelöst? Dann bitte als solches markieren. Danke.

Gruß BillMaier

Antworten |