# openrc: dhcpd start ohne Netzwerkkabel an eth0

## alexander_ro

Hallo  :Smile: 

Ein Raspberry Pi soll sich mit dem hostapd (wlan0) mit einem Handy verbinden. Das Handy bekommt von einem dhcpd auf dem Raspi die IP-Adresse. Das funktioniert so auch schon gut. Die Schnittstelle eth0 hat nur ein Kabel angeschlossen wenn ich an der Software auf dem Raspi was ändern will. Jetzt habe ich das Problem das wenn eth0 keinen Carrier hat der dhcpd beim booten nicht gestartet wird und damit das WLAN wegen der fehlenden IP-Adress Vergabe nicht funktioniert.

Den dhcpd lasse ich nur an wlan0 lauschen:

Datei: /etc/conf.d/dhcpd

Inhalt: DHCPD_IFACE="wlan0"

Wenn ich den dhcpd manuell starte geht das Problemlos ohne eth0 nur über das Init-Script verlangt er zwingend ein Carrier Signal an eth0. Kann man das irgendwie abstellen?

Ich habe das hier gefunden: https://dev.gentoo.org/~vapier/openrc/projects/openrc/ticket/33.html

Ich verstehe nur nicht ganz was der mit coldplugged meint. Wenn man die Schnittstellen einfach aus dem Runlevel entfernt werden die ja nicht mehr gestartet. Das würde in meinem Fall nicht funktionieren weil der Raspi im normal Fall keinen Monitor und Tastatur hat.

Grüße

Alexander

----------

## ChrisJumper

Coldplug ist, wenn ein Kabel Ein- oder Ausgesteckt wird, wärend das Gerät kalt ist, also ausgeschaltet.

Hotplug ist die Definition für den eingeschalteten Zustand. Also wenn der Computer läuft. Bei WLAN existiert das natürlich nicht.

Schau dir mal an wie die Openrc Skripte eingerichtet sind, ich meine es war (unter gentoo) rc-status oder rc-show und rc-update. Im Wiki findet man Beispiele. Denke es ist beim Raspi gleich.

Gentoo Wiki hat auch eine schöne Beschreibung zu Hostapd

Achte auch darauf das du dir den SSH Daemon nicht absägst, aber man kann bei dem Raspi zur Not ja auch die SD-Karte raus nehmen und die am PC einhängen.

Vielleicht ist irgendwo noch eine falsche Abhängigkeit drin denn eigentlich reicht es wenn du den DHCPd und WLAN beim Raspi selbst hoch fährst.

Ich fand es nur ein wenig verwirrend, das du diese Konfiguration nutzt, ohne Internet zu haben. Klar kannst du dadurch auch ein neues WLAN Netz auf spannen und dich von dem Smartphone mit dem Raspi verbinden. Aber wenn du den Raspi nicht als Router/Accesspoint nutzt, hätte es wahrscheinlich auch gereicht wenn deine Fritzbox 2 Adressen Verteilt. Eine WLAN Adresse an den Raspi und eine WLAN Adresse an dein Smartphone und die Firewall Regeln anpasst.

Doch stimmt schon, dann ist das kein eigenständiges mobiles Netzwerk und du bist mehr oder weniger an (dein) Wlan vor Ort gebunden. Macht schon Sinn mit der Accesspoint-Konfiguration. Aber dann könntest du es je nachdem auch anders herum nutzen, dein Smartphone als Accesspoint (immerhin bietet es ja auch Internetzugang) und dann holt sich dein Raspi vom Smartphone die IP.

Ich mach mir schon wieder zu viele Gedanken, der Kaffee ist noch nicht durch. :D

----------

## mike155

Verwendest Du den ISC dhcpd? Dann schau mal hier: https://serverfault.com/questions/812892/cant-bind-isc-dhcp-server-to-interface, insbesondere die Antwort von Zoredache.

Ich habe keine Ahnung, ob das stimmt - aber der ISC dhcpd hat so seine Tücken... Du könntest tatsächlich mal dnsmasq probieren.

----------

## alexander_ro

Das ist ein Mobiles Gerät und braucht keinen Internetzugang. Für Änderungen oder Updates ist dann die Verbindung über eth0 zum Notebook der dann auch die Internetverbindung zur Verfügung stellt. Unterwegs ist das Handy einfach nur Bedienterminal mit einer HTML-Oberfläche im Browser des Handys.

----------

## alexander_ro

Ja das ist das Paket mit dem ISC DHCP. An dem DHCP Server liegt das aber nicht. Wenn ich den manuell mit den gleichen Parametern starte wie das Init-Script es tut läuft er Problemlos auch nur mit wlan0. Das starten des dhcpd muss irgendwo von dem Init-Script verhindert werden. Ich werd mal Versuchen ob ich mit dem genannten rc-status da noch irgenwas herausbekomme.

