大規模なネットワークを有する会社ではDHCPサーバ
が導入されており、会社で使っている端末もDHCPという
方は多いのではないだろうか?その端末を自宅にもって帰ってきたときに
家庭内LANを構築していて192.168・・などとして固定ipで使っていて
いちいち会社で使っている端末もIPアドレスを振りなおすのが
うっとうしいと感じていることがあるだろう。
そういうときに家にもDHCPサーバを立てればかなり不便は解消されるのではなかろうか?

また、会社でサーバの運用管理者を任されておりDHCPがwindows2000やNTではなく
LinuxやSolarisというかたも勉強のために一度家で練習してみるのもよいのではないだろうか?

それでは早速インストールをしてみたいと思う。
まずDHCPとはなんぞや!という方は申し訳ないですが他あたってみてくださいm(_ _)m
参照;DHCP(Dynamic Host Configuration Protocol)

【準備】
ftp://ftp.isc.org/isc/dhcp/dhcp-latest.tar.gz
をダウンロードしてくる。
※latestとついているのが最新版。


バージョン3からはDDNSもサポートされています。
その他にもバグフィックスやフェイルオーバー機能などもあるようです。
時間があればフェイルオーバーもやってみたいところです。


【インストール】

※インストールは今回はRedhat(FCでも同じでしょう)で行います。
 Solaris8でやりたかったんですが、常にあがってるのはLinuxなんで・・・
 Solairsでもまったく同じです。


●最初からインストールされているdhcpdがあれば抜いておきます。(Slarisでは関係ない)
[root@home5 dhcp-3.0]# rpm -qa|grep dhcp
dhcpcd-1.3.18pl8-10
[root@home5 dhcp-3.0]# rpm -e dhcpcd-1.3.18pl8-10

●実際のインストール
[root@home5 nitta]# cd /work/dhcpd/
[root@home5 dhcpd]# gzip -d < dhcp-latest.tar.gz |tar xf -
[root@home5 dhcpd]# cd dhcp-3.0/
[root@home5 dhcp-3.0]# ./configure 2>&1|tee configure.log
                (configureにオプションはまだまったく対応してないようです。)
[root@home5 dhcp-3.0]# make 2>&1|tee make.log
[root@home5 dhcp-3.0]# make install 2>&1|tee make_install.log
--インストールされるもの----
/usr/sbin/dhcpd
/usr/bin/omshell
/sbin/dhclient
/usr/sbin/dhcrelay
/usr/local/lib/libdhcpctl.a
/usr/local/include/dhcpctl.h

後はmanファイルがコマンドと同じくらい入ります。


【設定】
まずサーバにするための雛型がついているので、それを使うことにします。
[root@home5 server]# cp /work/dhcpd/dhcp-3.0/server/dhcpd.conf /etc/
[root@home5 server]# vi /etc/dhcpd.conf

#ddns-update-style interim;    #ddnsを使用する場合はstyleをiniterimにしておきます
ddns-update-style add-hoc;  
#ddnsを使用しない場合はadd-hocにしておきましょう
option domain-name "jinjin.com";
option domain-name-servers 192.168.128.4, 192.168.128.5;
#DHCPサーバの使用するDNSサーバ
log-facility local7; 
#この辺はsyslog.confで特別にdhcpだけのログ
           
#を書き出したい場合はちゃんと設定を変えましょう


subnet 192.168.128.0 netmask 255.255.255.0 {
range 192.168.128.6 192.168.128.252;      
#クライアントに渡すIPアドレスの範囲です。
option domain-name-servers 203.139.161.37;
#クライアントに渡すdnsサーバです。
option domain-name "jinjin.com";        
#クライアントに渡すドメイン名
option routers 192.168.128.254;        
#クライアントに渡すルーターのIPアドレス
option netbios-name-servers 192.168.128.2;
#クライアントに渡すwinsサーバ
option broadcast-address 192.168.128.255; 
#ブロードキャストアドレス
default-lease-time 600;
             #リース時間
max-lease-time 7200;              
#最大リース時間

}

#特別に固定のIPアドレスを渡したりすることが出来ます。
host home2 {
hardware ethernet 00:D0:09:32:29:71;    
#クライアントのイーサネットアドレス
fixed-address 192.168.128.253;         
#クライアントに渡すIPアドレス
}


[root@home5 server]# touch /etc/dhcpd.leases
空のファイルでいいので作っておきます。
実際には割り当てたアドレスに関する詳細が記述されます。
こんな感じです。

