ISC-DHCP-Server nur starten, falls kein anderer DHCP-Server im Netz vorhanden

Einrichten des lokalen Netzes, Verbindung zu anderen Computern und Diensten.
Antworten
undee
Beiträge: 4
Registriert: 09.08.2022 07:56:52

ISC-DHCP-Server nur starten, falls kein anderer DHCP-Server im Netz vorhanden

Beitrag von undee » 09.08.2022 08:05:16

Guten Morgen!

Ich habe meinen Raspberry Pi mit Raspbian so konfiguriert, dass das Netzwerk standalone läuft (brauche unterwegs kein Internet, meine Netzwerkgeräte müssen sich aber untereinander sehen), es läuft darauf der ISC-DHCP-Server.
Ab und an möchte ich ihn aber auch ins heimische Netzwerk bringen, um Software und Updates aufzuspielen.
Dazu habe ich meine Netzwerkkarte so konfiguriert:

/etc/network/interfaces:

Code: Alles auswählen

iface et0 inet static
  address 192.168.1.1
  netmask 255.255.255.0

iface eth0:0 inet dhcp
Klappt eigentlich auch, die alias-Karte eth0:0 bekommt eine IP-Adresse von meinem Router zu hause, aber ich habe dann, weil der ISC-DHCP-Server ja automatisch startet, plötzlich 2 DHCP-Server in meinem Netzwerk, und dann ist Chaos vorprogrammiert.

Wie kann ich denn dem ISC verklickern, dass er nur starten soll, wenn eth0:0 keine IP bekommt?

mat6937
Beiträge: 2953
Registriert: 09.12.2014 10:44:00

Re: ISC-DHCP-Server nur starten, falls kein anderer DHCP-Server im Netz vorhanden

Beitrag von mat6937 » 09.08.2022 09:58:16

undee hat geschrieben: ↑ zum Beitrag ↑
09.08.2022 08:05:16
Wie kann ich denn dem ISC verklickern, dass er nur starten soll, wenn eth0:0 keine IP bekommt?
Du lässt via interfaces-Datei prüfen, ob eth0:0 eine IP-Adresse zugewiesen bekommen hat und wenn ja, dann wird z. B. eine (nicht leere) Datei mit einem beliebigen Inhalt im Verzeichnis /tmp erstellt.
Die service-unit die den ISC startet konfiguriert Du so, dass sie vom eth0-device und vom ausführen der interfaces-Datei abhängig ist bzw. nur dann ausgeführt wird, wenn die nicht leere Datei im Verzeichnis /tmp, _nicht_ vorhanden ist.

Benutzeravatar
MSfree
Beiträge: 10776
Registriert: 25.09.2007 19:59:30

Re: ISC-DHCP-Server nur starten, falls kein anderer DHCP-Server im Netz vorhanden

Beitrag von MSfree » 09.08.2022 10:49:02

mat6937 hat geschrieben: ↑ zum Beitrag ↑
09.08.2022 09:58:16
Du lässt via interfaces-Datei prüfen, ob eth0:0 eine IP-Adresse zugewiesen bekommen hat und wenn ja, dann wird z. B. eine (nicht leere) Datei mit einem beliebigen Inhalt im Verzeichnis /tmp erstellt.
Man kann in /etc/network/if-up.d Skripte ablegen, die aufgerufen werden, sobald das Interface gestartet wurde.
Die service-unit die den ISC startet konfiguriert Du so, dass sie vom eth0-device und vom ausführen der interfaces-Datei abhängig ist bzw. nur dann ausgeführt wird, wenn die nicht leere Datei im Verzeichnis /tmp, _nicht_ vorhanden ist.
Ich würde einfach in dem o.g. Skript den DHCP-Server stoppen, wenn eth0.0 eine gültige IP-Adresse bekommen hat. Dazu reicht der Aufruf

Code: Alles auswählen

systemctl stop isc-dhcp-server.service

mat6937
Beiträge: 2953
Registriert: 09.12.2014 10:44:00

Re: ISC-DHCP-Server nur starten, falls kein anderer DHCP-Server im Netz vorhanden

Beitrag von mat6937 » 09.08.2022 11:03:51

