[gelöst] systemd startet dnsmasq zu früh

Einrichten des lokalen Netzes, Verbindung zu anderen Computern und Diensten.
Antworten
Benutzeravatar
smutbert
Beiträge: 6407
Registriert: 24.07.2011 13:27:39
Wohnort: Graz

[gelöst] systemd startet dnsmasq zu früh

Beitrag von smutbert » 02.12.2017 22:08:47

Hallo,


weil es in der Manpage nach einem möglichen Sicherheitsgewinn klingt, habe ich bei dnsmasq die Option »bind-interfaces« aktiviert, die wohl mit großer Sicherheit verhindern soll, dass neu hinzugekommene Netzwerkinterfaces bedient werden.

Das setzt dann aber natürlich voraus, dass die gewünschten Interfaces bereits konfiguriert sind und das bekomme ich nicht hin. Was ich versucht habe ist »/etc/systemd/system/dnsmasq.service.d/after-online.conf« anzulegen mit

Code: Alles auswählen

[Unit]
Wants=network-online.target
After=network.target network-online.target
was aber rein gar nichts bringt, auch das network-online.target wird zu früh erreicht. (network-online.target wird laut Logs ungefähr 1 Sekunde bevor das Netzwerkinterface konfiguriert wurde erreicht und gleich darauf scheitert dnsmasq mit »dnsmasq: unknown interface«.)

Provisorisch habe ich mir zusätzlich mit

Code: Alles auswählen

[Service]
Restart=always
RestartSec=2
beholfen, aber das ist ja keine echte Lösung. (scientific ich schiele in deine Richtung ☺)

Die Netzwerkinterfaces werden mit systemd-networkd konfiguriert.


lg smutbert
Zuletzt geändert von smutbert am 11.01.2018 23:20:21, insgesamt 3-mal geändert.

rendegast
Beiträge: 14937
Registriert: 27.02.2006 16:50:33
Lizenz eigener Beiträge: MIT Lizenz

Re: systemd startet dnsmasq zu früh

Beitrag von rendegast » 04.01.2018 06:20:33

Du könntest Dir per 'systemd-analyze plot' einen generellen Spätstarter aussuchen.



Oder per [Timer] einen konstruieren, spaet.target:

Code: Alles auswählen

[Unit]
StopWhenUnneded=yes
spaet.timer:

Code: Alles auswählen

[Unit]
PartOf=multi-user.target

[Timer]
# OnActiveSec=, OnBootSec= war nicht zufriedenstellend
OnStartupSec=25s
Unit=spaet.target

[Install]
WantedBy=multi-user.target

Der entsprechende Service muß modifiziert werden.
Da es die [Install]-Sektion betrifft, nur per Kopie in /etc/systemd/system/,
Bsp. /etc/systemd/system/spaeter-dienst.service:

Code: Alles auswählen

...
[Install]
#WantedBy=multi-user.target
WantedBy=spaet.target
Kontrolle wiederum per 'systemd-analyze plot'.
mfg rendegast
-----------------------
Viel Eifer, viel Irrtum; weniger Eifer, weniger Irrtum; kein Eifer, kein Irrtum.
(Lin Yutang "Moment in Peking")

Benutzeravatar
smutbert
Beiträge: 6407
Registriert: 24.07.2011 13:27:39
Wohnort: Graz

Re: systemd startet dnsmasq zu früh

Beitrag von smutbert » 04.01.2018 20:39:41

Spät(er)starter gibt es keinen brauchbaren – nur gelegentlich cron.daily, sonst ist dnsmasq der letzte Dienst.

Das mit dem Timer ist aber eine Idee – nach meinen Beobachtungen sollte bereits eine Sekunde Verzögerung (gegenüber network.target) zuverlässig genügen.
Warum du ein eigenes Target vorschlägst, muss ich allerdings erst noch durchschauen (ich hätte gedacht, dass ein/der timer dnsmasq direkt starten könnte), aber da komme ich schon noch drauf. Danke.

scientific
Beiträge: 2999
Registriert: 03.11.2009 13:45:23
Lizenz eigener Beiträge: Artistic Lizenz
Kontaktdaten:

Re: systemd startet dnsmasq zu früh

Beitrag von scientific » 04.01.2018 21:13:03

Was ist mit

