
Ich verwende derzeit den ISC-DHCP-Server v3 auf Ubuntu 8.04. Ich versuche zu protokollieren, wer wann welche IP-Adresse erhalten hat.
Derzeit können Sie in der DHCP-Protokolldatei Folgendes sehen:
DHCPDISCOVER from d0:50:56:ac:74:71 via eth0
DHCPOFFER on 208.x.x.75 to d0:50:56:ac:74:71 via eth0
DHCPREQUEST for 208.x.x.75 (172.18.1.2) from d0:50:56:ac:74:71 via eth0
DHCPACK on 208.x.x.75 to d0:50:56:ac:74:71 via eth0
Ich möchte zu dem Punkt kommen, an dem ich dies oder etwas Ähnliches sehe:
DHCPDISCOVER from d0:50:56:ac:74:71 via eth0
DHCPOFFER on 208.x.x.75 to d0:50:56:ac:74:71 via eth0
DHCPREQUEST for 208.x.x.75 (172.18.1.2) from d0:50:56:ac:74:71 via eth0
DHCPACK on 208.x.x.75 to d0:50:56:ac:74:71 (TestPC001) via eth0
Ich muss aus historischen Gründen den Host protokollieren, der die IP-Adresse wann erhalten hat (die Protokolldatei enthält Zeitstempel, die ich aber für diesen Beitrag entfernt habe).
In meiner Datei dhcpd.conf habe ich die folgende Host-Deklaration:
host TestPC001 {
hardware ethernet d0:50:56:ac:74:71;
fixed-address 208.x.x.75;
}
Wenn jemand weiß, wie das mit DHCP3 geht, wäre das großartig. Ich bin offen für Vorschläge zu Drittanbieter-Apps, die das können. Eine Sache ist zu beachten: Die Datei dhcpd.conf wird dynamisch mithilfe einer Drittanbieter-App generiert, die RADIUS verwendet. Die Host-Deklarationen können sich also ändern und werden sich auch ändern. Ich kann mir also nicht einfach die Datei ansehen, wenn es ein Problem mit jemandem im Netzwerk gibt, und seinen Namen herausfinden.
Antwort1
Ich habe es herausgefunden.
Hinzufügen des Folgenden zur Datei dhcpd.conf
if known {
log (info, concat ("HOSTNAME: ", host-decl-name, " on ",binary-to-ascii (10, 8, ".", leased-address)," at ", binary-to-ascii (16, 8, ":", substring (hardware, 1, 6))));
}
Ergibt Folgendes (ich habe der Übersichtlichkeit halber die Zeitstempel entfernt):
HOSTNAME: TestPC001 on 208.x.x.75 at d0:50:56:ac:74:71
DHCPDISCOVER from d0:50:56:ac:74:71 via eth0
DHCPOFFER on 208.x.x.75 to d0:50:56:ac:74:71 via eth0
DHCPREQUEST for 208.x.x.75 (172.18.1.2) from d0:50:56:ac:74:71 via eth0
DHCPACK on 208.x.x.75 to d0:50:56:ac:74:71 via eth0
Antwort2
ISC DHCP speichert die zugewiesenen Leases in einer Datei (normalerweise /var/run/dhcp/dhcpd.leases oder ähnlich).
Der Inhalt der Leasingdatei wird dokumentiert:
http://linux.die.net/man/5/dhcpd.leases
und es steht ein Perl-Modul zum Parsen des Inhalts der Leases-Datei zur Verfügung:
http://search.cpan.org/~cvicente/Text-DHCPLeases-v0.3/lib/Text/DHCPLeases.pm
Alle gesuchten Informationen befinden sich in der Lease-Datei, sodass Sie problemlos ein Programm schreiben können, um die Daten zu analysieren und sie für die Historie irgendwo zu speichern. Wenn Sie dies nicht in Echtzeit tun möchten, können Sie es wahrscheinlich einfach mindestens die Hälfte Ihrer Lease-Zeit abzüglich etwas ausführen (da von den Clients erwartet wird, dass sie ihren Lease nach der Hälfte der Zeit verlängern).
Ich gehe davon aus, dass die Analyse so einfach ist, dass Sie sie ohne Bedenken einfach häufig ausführen können. Sie könnten es auch etwas raffinierter gestalten, indem Sie md5sum auf die Datei anwenden, die Ausgabe irgendwo speichern, dann einmal pro Minute nach Änderungen suchen und die Lease-Datei in ein Verzeichnis kopieren, wo ein Programm sie bei jeder Änderung analysieren kann.
Antwort3
ISC DHCPD protokolliert den Clientnamen, solange der Client seinen Hostnamen in der DHCP-Anfrage angibt.
Sie erwähnen nicht, welches Betriebssystem Ihre Clients verwenden. Linux-Clients geben ihren Hostnamen im Allgemeinen nicht in die DHCP-Anforderung ein. Sie müssen daher Folgendes hinzufügen:
send host-name "hostname";
zu Ihrem /etc/dhcp3/dhclient.conf
. (Ihre Distribution kann anders konfiguriert sein.)
Windows-Clients geben ihren Computernamen in die DHCP-Anfrage ein.
Antwort4
Schauen Sie sich einfach die Datei /var/lib/dhcpd/dhcpd.leases an. Ich denke, das, wonach Sie in den Protokolldateien suchen, ist dort vorhanden.