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