ISC dhcpd で IP アドレスに基いてホスト名を自動設定

AWS EC2 のインスタンスを立ち上げたとき、(AMI によるかもしれませんが)DHCP で付与された IP アドレスに基いて ip-10-11-12-13 のようにホスト名が設定されるのを見て、さすが AWS は不思議なチカラでよくわからんことをしよる、と思いました。

と、思ったら ISC DHCP でも普通にできました。

使用した dhcpd のバージョンは次の通りです。

CentOS 7.0.1406 / dhcp-4.2.5-27.el7.centos.x86_64

man dhcp-eval すると色々でてきます。

dhcpd.conf

log-facility daemon;
not authoritative;

ddns-updates on;
ddns-update-style interim;
ignore client-updates;

subnet 10.1.1.0 netmask 255.255.255.0 {
    default-lease-time          21600;
    max-lease-time              43200;
    range dynamic-bootp         10.1.1.100 10.1.1.200;
    option routers              10.1.1.1;
    option subnet-mask          255.255.255.0;
    option domain-name-servers  10.1.1.10;
    option domain-name          "test";
    option domain-search        "test";
    ddns-domainname             "test";
    ddns-ttl                    3600;

    zone test. {
        primary 10.1.1.10;
    }

    zone 1.1.10.in-addr.arpa. {
        primary 10.1.1.10;
    }

    if not exists host-name {
        option host-name = concat("ip-" , binary-to-ascii(10, 8, "-", leased-address), ".", config-option domain-name);
        ddns-hostname = concat("ip-" , binary-to-ascii(10, 8, "-", leased-address));
    } else {
        option host-name = concat(lcase(option host-name), ".", config-option domain-name);
    }
}

上の設定では・・・

  • クライアントがホスト名を送ってきている場合(仮に oreore とすると)
    • oreore.test というホスト名をクライアントに返します
  • クライアントがホスト名を送ってこない場合
    • ip-10.11.12.13.test のようにリースした IP アドレスに基づいたホスト名を返します

となります。ついでに同じ名前で DDNS でネームサーバに更新もかけます。