Code: Alles auswählen

 Requires=network-online.target
statt dem Wants?
Oder versuch als Abhängigkeit

Code: Alles auswählen

 Wants=NetworkManager-wait-online.service
After=NetworkManager-wait-online.service 
?
dann putze ich hier mal nur...

Eine Auswahl meiner Skripte und systemd-units.
https://github.com/xundeenergie

auch als Debian-Repo für Testing einbindbar:
deb http://debian.xundeenergie.at/xundeenergie testing main

Benutzeravatar
smutbert
Beiträge: 6407
Registriert: 24.07.2011 13:27:39
Wohnort: Graz

Re: systemd startet dnsmasq zu früh

Beitrag von smutbert » 04.01.2018 21:59:36

Hab ich aktuell drinstehen - der meiner Meinung nach (von mir) nur unelegant umgehbare Teil des Problems besteht darin, dass network-online.target erreicht wird, bevor das Netzwerkinterface, das dnsmasq bedienen soll, konfiguriert wird bzw. ist:

Code: Alles auswählen

Jan 04 11:03:31 localhost kernel: ath9k 0000:02:00.0 wlp3s0: renamed from wlan0
Jan 04 11:03:31 localhost systemd-networkd[462]: wlp3s0: Renamed to wlan0
Jan 04 11:03:31 localhost systemd-networkd[462]: wlan0: Renamed to wlp3s0
Jan 04 11:03:32 localhost dnsmasq[478]: dnsmasq: unknown interface wlp3s0
Jan 04 11:03:32 localhost dnsmasq[478]: unknown interface wlp3s0
Jan 04 11:03:32 localhost systemd[1]: dnsmasq.service: Control process exited, code=exited status=2
Jan 04 11:03:32 localhost systemd[1]: Failed to start dnsmasq - A lightweight DHCP and caching DNS server.
Jan 04 11:03:32 localhost systemd[1]: dnsmasq.service: Unit entered failed state.
Jan 04 11:03:32 localhost systemd[1]: dnsmasq.service: Failed with result 'exit-code'.
Jan 04 11:03:32 localhost systemd-networkd[462]: wlp3s0: Configured
Jan 04 11:03:32 localhost systemd-networkd[462]: wlp3s0: Gained carrier
Jan 04 11:03:32 localhost systemd-networkd[462]: wlp3s0: Configured
Jan 04 11:03:37 localhost systemd[1]: Stopped dnsmasq - A lightweight DHCP and caching DNS server.
Jan 04 11:03:37 localhost systemd[1]: Starting dnsmasq - A lightweight DHCP and caching DNS server...
Jan 04 11:03:37 localhost dnsmasq[612]: dnsmasq: syntax check OK.
Jan 04 11:03:37 localhost dnsmasq[622]: started, version 2.76 cachesize 150
Jan 04 11:03:37 localhost dnsmasq[622]: compile time options: IPv6 GNU-getopt DBus i18n IDN DHCP DHCPv6 no-Lua TFTP conntrack ipset auth DNSSEC loop-detect inotify
Jan 04 11:03:37 localhost dnsmasq[622]: DNSSEC validation enabled
und

Code: Alles auswählen

# systemctl status network-online.target
● network-online.target - Network is Online
   Loaded: loaded (/lib/systemd/system/network-online.target; static; vendor preset: enabled)
   Active: active since Thu 2018-01-04 11:03:31 CET; 10h ago
     Docs: man:systemd.special(7)
           http://www.freedesktop.org/wiki/Software/systemd/NetworkTarget

Jan 04 11:03:31 localhost systemd[1]: Reached target Network is Online.
ich darf zusammenfassen:
  • 11:03:31 network-online.target wird erreicht
  • 11:03:31 dnsmasq versucht zu starten und scheitert am unkonfigurierten Interface (?!)
  • 11:03:32 das Netzwerkinterface wird konfiguriert
  • 11:03:37 dnsmasq wird beim zweiten Versuch erfolgreich gestartet
Wieso allerdings kernel und systemd-networkd ganz am Anfang diese Umbenennungsehrenrunde
  1. wlan0 → wlp3s0 (kernel)
  2. wlp3s0 → wlan0 (systemd-networkd)
  3. wlan0 → wlp3s0 (systemd-networkd)