Im Wiki habe ich zur Konfiguration des Netzwerks immer gelesen das man den Link für die Netzwerkschnittstelle dann im default Runlevel starten muss. Interessanter weise habe ich gerade zufällig gesehen das ich das bei einem Rechner nicht mache. Das Netzwerk funktioniert aber trotzdem. Ich probiere das mal aus was passiert wenn ich eth0 nicht beim booten starte. Ob das dann automatisch nur dann gestartet wird wenn ich ein Kabel anschließe.

----------

## ChrisJumper

Ganz genau schau dir an wie auf dem Raspi der Network-Manager eingestellt ist und wie das WLAN konfiguriert wird/wurde.

Eventuell reicht dir halt die manuelle Zuweisung einer WLAN IP und das Starten des Accesspoints.

https://wiki.gentoo.org/wiki/Hostapd#IP_of_the_AP

Bei der Netzwerk Konfiguration bleibt in er Regel eigentlich immer nur Statische oder Automatische Konfiguration.

In der Administration muss man das ein weing Aufdröseln, welches System was macht und wie eingestellt ist. Auch damit die sich nicht in die Quere kommen, Lustig mit IPv6, IPv4 und wenn es mehrere DHCP-Server gibt welche den selben Bereich und IP-Adressraum verteilen zu wollen, oder wenn zwei Systeme die selbe IP nutzen wollen.

Wie das dann gelöst ist hängt halt von den Einstellungen ab, bei den einen macht das Systemd, bei den anderen Openrc über (/etc/conf.d/net), bei wieder anderen einfach die Desktop Umgebung mit einem KDE oder Gnome Networkmanager, oder ein Skript das nach dem Login ausgeführt wird und das Netzwerk einstellt.

Die meisten Systeme horchen früher oder später aber einfach mit der Frage nach einem DHCP Server im Netzwerk, oder nutzen eklige Zeroconf Methoden. Ja dank Hotplug kann das auch angestoßen werden wenn man ein Kabel anschließt oder ab zieht. Musst halt schauen was das System macht und die nach deinem Bedarf einstellen.

Probleme macht es wenn du zum Beispiel ein Boot-Script angelegt hast und es dann doch noch einen weiteren Network-Manager gibt der von Raspi im Hintergrund gestartet wird und nach dem Einstecken, das Netzwerk noch mal (anders) neu einstellt.

----------

## alexander_ro

Es gibt keine Networkmanager. Es ist ein Gentoo Minimal System bei dem ich nur die Pakete nachinstalliert habe die ich brauche. Init System ist openrc. Benutzt werden nur IPv4 Adressen.

Der Hostapd funktioniert ja bereits ohne Probleme. Statische IP-Adressen gehen nicht weil das die Telefone nicht können. Die erwarten das der Hotspot die IP-Adresse per DHCP liefert. Den Wiki Artikel kenne ich.

```

#####

# eth0 mit dhcpcd

config_eth0="dhcp"

#

#####

#####

# WLAN-Hotspot mit DHCP-Server

# hostapd, dhcpd

# Keine automatische WLAN-Client konfiguration

modules_wlan0="!wireless"

# IP-Adresse und Netzwerk für WLAN festlegen

config_wlan0="null"

config_wlan0="10.254.240.10/24"

#

#####

```

Das Problem ist nur das openrc den dhcpd nicht startet wenn eth0 kein Carrier Signal hat. Ich habe nichts gefunden wo man das einstellen könnte.

----------

## pietinger

Ich habe den DHCPD nicht und kenne deswegen auch nicht dessen Start-/Stop-Script. Aber falls da eine Sektion mit "depend() {need net}" drin sein sollte, kannste das ja mal testweise rausschmeißen.

----------

## alexander_ro

Wenn man das so ändert:

```

depend() {

#       need net

        use logger dns

}

```

dann wird der dhcpd auch ohne eth0 gestartet und WLAN geht ohne Carrier an eth0.

Kann man das so auf Dauer lassen?

Bin mir nicht sicher. Mindestens nach einem Update geht es vermutlich wieder nicht.

<Edit>

Mit dem wissen um need net habe ich das hier gefunden: https://forums.gentoo.org/viewtopic-t-929640-view-previous.html

Ich bin mir nur nicht sicher ob der vom Prinzip das gleiche Problem hatte wie ich.

</Edit>

----------

## forrestfunk81

Wenn ich das richtig verstanden habe, benötigst du DHCP nur am WLan Access Point und nicht am kabelgebundenen eth0. 