MSfree hat geschrieben: ↑ zum Beitrag ↑
09.08.2022 10:49:02
Man kann in /etc/network/if-up.d Skripte ablegen, die aufgerufen werden, sobald das Interface gestartet wurde.
Ja, das weiß ich und genau das meinte ich ja mit:
Du lässt via interfaces-Datei prüfen, ...
MSfree hat geschrieben: ↑ zum Beitrag ↑
09.08.2022 10:49:02
Ich würde einfach in dem o.g. Skript den DHCP-Server stoppen, wenn eth0.0 eine gültige IP-Adresse bekommen hat.
Das kann evtl. zu spät sein, denn via interfaces-Datei soll genau das bzw. für eth0:0, keinesfalls per dhcp, Zugang zum ISC haben können.

EDIT:

BTW: Was der TE hier machen will, geht auch ohne ISC bzw. ohne interfaces-Datei und dafür mit systemd-networkd.

undee
Beiträge: 4
Registriert: 09.08.2022 07:56:52

Re: ISC-DHCP-Server nur starten, falls kein anderer DHCP-Server im Netz vorhanden

Beitrag von undee » 09.08.2022 12:02:34

MSfree hat geschrieben: ↑ zum Beitrag ↑
09.08.2022 10:49:02
mat6937 hat geschrieben: ↑ zum Beitrag ↑
09.08.2022 09:58:16
Du lässt via interfaces-Datei prüfen, ob eth0:0 eine IP-Adresse zugewiesen bekommen hat und wenn ja, dann wird z. B. eine (nicht leere) Datei mit einem beliebigen Inhalt im Verzeichnis /tmp erstellt.
Man kann in /etc/network/if-up.d Skripte ablegen, die aufgerufen werden, sobald das Interface gestartet wurde.
Die service-unit die den ISC startet konfiguriert Du so, dass sie vom eth0-device und vom ausführen der interfaces-Datei abhängig ist bzw. nur dann ausgeführt wird, wenn die nicht leere Datei im Verzeichnis /tmp, _nicht_ vorhanden ist.
Ich würde einfach in dem o.g. Skript den DHCP-Server stoppen, wenn eth0.0 eine gültige IP-Adresse bekommen hat. Dazu reicht der Aufruf

Code: Alles auswählen

systemctl stop isc-dhcp-server.service
Also das hab ich grad versucht, das Skript wird aber niemals aufgerufen.
Habe unter /etc/network/if-up.d/ eine Datei test angelegt, die nur ein

Code: Alles auswählen

#!/bin/bash
echo "Test" >> /tmp/test.log
enthält, allerdings wird diese nicht ausgeführt, sobald die Netzwerkkarte up ist (ja, chmod +x hab ich gemacht).

Kann mir nicht erklären, warum das so ist, manuelle Ausführung klappt.

mat6937
Beiträge: 2953
Registriert: 09.12.2014 10:44:00

Re: ISC-DHCP-Server nur starten, falls kein anderer DHCP-Server im Netz vorhanden

Beitrag von mat6937 » 09.08.2022 12:14:55

undee hat geschrieben: ↑ zum Beitrag ↑
09.08.2022 12:02:34
Also das hab ich grad versucht, das Skript wird aber niemals aufgerufen.
Habe unter /etc/network/if-up.d/ eine Datei test angelegt, die nur ein

Code: Alles auswählen

#!/bin/bash
echo "Test" >> /tmp/test.log
enthält, allerdings wird diese nicht ausgeführt, sobald die Netzwerkkarte up ist (ja, chmod +x hab ich gemacht).

Kann mir nicht erklären, warum das so ist, manuelle Ausführung klappt.
Versuch mal mit:

Code: Alles auswählen

#!/bin/bash -e
/usr/bin/echo "Test" >> /tmp/test.log
#
exit 0
EDIT:

Wie sind die Ausgaben von:

Code: Alles auswählen

systemctl status ifupdown-pre.service
systemctl status networking.service
cat /etc/shells
which bash
auf deinem PI?

EDIT 2:

BTW: Welche Raspbian-Version hast Du auf deinem PI?
Zuletzt geändert von mat6937 am 09.08.2022 12:22:40, insgesamt 3-mal geändert.

Benutzeravatar
MSfree
Beiträge: 10776
Registriert: 25.09.2007 19:59:30

Re: ISC-DHCP-Server nur starten, falls kein anderer DHCP-Server im Netz vorhanden

Beitrag von MSfree » 09.08.2022 12:16:04

undee hat geschrieben: ↑ zum Beitrag ↑
09.08.2022 12:02:34
Also das hab ich grad versucht, das Skript wird aber niemals aufgerufen.

Code: Alles auswählen

iface eth0:0 inet dhcp
  up ScriptName

mat6937
Beiträge: 2953
Registriert: 09.12.2014 10:44:00

