Forum: PC Hard- und Software [docker] Docker KEA-DHCP - keine Lease


von Draconix (Gast)


Lesenswert?

Ich habe mir ein Docker Image gebastelt. Leider funktioniert es nicht so 
wie es soll. Bzw. er gibt überhaupt keine Leases raus.

Ich übergebe die DHCP Ports, ich habe die Datenbank - welche auch 
angebunden ist (KEA leert die leases). Kea läuft im Container. Auch 
läuft die selbe Config auserhalb von Docker ohne jede Probleme. Woran 
kann das liegen? Muss ich die Ports separat noch einmal freigeben?

Hat da jemand Erfahrung? Das würde mir sehr helfen :-)

Ich gebe mal die Dateien:


docker-compose.yml
1
version: '3.8'
2
services:
3
    srv_dhcp:
4
        container_name: srv_c_dhcp
5
        restart: always
6
        build:
7
            context: ./dhcp
8
            dockerfile: Dockerfile
9
        depends_on:
10
            - srv_mysql
11
        network_mode: host
12
        volumes:
13
            - /mnt/hdd2/Dockerfiles/dhcp:/etc/kea/
14
    srv_apache:
15
        container_name: srv_c_apache
16
        restart: always
17
        build:
18
            context: ./php
19
            dockerfile: Dockerfile
20
        depends_on:
21
            - srv_mysql
22
        volumes:
23
            - /mnt/hdd2/Dockerfiles/www:/var/www/html/
24
        ports:
25
            - 80:80
26
    srv_mysql:
27
        container_name: srv_c_mysql
28
        image: mysql
29
        restart: always
30
        environment:
31
            MYSQL_ROOT_PASSWORD: *****
32
            MYSQL_DATABASE: draconix
33
            MYSQL_USER: draconix
34
            MYSQL_PASSWORD: *****
35
            MYSQL_PORT: 3306
36
        volumes:
37
            - /mnt/hdd2/Dockerfiles/db:/var/lib/mysql
38
        ports:
39
            - "3306:3306"
40
    srv_phpmyadmin:
41
        container_name: srv_c_phpmyadmin
42
        image: phpmyadmin/phpmyadmin
43
        ports:
44
            - '5000:80'
45
        restart: always
46
        environment:
47
            PMA_HOST: srv_mysql
48
        depends_on:
49
            - srv_mysql