lease 192.168.128.20 {
starts 5 2001/10/05 11:28:21;
ends 5 2001/10/05 11:38:21;
binding state active;
next binding state free;
hardware ethernet 00:00:39:8c:32:1e;
uid "\001\000\0009\2142\036";
set ddns-rev-name = "20.128.168.192.in-addr.arpa.";
set ddns-fwd-name = "nitta.jinjin.com";
client-hostname "nitta";
on expiry or release {
switch (ns-update (delete (1, 12, ddns-rev-name, null))) {
case 0:
unset ddns-rev-name ;
break;
}
switch (ns-update (delete (1, 1, ddns-fwd-name, leased-address))) {
case 0:
unset ddns-fwd-name ;
break;
}
on expiry or release;
}
}


【起動】
設定は以上のように完了しました。これでDHCPサーバ自体のインストールと設定は終わりです。
起動をしてみます。

[root@home5 /root]# /usr/sbin/dhcpd -cf /etc/dhcpd.conf -lf /etc/dhcpd.leases
Internet Software Consortium DHCP Server V3.0
Copyright 1995-2001 Internet Software Consortium.
All rights reserved.
For info, please visit http://www.isc.org/products/DHCP
Wrote 0 deleted host decls to leases file.
Wrote 0 new dynamic host decls to leases file.
Wrote 1 leases to leases file.
Listening on LPF/eth0/00:10:5a:6c:40:29/192.168.128.0/24
Sending on LPF/eth0/00:10:5a:6c:40:29/192.168.128.0/24
Sending on Socket/fallback/fallback-net
エラーがなく起動した場合はこういったメッセージが表示されます。
※エラーが出た場合は結構ながいエラーメッセージが出てきますが、
 エラーの内容と対処法も記述されているのでビビル必要はありません。

※2004.03
ある重要なことに気づきました。論理or物理インターフェースを同じセグメントに
入れている場合は、どのインターフェースでサービスを提供するか指定して起動しないと
エラーをはいてしまうことがあります。
なので
#
/usr/sbin/dhcpd -cf /etc/dhcpd.conf -lf /etc/dhcpd.leases eht0
とインターフェースを指定して起動しておくのがベストでしょう。
SolarisなどでIPMPなどしている場合は必須です。

最後にリブートしても起動するように起動ファイルを書いておきましょう。
・Linuxの場合
/etc/rc.d/rc.local に追記
#####dhcpd boot-up########
if [ -f /usr/sbin/dhcpd ]; then
(echo 'Starting DHCP service') > /dev/console
/usr/sbin/dhcpd -cf /etc/dhcpd.conf -lf /etc/dhcpd.leases
else
(echo 'dhcpd not found') > /dev/console
fi

・Solarisの場合
/etc/init.d/dhcpd
/usr/sbin/dhcpd -cf /etc/dhcpd.conf -lf /etc/dhcpd.leases
bash2.05# ln -s /etc/init.d/dhcpd /etc/rc2.d/S99dhcpd

【動作確認】
[root@home5 /root]# ps -ef|grep dhcp
root 10078 1 0 20:34 ? 00:00:00 /usr/sbin/dhcpd -cf /etc/dhcpd.c
ちゃんと起動してます。

windows端末からちゃんとIPアドレスが取得できているかどうか実際にやって見ましょう。
windowsの操作方法は割愛します。だってわかるっしょ!?

以上でインストールは終わりです。
---------------------------------------------
が、しかし、おもしろくねーーー!
これだけかい!って感じなんでどこでも違うサイトに載ってることじゃねーか!
って思ったんでDDNSもついでに構築することにします。
これなら載ってるサイトも少ないだろう!って最近は必須のテクノロジーなんで
もしかすると構築方法書いてるサイトも多いのかも・・・
まあいいや。自己満足 自己満足。

では早速DDNSの構築をはじめよう!
DDNSの設定(2001.10.5)
DDNSをよく耳にするという時代もおわり、どんどん導入が始まり必要十分条件として知っておかねば
ならない時代になってきた。今回はiscのbindとdhcpdを使う

前提条件
DNSサーバは構築済み。
dhcpサーバは構築済み。
この2点。

まだの方がいればとりあえず
dnsサーバのインストール
dhcpサーバのインストール
を参照いただきたい。

【DNSの設定】
既に構築済みであればたやすいものである。
まずdnsサーバの設定のやり方であるが、結構簡単である。
bash-2.05# vi /etc/named.conf
※dnsサーバのインストール時のものと見比べて欲しい。allow-updateの行が2箇所増えている。
acl allowips {
192.168.128.0/24;
127.0.0.1;
};


options {
directory "/var/named";
pid-file "/var/named/named.pid";
auth-nxdomain yes;
//allow-transfer { 192.168.128.5; };
allow-transfer { allowips; };
query-source address * port 53;
version "";
};

zone "." {
type hint;
file "named.root";
};

zone "localhost" {
type master;
file "localhost.zone";
};
zone "0.0.127.in-addr.arpa" {
type master;
file "localhost.rev";
};

zone "jinjin.com" {
type master;
file "jinjin.com";
allow-update { allowips; };
};