Re: ISC-DHCP-Server nur starten, falls kein anderer DHCP-Server im Netz vorhanden

Beitrag von mat6937 » 09.08.2022 12:27:33

undee hat geschrieben: ↑ zum Beitrag ↑
09.08.2022 12:02:34
... eine Datei test angelegt, die nur ein ...
BTW: Warum test kein so guter Name für ein Script ist:

Code: Alles auswählen

:~ $ file $(which test)
/usr/bin/test: ELF 64-bit LSB pie executable, ARM aarch64, version 1 (SYSV), dynamically linked, interpreter /lib/ld-linux-aarch64.so.1, BuildID[sha1]=2eb3e8c8e21a09564564bb7f1ba4b2e650f1c5d1, for GNU/Linux 3.7.0, stripped

JTH
Moderator
Beiträge: 3023
Registriert: 13.08.2008 17:01:41
Wohnort: Berlin

Re: ISC-DHCP-Server nur starten, falls kein anderer DHCP-Server im Netz vorhanden

Beitrag von JTH » 09.08.2022 12:34:45

mat6937 hat geschrieben: ↑ zum Beitrag ↑
09.08.2022 12:14:55

Code: Alles auswählen

/usr/bin/echo "Test" >> /tmp/test.log
echo ist in der Bash ein Builtin (~$ type echo), da brauchts keinen absoluten Pfad zum Programm echo.

mat6937 hat geschrieben: ↑ zum Beitrag ↑
09.08.2022 12:27:33
BTW: Warum test kein so guter Name für ein Script ist:
In den if-*.d-Ordnern liegen auch aus installierten Paketen mehrere Skripte (bridge, ethtool und openvpn z.B.), die genauso heißen, wie dazugehörige Programme unter /(s)bin. Das darf kein Problem sein/keine Konflikte geben. test ist auch ein Bash-Builtin, aber auch damit wäre ein Konflikt sehr merkwürdig. Mal umbenennen kann natürlich nicht schaden :)
Manchmal bekannt als Just (another) Terminal Hacker.

mat6937
Beiträge: 2953
Registriert: 09.12.2014 10:44:00

Re: ISC-DHCP-Server nur starten, falls kein anderer DHCP-Server im Netz vorhanden

Beitrag von mat6937 » 09.08.2022 12:38:52

JTH hat geschrieben: ↑ zum Beitrag ↑
09.08.2022 12:34:45
..., da brauchts keinen absoluten Pfad zum Programm
Schadet aber auch nicht, wenn man ein Problem hat und dann mit dem absoluten Pfad testet. ;-)

... aber der Pfad in der shebang sollte evtl. schon der richtige sein.

undee
Beiträge: 4
Registriert: 09.08.2022 07:56:52

Re: ISC-DHCP-Server nur starten, falls kein anderer DHCP-Server im Netz vorhanden

Beitrag von undee » 09.08.2022 14:19:46

MSfree hat geschrieben: ↑ zum Beitrag ↑
09.08.2022 12:16:04
undee hat geschrieben: ↑ zum Beitrag ↑
09.08.2022 12:02:34
Also das hab ich grad versucht, das Skript wird aber niemals aufgerufen.

Code: Alles auswählen

iface eth0:0 inet dhcp
  up ScriptName
Also das klappt mal schon nicht, nach dem Bootvorgang wurde das Skript ausgeführt, obwohl das Interface down war.

undee
Beiträge: 4
Registriert: 09.08.2022 07:56:52

Re: ISC-DHCP-Server nur starten, falls kein anderer DHCP-Server im Netz vorhanden

Beitrag von undee » 09.08.2022 14:21:00

Das Skript unter /etc/network/if-up.d wird übrigens auch nicht aufgerufen, wenn es einen anderen Namen hat.

mat6937
Beiträge: 2953
Registriert: 09.12.2014 10:44:00

Re: ISC-DHCP-Server nur starten, falls kein anderer DHCP-Server im Netz vorhanden

Beitrag von mat6937 » 09.08.2022 14:32:50

undee hat geschrieben: ↑ zum Beitrag ↑
09.08.2022 14:19:46
... wurde das Skript ausgeführt, obwohl das Interface down war.
Wie hast Du festgestellt, dass das Interface down war?

EDIT:

BTW: Diese Zeile:

Code: Alles auswählen

iface et0 inet static
, hast Du die von Hand geschrieben (... weil es ja auch funktioniert)? ... denn bei c&p sollte das ja nicht passieren (et0 vs. eth0)

Antworten