ISC dhcpdを使って固定IPアドレスの割り当てを簡単にし、bindにDDNSも設定する

今まで、/etc/hostsに記入して、ホスト名の解決をしてきたのだが、
仮想マシンが多いのでマシン数が多いのもあって、
それぞれのマシンで同期するのが面倒になっていた。

今回、三菱電機 MITSUBISH ME R7150-100というHP 9000/715/100のOEM機を
いただいたので、それでNetBSD/hp700を動かしてみるのにdhcpdが
必要になった。そこで、かねてから思っていた、以下のようなことを
実施することにした。
ここでは、最初の2つのみ記載する。

* MACアドレスを見て、いつも同じIPアドレスをDHCPで振り出す。
* bindのDDNS機能を使って、HDCPで振ったホスト名とIPアドレスを正引き逆引きできるようにする。
* netbootさせるためのBOOTPの設定

DHCPサーバー、DNSサーバー(bind)を動かすのは、NetBSD/cobalt 5.2とする。
他のNetBSD 5.2でも全く同じである。


# ISC DHCPDで固定IPアドレスの割り当てをする。

## 自分を固定IPアドレスを使うように設定する。
これは私の場合には改めて実施した訳ではないのだが、
DNSサーバーと言うことで、自分自身のIPアドレス等を
DHCPで設定するのは楽しくないので、/etc/rc.confに以下のように
設定しておく。

hostname="nickel.elements.tetera.org"
ifconfig_tlp0="inet 192.168.81.249 netmask 0xffffff00"
defaultroute="192.168.81.1"

本当は、/etc/ifconfig.tlp0や/etc/mygate、/etc/mynameを使うのだろうが、
見通しが悪くなるような気がして、私は使っていない。
これらを使うのも、今回の設定ができれば、機会はなくなってしまうが。

この辺が分からなければ、
http://www.netbsd.org/docs/network/index.html
を読めば良いと思う。


## /etc/rc.confにでDHCPDを起動するように設定する。

dhcpd=YES
dhcpd_flags="-q tlp0"

と/etc/rc.confに追記する。NetBSD/cobalt 5.2を動かしているCobalt Qube 2は
プライマリとセカンダリの2つのイーサネット・ポートを持っている。
私はプライマリにしかUTPケーブルをつないでいないので、
プライマリであるtlp0を使うように指定した。


## 空の/var/db/dhcpd.leasesを用意する。
DHCPDの起動には、/var/db/dhcpd.leasesが必要であり、ないとエラーが出て
起動できない。

# touch /var/db/dhcpd.leases

として、空(サイズ0)のファイルを作っておく。

## /etc/dhcpd.confを作成する。
/etc/dhcpd.confはデフォルトでは存在しないようである。
間違って/etc/dhcpcd.confに追記しないこと。
私は最初困惑した。

# vi /etc/dhcpd.conf

として、以下のような内容を入力する。
#を付けてコメントを付けておくので、そこは入力しなくても良い。

# DHCPで割り当てるホスト名のドメイン名を指定する。
# bindの方と合わせておかないといけない。
option domain-name "elements.tetera.org";

# DDNSを有効にする。
ddns-updates on;
# DDNSでbindに登録しに行くようにする。
ddns-update-style interim;
# 固定IPアドレス(下のfixed-address)の際にもDDNSに登録しに行くようにする。
update-static-leases on;

# 標準のIPアドレスのリース時間。適当に変えたら良い。
default-lease-time 604800;
max-lease-time 604800;

# HP 900/715/100のnetbootでBOOTPを使うので有効にする。
allow bootp;

# DHCPで配信するDNSサーバーのIPアドレスを指定する。
option domain-name-servers 192.168.81.249;

# 192.168.81.0/24が我が家のネットワークなので、それを指定する。
subnet 192.168.81.0 netmask 255.255.255.0 {
# 固定IPアドレスは192.168.81.101以降にするので、その前は動的IPアドレス
# 割り当てをするようにする。fixed-addressの値がこのrangeの範囲に
# 入っているとエラーになる(DHCPDは起動はするが)。
range 192.168.81.2 192.168.81.100;
# DHCPで配信するサブネットマスクを指定する。
option subnet-mask 255.255.255.0;
# DHCPで配信するデフォルトルーター(デフォルトゲートウェイ)を指定する。
option routers 192.168.81.1;
# DDNSに登録する時に使うドメイン名を指定する。
# Windowsのようにホスト名を返してくるものには必要ないはずであるが、
# dhclient bge0のようにホスト名を指定しない場合に対応するために
# 必要になる。dhcpcdを使えば良いのかもしれないが…
ddns-domainname "elements.tetera.org";

# 正引きのホスト名を登録する先を指定する。
# 最後のピリオドに注意。
zone elements.tetera.org. {
primary 127.0.0.1;
}

# 逆引きのホスト名を登録する先を指定する。
# 最後のピリオドに注意。
zone 81.168.192.in-addr.arpa. {
primary 127.0.0.1;
}

# 固定IPアドレスを割り当てるマシンの情報を指定する。
host calcium {
# MACアドレスを記載する。
hardware ethernet CC:CC:CC:CC:CC:CC;
# 割り当てる固定IPアドレスを指定する。
# 上にも書いたが、動的割り当ての範囲に含まれないように注意する。
fixed-address 192.168.81.241;
# DDNSで正引きを登録する際に使うホスト名を指定する。
ddns-hostname "calcium";
# 以下は、netboot用の設定。
filename "SYSNBSD";
next-server 192.168.81.249;
option root-path "/export/hp700/root";
}

# NetBSD機の設定。
host tellurium {
# MACアドレスを指定する。
hardware ethernet DD:DD:DD:DD:DD:DD;
# 割り当てる固定IPアドレスを指定する。
fixed-address 192.168.81.118;
# DDNSで正引きを登録する際に使うホスト名を指定する。dhcpcdを使えば不要に
# できるのように思う。
ddns-hostname "tellurium";
}

# Windows機の設定。ホスト名が報告されるので、改めて指定はしない。
host niobium {
hardware ethernet EE:EE:EE:EE:EE:EE;
fixed-address 192.168.81.108;
}

}