zone "128.168.192.in-addr.arpa" {
type master;
file "jinjin.com.rev";
allow-update { allowips; };
};

〜以下省略〜
aclでまず許可するべきアドレスを定義しておく。今回の場合は家庭内LANということで192.168.128/24のアドレスを全て許可している。本当の運用時であれば許可すべきアドレスを1つずつ列挙する方がよい。

例:acl reidai-allow {
192.168.128.20;
192.168.128.21;
192.168.128.30;
 ・
 ・
 ・
};



















ここでjinjin.comというゾーンに対してddnsで使われるnsupdateコマンドを受け付けるかどうかを決めている。デフォルトは全て受け付けないようになっている。
今回はallowipsで許可したアドレス群を許可するという設定にしている。
named.confの設定が終わればnamedを再起動してみよう。
bash-2.05# ps -ef|grep named
bind 843 1 0 20:06:03 ? 0:00 /usr/local/sbin/named -u bind
bash-2.05# kill -HUP 843
実際にnsupdateコマンドがとおるかどうか確認してみる。
bash-2.05# nsupdate
> update add nitta.jinjin.com. 1200 in a 192.168.128.20
>^d
bash-2.05# host nitta.jinjin.com
nitta.jinjin.com. has address 192.168.128.20
正常に登録されたようだ。
bash-2.05# nsupdate
> update delete nitta.jinjin.com. a

【DHCPの設定】
dhcpサーバでは/etc/dhcpd.confを一箇所変更するだけである。あとはそのままなので変更分だけを
白で分かりやすくさせてみました。あとは同じなので見えにくく表示してます。

ddns-update-style interim;    #ddnsを使用する場合はstyleをiniterimにしておきます
#ddns-update-style add-hoc;  
#ddnsを使用しない場合はadd-hocにしておきましょう

option domain-name "jinjin.com";
option domain-name-servers 192.168.128.4, 192.168.128.5; #DHCPサーバの使用するDNSサーバ
log-facility local7; #この辺はsyslog.confで特別にdhcpだけのログ
           
#を書き出したい場合はちゃんと設定を変えましょう

subnet 192.168.128.0 netmask 255.255.255.0 {
range 192.168.128.6 192.168.128.252;      #クライアントに渡すIPアドレスの範囲です。
option domain-name-servers 203.139.161.37; #クライアントに渡すdnsサーバです。
option domain-name "jinjin.com";        #クライアントに渡すドメイン名
option routers 192.168.128.254;         #クライアントに渡すルーターのIPアドレス
option netbios-name-servers 192.168.128.2; #クライアントに渡すwinsサーバ
option broadcast-address 192.168.128.255;  #ブロードキャストアドレス
default-lease-time 600;              #リース時間
max-lease-time 7200;               #最大リース時間

}

#特別に固定のIPアドレスを渡したりすることが出来ます。
host home2 {
hardware ethernet 00:D0:09:32:29:71;     #クライアントのイーサネットアドレス
fixed-address 192.168.128.253;         #クライアントに渡すIPアドレス
}

ddns-update-styleここのスタイルをinterimにするだけだ。これだけでDNSさえ対応していればDNSサーバに
DHCPで割り当てたクライアントのipアドレスがdnsに登録される。
まずはDHCPを再起動して有効にしてみよう。
[root@home5 /root]# ps -ef|grep dhcp
root 10078 1 0 20:34 ? 00:00:00 /usr/sbin/dhcpd -cf /etc/dhcpd.c
[root@home5 /root]# kill -HUP 10078

ここで実際にwindowsなどを起動してDHCPからアドレスをもらってみよう。
それから/etc/dhcpd.leasesのファイルも確認してみよう。

bash-2.05# cat /etc/dhcpd.leases
lease 192.168.128.20 {
starts 5 2001/10/05 13:31:24;
ends 5 2001/10/05 13:41:24;
binding state active;
next binding state free;
hardware ethernet 00:00:39:8c:32:1e;
uid "\001\000\0009\2142\036";
set ddns-rev-name = "20.128.168.192.in-addr.arpa.";
set ddns-txt = "3195133fafa217c1a260de7b8713f78084";
set ddns-fwd-name = "nitta.jinjin.com";
client-hostname "nitta";
}
ちゃんとddnsにnitta.jinjin.comというFQDNを渡している事がわかる。
また、DNS参照できるかどうかも

bash-2.05# host nitta.jinjin.com 192.168.128.4
でやってみよう。
ちゃんとIPアドレスが引ければOKである。


以上でDDNSの設定は終わりである。


意外と簡単なんだなあ。でも実際にdyndns.orgなどでやってるサービスは
結構充実してるよなあ。
結局あれはDNSサーバへnsupdateを裏で実行してるだけなのかあ。
って感じである。でもまあサービスとしてやるだけあってよく出来ているよなあ。

DHCPサーバインストール(2001.10.5)