drehen ist mir auch nicht klar, aber ich nehme an, das hat nichts mit meinem Problem zu tun.

network-manager ist nicht installiert.

scientific
Beiträge: 2999
Registriert: 03.11.2009 13:45:23
Lizenz eigener Beiträge: Artistic Lizenz
Kontaktdaten:

Re: systemd startet dnsmasq zu früh

Beitrag von scientific » 08.01.2018 10:29:31

Wie schauts damit aus?

Code: Alles auswählen

systemctl enable systemd-networkd-wait-online.service
Das ist das Pendant zu NetworkManager-wait-online.service.
Das kann allerdings auch zu Verzögerungen beim Booten führen. Da GDM auf eine aufrechte Netzwerkverbindung wartet, damit z.b. Remote-Logins auch möglich sind. Wie da jetzt genau die Abhängigkeit ausschaut, weiß ich auch grad nicht... die müsstest du eventuell manuell rausnehmen, damit der Start des Rechners nicht verzögert wird.


lg scientific

Quelle:
https://www.freedesktop.org/wiki/Softwa ... orkTarget/
dann putze ich hier mal nur...

Eine Auswahl meiner Skripte und systemd-units.
https://github.com/xundeenergie

auch als Debian-Repo für Testing einbindbar:
deb http://debian.xundeenergie.at/xundeenergie testing main

Benutzeravatar
smutbert
Beiträge: 6407
Registriert: 24.07.2011 13:27:39
Wohnort: Graz

Re: systemd startet dnsmasq zu früh

Beitrag von smutbert » 08.01.2018 18:25:03

Das Problem ist die letzten paar Bootvorgänge nicht aufgetaucht, obwohl ich nichts geändert habe. Ich werde systemd-networkd-wait-online.service vorläufig (noch) nicht aktivieren und darauf warten, dass der Fehler wieder auftaucht.

edit:
Nach einem Update habe ich gerade wieder die bekannten Zeilen im Log gefunden. Ich hab gleich ein paar Neustarts gemacht um zu sehen ob der Fehler wieder zuverlässig da ist und er war es.

Dann habe ich systemd-networkd-wait-online.service aktiviert und noch ein paar Neustarts gemacht ohne dass dnsmasq von network-online.target oder systemd-networkd-wait-online.service hat und der Fehler war auch nach wie vor da. Mit der Abhängigkeit von network-online.target ist dnsmasq dann auf Anhieb korrekt gestartet.

Das scheint also tatsächlich die Lösung gewesen zu sein und soweit ich das aus den Logs beurteilen kann dauert der Bootvorgang nun 2 Sekunden länger.

vielen Dank rendegast und scientific

scientific
Beiträge: 2999
Registriert: 03.11.2009 13:45:23
Lizenz eigener Beiträge: Artistic Lizenz
Kontaktdaten:

Re: [gelöst] systemd startet dnsmasq zu früh

Beitrag von scientific » 14.01.2018 10:51:33

network-wait+online.service verzögert den Start von network-online.target bis das Netzwerk eben tatsächlich steht, da es mit Type=oneshot ausgeführt wird.
Daher ist die Bindung an network-online.target korrekt für Dienste, die ein funktionierendes Netzwerk brauchen.

Um es feiner zu granulieren (z. B. benötigt ja gdm in den seltensten Fällen ein stehendes Netzwerk) muss man sich tatsächlich mit den Abhängigkeiten spielen.

Nimm mal bei gdm die Abhängigkeit auf network-online.target raus. Geht dann der Boot wieder schneller?
dann putze ich hier mal nur...

Eine Auswahl meiner Skripte und systemd-units.
https://github.com/xundeenergie

auch als Debian-Repo für Testing einbindbar:
deb http://debian.xundeenergie.at/xundeenergie testing main

Benutzeravatar
smutbert
Beiträge: 6407
Registriert: 24.07.2011 13:27:39
Wohnort: Graz

Re: [gelöst] systemd startet dnsmasq zu früh

Beitrag von smutbert » 14.01.2018 16:07:04

Die Verzögerung ist kein Problem (und gdm, Xorg, wayland, DE/WM sind nicht installiert – ich hab nur mit systemd-analyze verglichen, spüren tue ich nichts von der Verzögerung und wenn, wäre es auch egal).

Antworten