В настоящее время я использую сервер ISC-DHCP v3 на Ubuntu 8.04. Что я пытаюсь сделать, так это записать, кто и когда получил какой IP-адрес.
В настоящее время в файле журнала DHCP вы можете увидеть следующее:
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
Я хотел бы перейти к тому моменту, когда я увидел это или что-то подобное:
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
Мне нужно зарегистрировать хост, который получил IP-адрес, когда (в файле журнала есть отметки времени, но я удалил их для этого сообщения) для исторических целей.
В моем файле dhcpd.conf у меня есть следующее объявление хоста:
host TestPC001 {
hardware ethernet d0:50:56:ac:74:71;
fixed-address 208.x.x.75;
}
Если кто-нибудь знает, как это сделать с помощью DHCP3, это было бы здорово, я открыт для предложений по сторонним приложениям, которые будут делать это. Следует отметить, что файл dhcpd.conf создается динамически с использованием стороннего приложения, которое использует RADIUS, поэтому объявления хоста могут и будут меняться, поэтому я не могу просто посмотреть файл, если есть проблема с кем-то в сети. и получить их имя.
Я понял это.
Добавление следующего в файл 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))));
}
Результатом будет (для наглядности я удалил временные метки):
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
ISC DHCP хранит выделенные аренды в файле (обычно /var/run/dhcp/dhcpd.leases или аналогичный).
Содержимое файла аренды задокументировано:
http://linux.die.net/man/5/dhcpd.leases
и доступен модуль Perl для анализа содержимого файла аренды:
http://search.cpan.org/~cvicente/Text-DHCPLeases-v0.3/lib/Text/DHCPLeases.pm
Вся информация, которую вы ищете, находится в файле аренды, поэтому вы можете легко написать программу для анализа данных и сохранения их где-нибудь для истории. Если вы не хотите делать это в реальном времени, вы, вероятно, можете просто запускать его не реже, чем половину вашего срока аренды, а не чуть меньше (поскольку ожидается, что клиенты продлят свою аренду на полпути).
Я ожидаю, что синтаксический анализ будет настолько легким, что вы можете просто запускать его часто, не беспокоясь. Вы также можете пофантазировать, запустив md5sum в файле, сохранив где-то его вывод, затем проверяя изменения раз в минуту и копируя файл аренды в каталог, где программа может анализировать его всякий раз, когда он изменяется.
Und debian / etch Я приклеил dhcp3 и связал с dnssec. Итак, dhcp отправляет имя хоста клиента для привязки, что обновляет dns-зоны.
Ее я получаю что-то подобное от стоковой Windows XP
# tail -13 /var/lib/dhcp3/dhcpd.leases
lease 10.28.0.155 {
starts 3 2009/07/08 05:14:45;
ends 3 2009/07/08 06:14:45;
cltt 3 2009/07/08 05:14:45;
binding state active;
next binding state free;
hardware ethernet 00:08:54:37:48:a6;
uid "\001\000\010T7H\246";
set ddns-rev-name = "155.0.28.10.in-addr.arpa.";
set ddns-txt = "31b6fa94a1ef1702e6eed6bef3a9fd6f31";
set ddns-fwd-name = "PC18.mydomain.lan";
client-hostname "PC18";
}
И в /var/log/daemon.log
Jul 8 07:14:45 ServerName dhcpd: DHCPOFFER on 10.28.0.155 to 00:08:54:37:48:a6 (PC18) via eth1
Jul 8 07:14:45 ServerName named[12354]: client 127.0.0.1#53673: updating zone 'mydomain.lan/IN': adding an RR at 'PC18.mydomain.lan' A
Jul 8 07:14:45 ServerName named[12354]: client 127.0.0.1#53673: updating zone 'mydomain.lan/IN': adding an RR at 'PC18.mydomain.lan' TXT
Jul 8 07:14:45 ServerName dhcpd: Added new forward map from PC18.mydomain.lan to 10.28.0.155
Jul 8 07:14:45 ServerName named[12354]: client 127.0.0.1#53673: updating zone '0.28.10.in-addr.arpa/IN': deleting rrset at '155.0.28.10.in-addr.arpa' PTR
Jul 8 07:14:45 ServerName named[12354]: client 127.0.0.1#53673: updating zone '0.28.10.in-addr.arpa/IN': adding an RR at '155.0.28.10.in-addr.arpa' PTR
Jul 8 07:14:45 ServerName dhcpd: added reverse map from 155.0.28.10.in-addr.arpa. to PC18.mydomain.lan
Jul 8 07:14:45 ServerName dhcpd: Wrote 76 leases to leases file.
Jul 8 07:14:45 ServerName dhcpd: DHCPREQUEST for 10.28.0.155 (10.28.0.1) from 00:08:54:37:48:a6 (PC18) via eth1
Jul 8 07:14:45 ServerName dhcpd: DHCPACK on 10.28.0.155 to 00:08:54:37:48:a6 (PC18) via eth1
Jul 8 07:16:07 ServerName dhcpd: DHCPINFORM from 10.28.0.155 via eth1
Jul 8 07:16:07 ServerName dhcpd: DHCPACK to 10.28.0.155 (00:08:54:37:48:a6) via eth1
Поэтому я предлагаю вам настроить DNSSEC: Google для DNSSEC Howto
ISC DHCPD регистрирует имя клиента, пока клиент включает свое имя хоста в запрос DHCP.
Вы не упоминаете, какую ОС используют ваши клиенты. Клиенты Linux обычно не включают свое имя хоста в запрос DHCP, поэтому вам нужно добавить
send host-name "hostname";
на ваш /etc/dhcp3/dhclient.conf
. (Ваш дистрибутив может быть настроен иначе.)
Клиенты Windows включают имя своего компьютера в запрос DHCP.
Просто посмотрите файл /var/lib/dhcpd/dhcpd.leases. Я думаю, что то, что вы ищете в файлах журнала, там присутствует.