Назад | Перейти на главную страницу

DHCP: регистрация объявлений хоста в файле журнала

В настоящее время я использую сервер 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. Я думаю, что то, что вы ищете в файлах журнала, там присутствует.