Dockerfile
1
FROM ubuntu:18.04
2
3
# Update APT and System.
4
RUN apt update && apt upgrade -y
5
RUN apt update && apt install -y kea-dhcp4-server nano
6
7
# Install KEA DHCP Serve
8
9
RUN apt-get clean && rm -rf /var/lib/apt/lists/* /tmp/* /var/tmp/*
10
RUN service kea-dhcp4-server start
11
12
EXPOSE 67 67/udp
13
EXPOSE 68 68/udp
14
15
ENTRYPOINT ["tail"]
16
CMD ["-f","/dev/null"]


kea-dhcp4.conf
1
{
2
    # DHCPv4 specific configuration starts here.
3
    "Dhcp4": {
4
5
        "dhcp-ddns": {
6
                "enable-updates": true,
7
                "qualifying-suffix": "home."
8
        },
9
10
11
        # Feste Host-leases über MYSQL Datenbank
12
        "hosts-database": {
13
                "type": "mysql",
14
                "name": "kea_dhcp",
15
                "host": "srv_mysql",
16
                "user": "draconix",
17
                "password": "****",
18
                "max-reconnect-tries" : 50,
19
                "reconnect-wait-time": 1000
20
        },
21
22
        # aktuelle leases in MYSQL Datenbank
23
        "lease-database": {
24
                "type": "mysql",
25
                "name": "kea_dhcp",
26
                "host": "srv_mysql",
27
                "user": "draconix",
28
                "password": "****",
29
                "max-reconnect-tries" : 50,
30
                "reconnect-wait-time": 1000
31
        },
32
33
        # Interface über die der DHCP läuft
34
        "interfaces-config": {
35
            "interfaces": [ ],
36
            "dhcp-socket-type": "udp"
37
        },
38
39
        # Lease Lifetimes und sonstige Settings
40
        "valid-lifetime": 1800,
41
        "renew-timer": 600,
42
        "rebind-timer": 1200,
43
44
        # Subnetz für DHCP4
45
        "subnet4": [
46
                {
47
                   "subnet": "192.168.1.0/24",
48
                   "pools": [ { "pool": "192.168.1.100-192.168.1.250" } ],
49
                    "option-data": [
50
                        {
51
                            "name": "domain-name-servers",
52
                            "data": "192.168.1.1, 8.8.8.8"
53
                        },
54
                        {
55
                            "name": "routers",
56
                            "data": "192.168.1.1"
57
                        }
58
                    ]
59
                }
60
        ],
61
  }
62
}
63
64
"Server": {
65
    "loggers": [
66
        {
67
            "name": "kea-dhcp4",
68
            "output_options": [
69
                {
70
                    "output": "/var/log/kea-debug.log"
71
                    "maxver": 8,
72
                    "maxsize": 204800,
73
                    "flush": true
74
                    "pattern": "%d{%j %H:%M:%S.%q} %c %m\n"
75
                }
76
            ],
77
            "severity": "DEBUG",
78
            "debuglevel": 99
79
        }
80
   ]
81
}

von Hmmm (Gast)


Lesenswert?

Draconix schrieb:
> EXPOSE 67 67/udp
> EXPOSE 68 68/udp

DHCP-Server brauchen Raw Sockets o.dgl., um direkt Clients bedienen zu 
können.

von Sheeva P. (sheevaplug)


Lesenswert?

Hmmm schrieb:
> Draconix schrieb:
>> EXPOSE 67 67/udp
>> EXPOSE 68 68/udp
>
> DHCP-Server brauchen Raw Sockets o.dgl., um direkt Clients bedienen zu
> können.

Deswegen benutzt er ja

  network_mode: host

in seiner docker-compose.yml.

von Hmmm (Gast)


Lesenswert?

Sheeva P. schrieb:
> Deswegen benutzt er ja
>
>   network_mode: host

Das ist aber nur die halbe Miete, denn:

Draconix schrieb:
> "dhcp-socket-type": "udp"

von Εrnst B. (ernst)


Lesenswert?

Draconix schrieb:
> RUN service kea-dhcp4-server start
^^^ das läuft einmalig beim Container build.

> ENTRYPOINT ["tail"]
> CMD ["-f","/dev/null"]
^^^ das läuft im fertigen Container, wenn du deinen compose-stack 
startest.

Sicher, dass das so richtig ist?

von Rene K. (xdraconix)


Lesenswert?

Εrnst B. schrieb:
> Draconix schrieb:
>> RUN service kea-dhcp4-server start
> ^^^ das läuft einmalig beim Container build.
>
>> ENTRYPOINT ["tail"]
>> CMD ["-f","/dev/null"]
> ^^^ das läuft im fertigen Container, wenn du deinen compose-stack
> startest.
>
> Sicher, dass das so richtig ist?

Nein, das stimmt, das ist nicht richtig so.

Aber auch wenn ich KEA im Container direkt starte (über EXEC bash in den 
Container) - dann läuft es.

Hmmm schrieb:
> Draconix schrieb:
>> EXPOSE 67 67/udp
>> EXPOSE 68 68/udp
>
> DHCP-Server brauchen Raw Sockets o.dgl., um direkt Clients bedienen zu
> können.

Guter Ansatz, kann ich RAW Sockets überhaupt in Docker freigeben? Geht 
nicht nur TCP und UDP?

Kann es auch sein, das Docker überhaupt keine Broadcasts in die 
Container lässt? Aber rein theoretisch braucht es das mit "network_mode: 
host" auch überhaupt nicht. Da er ja die kompletten Netzwerk-Ressourcen 
/ IP des Hosts nutzt.

Hmmm schrieb:
> Draconix schrieb:
>> EXPOSE 67 67/udp
>> EXPOSE 68 68/udp
>
> DHCP-Server brauchen Raw Sockets o.dgl., um direkt Clients bedienen zu
> können.

Mit "network_mode: host" werden Portmappings auf diesem Container doch 
ignoriert oder? Also wäre es relativ egal welche Ports ich dort wohin 
binde.

Was aber richtig ist, das in der KEA Config der Broadcast über UDP 
abgefangen wird. Was aber auf dem aktuellen Rechner - ohne Docker - 
tadellos schon seit einigen Monden seinen Dienst verrichtet.

von Hmmm (Gast)


Lesenswert?

Rene K. schrieb:
> Was aber richtig ist, das in der KEA Config der Broadcast über UDP
> abgefangen wird. Was aber auf dem aktuellen Rechner - ohne Docker -
> tadellos schon seit einigen Monden seinen Dienst verrichtet.

Laut Doku sollte das aber nicht gehen:

"Using UDP sockets automatically disables the reception of broadcast 
packets from directly connected clients. This effectively means that UDP 
sockets can be used for relayed traffic only. When using raw sockets, 
both the traffic from the directly connected clients and the relayed 
traffic are handled."

Default ist "raw", warum weichst Du davon ab?

von Draconix (Gast)


Lesenswert?

Ich habe den Fehler nun gefunden. 🤦‍♂️

Ich habe als Image Ubuntu:18.04 genommen. Dort wird noch die Docker 
Version 1.1.n ausgeteilt. Diese jedoch kommt nicht mit der Config klar, 
da der Aufbau anders ist, aufgefallen ist mir dies - nachdem ich Kea 
nicht als Dienst sondern direkt gestartet habe. Dort bemängelte er die 
Kommentare welche mit # voran gestellt war. Überdies hat er auch z. B. 
bei Max-Rec. die Werte in einem anderen Format erwartet.

Ich habe das Baseimage nun auf Ubuntu:20.04 laufen, dort wird Docker 
1.6.n ausgeliefert und diese schluckt auch meine Konfiguration und es 
läuft nun.

Und ja richtig, die Ports müssen auf RAW laufen. Auch meinem Heimserver 
laufen sie auf RAW - scheinbar habe ich dies umgestellt als ich 
"experimentiert" habe.

Ich danke euch dennoch vielmals.
René

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.