DHCP: ログファイルにホスト宣言を記録する

DHCP: ログファイルにホスト宣言を記録する

現在、Ubuntu 8.04 で ISC-DHCP サーバー v3 を実行しています。私がやろうとしているのは、誰がいつどの 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 を実行し、その出力をどこかに保存しておき、1 分ごとに変更をチェックし、リース ファイルをディレクトリにコピーして、変更があったときにプログラムが解析できるようにすることもできます。

答え3

ISC DHCPD は、クライアントが DHCP 要求にホスト名を含めている限り、クライアント名をログに記録します。

クライアントがどのOSを実行しているかは記載されていません。Linuxクライアントは通常、DHCPリクエストにホスト名を含めないので、

send host-name "hostname";

/etc/dhcp3/dhclient.conf。(ディストリビューションによって設定が異なる場合があります。)

Windows クライアントは、DHCP 要求にコンピュータ名を含めます。

答え4

/var/lib/dh​​cpd/dhcpd.leases ファイルを見てください。ログ ファイルで探しているものがそこに存在すると思います。

関連情報