前から気になっていたのですが、自宅ネットワーク内でFreeBSD OSを新規インストールしたり、長期間使っていなかったテストマシンを久しぶりに起動したりすると、普段使いのたまたま電源が落ちているマシンに割り振られているIPと重複するIPアドレスを取ってしまうことがあります。というか、リース時間の値が不適切なのか、なぜか DHCPサーバーが、常用しているIPアドレスを割り当ててしまうことがあります。
電源が落ちているWindows マシンをその時に起動すれば、Windowsに別のIPアドレスが割り振られて解決するのですが、正直なところ、常用しているマシンのIPアドレスを変更するのには抵抗があります。できればテストマシンや新OSが別のIPアドレスに逃げて欲しい。常用IPアドレスを奪取したテストマシンを電源OFFして、常用マシンを起動。これで、レギュラーIPアドレスを取り戻すことが出来ました。
ここまでは、いいのですが、再度テストマシンを起動すると、別のアドレスに切り替わらなくて、再度レギュラーIPアドレスをサーバーに要求して、なぜか DHCP サーバーが重複IPアドレスを割り振ってしまいます。当然、両方のマシンには IPアドレスが重複しているというメッセージが表示されますが、どちらもIPアドレスを解放しようとしません。
悪いのはDHCPDなのですけど、特定のMACアドレスに対してスタティックにIPアドレスを割り振るように、コンフィグし直すのも面倒。
Windows なら、
ipconfig /renew
で別アドレスを取り直しますが、FreeBSD の DHCP クライアントは、別のIPアドレスを取り直すオプションが無いように見えます。
# /etc/rc.d/dhclient restart em0
とやれば、dhclient の停止と再起動はできるのですが、IPアドレスは変更されません。単にIPアドレスを再取得するだけ。FreeBSD OSを再起動しても、重複しているIPアドレスを取得してしまいます。
さて、どうしたものか。
OSをリブートしても、同じアドレスを取りに行こうとするので、停止前のIPアドレスはどこかに記録されているはず。一般的には、/var/run や /var/db、/var/cache あたりのはず。
検索してみたところ、/var/db の下に、アクセス権が全て消されているファイルが見つかりました。
/var/db # ll ---------- 1 root wheel 926 Aug 29 23:04 dhclient.leases.em0
中を見てみたら、dhcp サーバーから割り当てられたアドレスなどの情報が書かれていました。
これを消した後、OSを再起動すれば良さそう。
dhclient がプロセス停止時にファイルに情報を書き込むかもしれないので、念のためにdhclient を停止した後、ファイルを消して FreeBSD OS を再起動したところ、無事に新しいIPアドレスを取りました。
FreeBSD の場合、DHCPサーバーから割り当てられるIPアドレスが重複していて、新しいIPアドレスが欲しい場合は、
- /var/db/dhclient.leases.<インタフェース名> ファイルを消した後、ネットワーク または OSを再起動する
のが簡単なようです。