Dann kannst du für eth0 auch eine statische IP Adresse vergeben und damit startet eth0 auch unabhängig davon, ob eine Gegenstelle da ist oder nicht. Die Gegenstelle zu eth0 muss dann natürlich auch mit passendem Setup konfiguriert werden. Dein WLan / HostAPD Setup brauchst du dabei nicht zu ändern.

----------

## alexander_ro

Ja das hast Du richtig verstanden wlan0 mit dhcpd (Server) und eth0 mit dhcpcd (Client).

Das würde Theoretisch gehen ist aber extrem unpraktisch. Weil man dann jedes mal den Notebook erst wieder umkonfigurieren müsste. Der liefert per DHCP die IP-Adresse an die diversen Platinchen (Raspis und Co.) die da angesteckt werden. Die erwarten alle als default eine IP-Adresse per DHCP.

<Edit>

Mir ist da noch was eingefallen. Das würde sicher auch nicht funktionieren weil der ja beim start des dhcpd ohne eth0 die Fehlermeldung ausgibt das der Carrier fehlt. Da reicht keine statische IP-Adresse Carrier gibt es nur wenn am anderen Ende ein aktiver Switch oder Rechner hängt. Das heißt sollte man mal einen Rechner starten und den Switch später einschalten hätte der Rechner nie einen laufenden dhcpd damit würde der ganze Rest vom Netz auch nicht gehen weil der dhcpd den Clients keine Adressen geben würde. Man muss also beim Hochfahren eines Netzwerks exakt auf die Reihenfolge achten in der man die Komponenten einschaltet sonst geht es nicht. Klingt für mich wieder wie IT zu Fuß ...

Kann jeder halte wie er will ich finde das unpraktisch.

</Edit>

----------

## pietinger

Meiner Meinung nach ist das "need net" der große Unsinn.

Ein dhcp-daemon hat die Aufgabe Adressen zu vergeben ... wenn jemand da ist der (eine) Adresse(-n) braucht; wenn nicht dann nicht. Ein dhcpd hat nunmal keine Abhängigkeit aufs Netz - wenn überhaupt ist es eher umgekehrt. Im Gegensatz natürlich zu einem dhcpcd.

----------

## alexander_ro

Ich weiß jetzt nicht genau was "need net" macht. Net ist ja mit wlan0 da. Der apache wird ja auch nicht gestartet der ist aber sogar mit dem loopback lo als Netzwerk für eine lokale Entwicklungsumgebung gut zu verwenden. Sshd wird dagegen schon gestartet und funktioniert mit wlan0 dann Problemlos. Genau genommen ist ja selbst mit lo ein Netzwerk da. Deshalb weiß ich nicht was man unter "need net" verstehen soll.

----------

## ChrisJumper

 *pietinger wrote:*   

> Meiner Meinung nach ist das "need net" der große Unsinn.
> 
> Ein dhcp-daemon hat die Aufgabe Adressen zu vergeben ... wenn jemand da ist der (eine) Adresse(-n) braucht; wenn nicht dann nicht. Ein dhcpd hat nunmal keine Abhängigkeit aufs Netz - wenn überhaupt ist es eher umgekehrt. Im Gegensatz natürlich zu einem dhcpcd.

 

Das Stammt noch auch Zeiten vor dem WLAN. Es folgt dem Gedanken, das wenn das Netzwerk noch nicht bereit ist, braucht man auch keinen Netzwerkdienst zu starten. Weil ohne Netzwerk, braucht man zum Beispiel auch nicht den Apache-Server zu starten (gut localhost mal außen vor gelassen.).

Aber selbst da waren Programme eher auf dem System als Programm/Skript und nicht als PHP Anwendungen auf einem Apache Server auf einem lokalen Netzwerk-Socket.

Die Need-Zeile ist ja dafür da, das der Apache Server zum Beispiel nicht startet, bevor die Netzwerk-Adresse zugewiesen wurde und er somit auf einer alten oder falschen IP lauscht.

Bei einem Server will man eher nicht das jemand heimlich einfach eine WLAN hinzufügt und das dann an der Firewall oder dem Netzwerk vorbei Verbindungen aufbaut.

In etwa deswegen sind leider auch Fax-Geräte bei Angreifern recht beleibt. Nicht nur weil die oft Dokumente aus dem Unternehmen kopieren dürfen, sondern auch noch ein Modem haben mit dem man die Daten raus tragen könnte und zudem noch als Drucker im WLAN oder LAN hängen. Leider ist der Fax oder Modem-Part oft veraltete Software.

alexander_ro