# DNSサーバー(bind)の設定

$ cat /etc/named.conf

# $NetBSD: named.conf,v 1.5.2.1 2011/01/16 13:00:02 bouyer Exp $

# boot file for secondary name server
# Note that there should be one primary entry for each SOA record.

options {
directory "/etc/namedb";
# DNSSECは設定しないので、エラーが出ないように無効にしておく。
dnssec-enable no;
dnssec-validation no;
dnssec-lookaside auto;
managed-keys-directory "keys";
allow-recursion { localhost; localnets; };

#
# This forces all queries to come from port 53; might be
# needed for firewall traversals but should be avoided if
# at all possible because of the risk of spoofing attacks.
#
#query-source address * port 53;
# ISPのDNSサーバーを指定する。これはso-netの例。
forwarders {
202.238.95.24;
202.238.95.26;
};
};

# RNDCを使う時は設定する。今回は使わない。
controls {
inet 127.0.0.1 allow { localhost; } keys { RNDC; };
inet 192.168.81.0 allow { 192.168.81.0/24; } keys { RNDC; };
};
include "/etc/namedb/rndc.key";

# 192.168.81.0/24のネットワーク向けの設定をinternalというviewで指定する。
view "internal" {
# bindにアクセスできるIPアドレスの範囲を指定する。127.0.0.1を忘れないこと。
match-clients {
127.0.0.1;
192.168.81.0/24;
};
# ここは、bindのデフォルトのまま。
zone "." {
type hint;
file "root.cache";
};
# ここは、bindのデフォルトのまま。
zone "localhost" {
type master;
file "localhost";
};
# ここは、bindのデフォルトのまま。
zone "127.IN-ADDR.ARPA" {
type master;
file "127";
};
# ここは、bindのデフォルトのまま。
zone "1.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.ip6.arpa" {
type master;
file "loopback.v6";
};
# 自宅ネットワークの正引きの情報を指定する。
zone "elements.tetera.org" {
type master;
file "elements.tetera.org";
# DDNSで登録するのは、127.0.0.1からだけとする。
allow-update {
127.0.0.1;
};
};
# 自宅ネットワークの逆引きの情報を指定する。
zone "81.168.192.in-addr.arpa" {
type master;
file "81.168.192.in-addr.arpa";
# DDNSで登録するのは、127.0.0.1からだけとする。
allow-update {
127.0.0.1;
};
};
};


正引きのと逆引きゾーンファイルを書く。これは、DDNSでホストを登録に成功すると
勝手に書き変わる。
ここでは、DHCPD/DNSサーバーとファイルサーバーのみ固定IPアドレスで指定しておく。
# 動作確認していないので、これで合っているかは確証がない。
# おかしかったら他のサイト等を見たら良い。

$ cat /etc/namedb/elements.tetera.org

$TTL 3600 ; 1 hour
elements.tetera.org IN SOA nickel.elements.tetera.org. root.nickel.elements.tetera.org. (
8 ; serial
3600 ; refresh (1 hour)
900 ; retry (15 minutes)
3600000 ; expire (5 weeks 6 days 16 hours)
3600 ; minimum (1 hour)
)
IN NS nickel.elements.tetera.org.

nickel IN A 192.168.81.249
silicon IN A 192.168.81.214


$ cat /etc/namedb/81.168.192.in-addr.arpa

$TTL 3600 ; 1 hour
81.168.192.in-addr.arpa IN SOA nickel.elements.tetera.org. root.nickel.elements.tetera.org. (
7 ; serial
3600 ; refresh (1 hour)
900 ; retry (15 minutes)
3600000 ; expire (5 weeks 6 days 16 hours)
3600 ; minimum (1 hour)
)
IN NS nickel.elements.tetera.org.
214 IN PTR silicon.elements.tetera.org.
249 IN PTR nickel.elements.tetera.org.


# bindとDHCPDを起動する。

# bindの起動をする。

/etc/rc.confに以下のように書き加える。

named=YES

その上で、bindとDHCPDを起動する。

# /etc/rc.d/named start
# /etc/rc.d/dhcpd start

エラーがないか、tail -f /var/log/messageとでもして見ておくと良い。
エラーがないようであれば、DHCPでIPアドレス等をもらいに行ってみる。
成功したら、fixed-addressで指定したIPアドレスが割り当てられると
同時に、/etc/namedb/*jnlというバイナリーファイルが生成される。
また、この時ゾーンファイル(テキストファイル)も更新される。

0 件のコメント:

コメントを投稿

注: コメントを投稿できるのは、このブログのメンバーだけです。

NetBSDからCanon LBP3100に印刷する

この記事は、 NetBSD Advent Calendar 2024 の2日目の記事です。 Canon LBP3100というプリンターについて Canon LBP3100 というプリンターは。Canonの安価なwinprinterです。 私は2015年3月に...