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

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

В настоящее время я использую ISC-DHCP server 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, поэтому объявления хостов могут и будут меняться, поэтому я не могу просто посмотреть файл, если у кого-то в сети возникнут проблемы, и узнать его имя.

решение1

Я понял это.

Добавляем следующее в файл 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

решение2

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 для файла, сохранив его вывод где-нибудь, затем проверяя изменения раз в минуту и ​​копируя файл аренды в каталог, где программа сможет анализировать его всякий раз, когда он изменяется.

решение3

ISC DHCPD регистрирует имя клиента, если клиент включает свое имя хоста в запрос DHCP.

Вы не указали, на какой ОС работают ваши клиенты. Клиенты Linux обычно не включают свое имя хоста в запрос DHCP, поэтому вам нужно добавить

send host-name "hostname";

в ваш /etc/dhcp3/dhclient.conf. (Ваш дистрибутив может быть настроен по-другому.)

Клиенты Windows включают имя своего компьютера в DHCP-запрос.

решение4

Просто посмотрите на файл /var/lib/dhcpd/dhcpd.leases. Я думаю, то, что вы ищете в файлах журналов, там присутствует.

Связанный контент