[gelöst] dhcpcd soll dem rsyslogd den log-server mitteilen

Einrichten des lokalen Netzes, Verbindung zu anderen Computern und Diensten.
Antworten
cosmac
Beiträge: 4576
Registriert: 28.03.2005 22:24:30

[gelöst] dhcpcd soll dem rsyslogd den log-server mitteilen

Beitrag von cosmac » 15.11.2011 15:55:39

hi,

ein Rechner bekommt seine Netzwerk-config ganz normal per dhcp, u.a. die Adresse des zentralen log-Servers. Wie sagt man dem rsyslogd, dass er ab sofort diesen log-Server nutzen soll?

Da als dhcp-Client der Debiandhcpcd benutzt wird, könnte man theoretisch im Script /etc/dhcpcd.sh die /etc/rsyslog.conf neu schreiben und den rsyslogd neu starten. Das scheitert aber schon daran, dass der log-Server nicht im /var/lib/dhcpcd/dhcpcd-eth0.info auftaucht, außerdem ist /etc read-only und überhaupt gibt es doch bestimmt eine elegantere Lösung?

Bonus-Frage: kann man eigentlich rausfinden, welche Daten der dhcp-Server wirklich verteilt? Zwar funktioniert das alles für Netzwerkdrucker und für statische Debian-Clients, aber Vertrauen ist gut...
Zuletzt geändert von cosmac am 17.11.2011 12:18:07, insgesamt 1-mal geändert.
Beware of programmers who carry screwdrivers.

Cae
Beiträge: 6349
Registriert: 17.07.2011 23:36:39
Wohnort: 2130706433

Re: dhcpcd soll dem rsyslogd den log-server mitteilen

Beitrag von Cae » 16.11.2011 08:48:17

cosmac hat geschrieben:Bonus-Frage: kann man eigentlich rausfinden, welche Daten der dhcp-Server wirklich verteilt? Zwar funktioniert das alles für Netzwerkdrucker und für statische Debian-Clients, aber Vertrauen ist gut...
Auf dem DHCP-Server oder einem Gateway dahin:

Code: Alles auswählen

# tcpdump -vv 'port 53'
. Bei der pseuedo-RegEx hinten bin ich mir nicht sicher, da steht aber was in man 7 pcap-filter (?). Steht als Verweis in der Manpage von tcpdump drin.

Zum ro-Problem wäre vielleicht ein Symlink in eine rw-Umgebung die Lösung (/var/run/ oder so).

Gruß Cae
If universal surveillance were the answer, lots of us would have moved to the former East Germany. If surveillance cameras were the answer, camera-happy London, with something like 500,000 of them at a cost of $700 million, would be the safest city on the planet.

—Bruce Schneier

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

Re: dhcpcd soll dem rsyslogd den log-server mitteilen

Beitrag von rendegast » 16.11.2011 10:27:42

Cae hat geschrieben: # tcpdump -vv 'port 53'
. Bei der pseuedo-RegEx hinten bin ich mir nicht sicher, da steht aber was in man 7 pcap-filter (?). Steht als Verweis in der Manpage von tcpdump drin.
tcpdump + Debiandhcpdump ?

Netter wäre eine Art Abfragemodus für dhclient oder dhcping.



cosmac hat geschrieben: Das scheitert aber schon daran, dass der log-Server nicht im /var/lib/dhcpcd/dhcpcd-eth0.info auftaucht, außerdem ist /etc read-only und überhaupt gibt es doch bestimmt eine elegantere Lösung?
Beim Debianisc-dhcp-client wird es per default nicht abgefragt:

Code: Alles auswählen

request subnet-mask, broadcast-address, time-offset, routers,
	domain-name, domain-name-servers, domain-search, host-name,
	netbios-name-servers, netbios-scope, interface-mtu,
	rfc3442-classless-static-routes, ntp-servers;
Die entsprechende Option hieße hier 'log-servers'.
Dagegen in Debiandhcpcd taucht im ganzen Paket kein String "log.*server" auf.

Code: Alles auswählen

$ cat /etc/default/rsyslog 
# Options for rsyslogd
# -m 0 disables 'MARK' messages (deprecated, only used in compat mode < 3)
# -r enables logging from remote machines (deprecated, only used in compat mode < 3)
# -x disables DNS lookups on messages received with -r
# -c compatibility mode
# See rsyslogd(8) for more details
RSYSLOGD_OPTIONS="-c4 -f /var/lib/rsyslog/my_rsyslog.conf"
oder wegen der include-Möglichkeit

Code: Alles auswählen

#
# Include all config files in /etc/rsyslog.d/
#
$IncludeConfig /etc/rsyslog.d/*.conf
würde wohl das Neuschreiben einer einzeiligen remote.conf reichen + reload.

Zum Einarbeiten kann ja /etc/dhcp/dhclient-exit-hooks.d/ntpdate als Vorlage dienen:

Code: Alles auswählen

NTPDATE_CONF=/etc/default/ntpdate
NTPDATE_DHCP_CONF=/var/lib/ntpdate/default.dhcp


ntp_servers_setup_remove() {
	rm -f $NTPDATE_DHCP_CONF
}


ntp_servers_setup_add() {
	if [ -e $NTPDATE_DHCP_CONF ] && [ "$new_ntp_servers" = "$old_ntp_servers" ]; then
		return
	fi

	if [ -z "$new_ntp_servers" ]; then
		ntp_servers_setup_remove
		return
	fi

	tmp=$(mktemp "$NTPDATE_DHCP_CONF.XXXXXX") || return
	chmod --reference=$NTPDATE_CONF $tmp
	chown --reference=$NTPDATE_CONF $tmp

	(
	  echo "# NTP server entries received from DHCP server"
	  echo "NTPSERVERS='$new_ntp_servers'"
	) >>$tmp
	
	mv $tmp $NTPDATE_DHCP_CONF
}


ntp_servers_setup() {
	case $reason in
		BOUND|RENEW|REBIND|REBOOT)
			ntp_servers_setup_add
			;;
		EXPIRE|FAIL|RELEASE|STOP)
			ntp_servers_setup_remove
			;;
	esac
}


ntp_servers_setup
mfg rendegast
-----------------------
Viel Eifer, viel Irrtum; weniger Eifer, weniger Irrtum; kein Eifer, kein Irrtum.
(Lin Yutang "Moment in Peking")

cosmac
Beiträge: 4576
Registriert: 28.03.2005 22:24:30

Re: dhcpcd soll dem rsyslogd den log-server mitteilen

Beitrag von cosmac » 17.11.2011 12:16:45

Vielen Dank! Das waren gleich mehrere entscheidende Tipps, vor allem, dass der Client den log-server explizit anfordern muss; und wenn man die Option dann noch mit _ statt - schreibt, funktioniert es auch... Ich war auf dem Holzweg, dass dhcpcd und rsyslog spezielle Optionen für diesen Zweck haben müssten, schließlich braucht das doch jeder jeden Tag ;)

$IncludeConfig hätte ich auch übersehen, damit wird es trotz read-only-etc auch "elegant genug". Der rsyslog meckert auch nicht, falls die include-Datei noch nicht existiert, also so weit hat die Kiste die erste Nacht gut überstanden. Zum Ausgleich braucht der rsyslogd anscheinend einen restart statt reload, der dhcpcd übernimmt den hostname nicht mehr vom Server und logrotate funktioniert nicht mehr (WTF?), aber das sind ja Schönheitsfehler :D
Beware of programmers who carry screwdrivers.

Antworten