Das Problem war ja das der DHCP Server den du verwendest, Probleme hat nur auf einem Interface zu laufen und das andere aus zu lassen. Weil es immer auf den 0.0.0.0 ern laufen will. Eigentlich auch kein Problem wenn dein DHCP dann so eingerichtet ist das er nur bestimmte MAC Adressen bei Klienten verwendet oder die IP-Range und Subnetzwerke sich nicht kreuzen.

So könnte dann auch die Fritzbox 192.168.52.x Adressen verteilen und dein Raspi 192.1682.24.x Adressen (oder man macht es über andere Subnetzmasken). Wenn du dann nur bestimmte Mac-Adressen (wobei die ändern sich ja auch oft bei Smartphones), kann man das auf bestimmte Smart-Devices begrenzen. Aber durch den WLAN-Kram kannst du die Netze halt eh trennen. Zumindest DNSmasq kann das da könntest du dann einfach sagen alles was über WLAN0 rein kommt bekommt eine Adresse aus dem WLAN-Pool.

Dann müsstest du aber auch noch die Routing-Infos anpassen und es ist ein bisschen komplizierter***. Es hängt halt immer davon ab was genau du machen möchtest und wie stark die Netze letztlich voneinander getrennt werden sollen und ob man zum Beispiel zwei physische Leitungen für alle bündelt oder jede einzelne Leitung bestimmten Services über bestimmten IP-Adressen reserviert, nur um mal ein einfaches Beispiel zu nehmen.

Edit:*** Ah ich war bei dem Punkt ja schon. Du wolltest ja nur eine Adresse zuweisen und machst über den WLAN Schritt kein Routing. Normalfall ist es halt das ein WLAN halt auch Internet bereit stellt! ;D

----------

## alexander_ro

Auch ohne WLAN ist das Unsinn. Man beschneidet mit einem Dummen Script die sehr viel höherwertige Funktion von Anwendungen. Um es noch einmal zu sagen weil es scheinbar hier gerne übersehen wird. Weder der dhcpd noch der apache haben ein Problem damit. Nur die boot Scripte habe ein Problem damit. Das need net fordert keine Netzwerkadresse sondern einen Carrier. Der Unterschied könnte nicht größer sein. Ich kann mich an keinen einzigen Fall erinnern in dem der apache mit sich im laufenden Betrieb ändernden IP-Adressen nicht hätte umgehen können. Deshalb beschneidet man die Besseren Lösungen in den Anwendungen. Die Scripte sind im Vergleich zur Anwendung Dumm das soll nichts über die Programmierer aussagen. Es ist halt ein Start/Stop Script das muss nicht mehr tun.

Auch für die Sicherheit ist das ein Null Runde. Wenn ich auf einem Server ein WLAN einfügen will brauche ich dazu Root Zugriff. Einen Root User hält need net nicht auf.

Nein der DHCP-Server den ich verwende hat kein Problem. Der kann nichts dafür das ein boot Script den Start verhindert.

Es ist nicht ganz korrekt das es über eth0 kein Internet gibt. Es gibt es dort nicht dauerhaft eben nur dann wenn an eth0 der Notebook hängt. Der stellt dann über sein WLAN die Internetverbindung her. Damit kann man dann z.B. Gentoo Updates installieren. Das funktioniert alles so. Nur wenn an eth0 nichts hängt der dhcpd und der apache leider nicht mehr gestartet werden. Dafür können aber die Anwendungen nicht.

<Edit>

Ich habe jetzt die Scripte für apache und dhcpd mit anderem Namen kopiert und dann die Orginale aus dem Runlevel entfernt und die abgeänderten in den Runlevel eingefügt. So starten jetzt die beiden von mir benötigten Dienste auch ohne eth0. Das sollte auch bei einem Update nicht gleich kaputt gehen. Praktisch das openrc einem auch eigene Scripte einbauen lässt. Ich muss halt nun ab und zu mit einem diff prüfen ob sich das Original in mehr als "need net" Unterscheidet.

In conf.d hat ja so schon fast jedes Programm eine Datei um Einstellungen zu speichern. Vielleicht wäre es praktisch wenn da festlegen könnte was für die einzelnen Programme "need net" bedeutet und nicht auf den Carrier prüfen sondern ob das Device up ist und eine IP-Adresse hat. Wobei ich immer noch der Meinung bin man sollte die Dienste starten und dann diesen die Entscheidung überlassen. Die wissen was sie brauchen und können das besser regeln als ein Start/Stop Script.

Noch eine frage am Rande: kann es sein das eine Netzwerkschnittstelle mit statischen IP-Adressen automatisch gestartet wird auch wenn die nicht in einem Runlevel enthalten ist?

</Edit>

----------

