IPv6にも対応した DHCPサーバの設定
検証システムK/caption>
CPU |
AMD PhenomII X4 905e (2.5GHz 4コア) |
メモリ |
16GB |
ネットワーク |
Realtek 8168 (8111D) GbE |
OS |
Gentoo-1.12.14 Linux-3.10.1 x86_64 UTF-8 |
コンパイラ |
gcc-4.5.2 |
Cライブラリ |
glibc-2.13 |
LDAPサーバ |
OpenLDAP-2.4.23 |
DHCPサーバ |
ISD-DHCP-4.2.5 |
ISC-DHCPを利用して 自宅のネットワークを IPv4 IPv6 ハイブリッドにしました
下記の図は 構成概要です

ISC-DHCPサービスを入れるのは 図の左上のサーバマシンです
サーバマシンは DNS(IPv4/IPv6)と IPv4のDHCPサーバの機能も持たせます
IPv6アドレスの払出しは v6のポリシー上ルータに行わせる必要があるため
フレッツ光のゲートウェイルータがその役目を担います
今回の DHCPv6導入の目的は ネットワーク内にDNSサーバアドレスを広報することです
サーバで ISD-DHCPをビルドした結果は次の通りです
$ tar -xzf /ram/dhcp-4.2.5.tar.gz
$ cd dhcp-4.2.5
$ ./configure --prefix=/usr --libdir=/usr/lib64 --localstatedir=/var --with-ldap
checking for a BSD-compatible install... /bin/install -c
checking whether build environment is sane... yes
checking for a thread-safe mkdir -p... /bin/mkdir -p
〜
config.status: executing depfiles commands
ISC DHCP source configure results:
-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
Package:
Name: DHCP
Version: 4.2.5
C Compiler: gcc
Flags:
DEFS: -DHAVE_CONFIG_H
CFLAGS: -g -O2 -Wall -Werror -fno-strict-aliasing -I${top_srcdir}/bind/include
Features:
debug: no
failover:
execute:
Developer:
ATF unittests : no
Now you can type make to build ISC DHCP
$ make
Making all in bind
make[1]: ディレクトリ `/home/admin/dhcp-4.2.5/bind' に入ります
Configuring BIND Export libraries for DHCP.
〜
make[1]: ディレクトリ `/home/admin/dhcp-4.2.5/server' から出ます
make[1]: ディレクトリ `/home/admin/dhcp-4.2.5' に入ります
make[1]: `all-am' に対して行うべき事はありません.
make[1]: ディレクトリ `/home/admin/dhcp-4.2.5' から出ます
$ su
# make install
Making clean in server
make[1]: ディレクトリ `/home/admin/dhcp-4.2.5/server' に入ります
〜
make[1]: ディレクトリ `/home/admin/dhcp-4.2.5' に入ります
make[1]: `clean-am' に対して行うべき事はありません.
make[1]: ディレクトリ `/home/admin/dhcp-4.2.5' から出ます
#
下記ファイルがインストールされました
bin/:
omshell
etc/:
dhclient.conf.example dhcpd.conf.example
include/dhcpctl:
dhcpctl.h
include/isc-dhcp:
dst.h
include/omapip:
alloc.h convert.h isclib.h omapip_p.h trace.h
buffer.h hash.h omapip.h result.h
lib/:
libdhcpctl.a libdst.a libomapi.a
sbin/:
dhclient dhcpd dhcrelay
share/man/man1/:
omshell.1
share/man/man3/:
dhcpctl.3 omapi.3
share/man/man5/:
dhclient.conf.5 dhcp-eval.5 dhcpd.conf.5
dhclient.leases.5 dhcp-options.5 dhcpd.leases.5
share/man/man8/:
dhclient-script.8 dhclient.8 dhcpd.8 dhcrelay.8
dhcpdは IPv4 IPv6 両対応ですが別々にプロセスを起動する必要あります
そのため設定ファイルも別々に作成する必要があります
IPv4用の設定ファイルを /etc/dhcpd.conf
IPv6用の設定ファイルを /etc/dhcpd6.conf としましょう
IPv4用 dhcpd.conf は下記の通りです
ldap-server "[::1]";
ldap-port 389;
ldap-username "cn=Manager,dc=mydomain";
ldap-password "*****";
ldap-base-dn "cn=dhcp,dc=mydomain";
ldap-method dynamic;
ldap-debug-file "/var/log/dhcp-ldap-startup.log";
IPv4のDHCPについては 普段と趣を変えて LDAPバックエンドとしました
DHCP用のLDAPスキーマは ソースディレクトリ/contrib/ldap/dhcp.schema にあるので
LDAPサーバにあらかじめ取り込んでおく必要があります
また LDAPデータベースには下記のようなエントリを登録します
# dhcp, mydomain
dn: cn=dhcp,dc=mydomain
objectClass: top
objectClass: dhcpService
objectClass: dhcpOptions
dhcpStatements: ddns-update-style interim
dhcpStatements: log-facility local7
dhcpStatements: deny client-updates
dhcpStatements: default-lease-time 3600
dhcpStatements: max-lease-time 43200
cn: dhcp
dhcpPrimaryDN: cn=phenom4,cn=dhcp,dc=mydomain
# group-192.168.0.0, dhcp, mydomain
dn: cn=group-192.168.0.0,cn=dhcp,dc=mydomain
cn: group-192.168.0.0
objectClass: top
objectClass: dhcpGroup
objectClass: dhcpOptions
dhcpOption: domain-name "mydomain"
dhcpOption: domain-name-servers 192.168.0.254, 192.168.0.1
dhcpOption: subnet-mask 255.255.255.0
dhcpOption: broadcast-address 192.168.0.255
dhcpOption: routers 192.168.0.1
dhcpOption: smtp-server 192.168.0.254
# 192.168.0.0, group-192.168.0.0, dhcp, mydomain
dn: cn=192.168.0.0,cn=group-192.168.0.0,cn=dhcp,dc=mydomain
cn: 192.168.0.0
objectClass: top
objectClass: dhcpSubnet
dhcpNetMask: 24
dhcpRange: 192.168.0.200 192.168.0.239
dhcpStatements: authoritative
# turion4, group-192.168.0.0, dhcp, mydomain
dn: cn=turion4,cn=group-192.168.0.0,cn=dhcp,dc=mydomain
cn: turion4
objectClass: top
objectClass: dhcpHost
dhcpHWAddress: ethernet 0*:**:**:**:**:*2
dhcpStatements: fixed-address 192.168.0.3
# xbox360, group-192.168.0.0, dhcp, mydomain
dn: cn=xbox360,cn=group-192.168.0.0,cn=dhcp,dc=mydomain
cn: xbox360
objectClass: top
objectClass: dhcpHost
dhcpHWAddress: ethernet 0*:**:**:**:**:*9
dhcpStatements: fixed-address 192.168.0.13
# phenom4, dhcp, mydomain
dn: cn=phenom4,cn=dhcp,dc=mydomain
cn: phenom
cn: phenom4
objectClass: top
objectClass: dhcpServer
dhcpServiceDN: cn=dhcp,dc=mydomain
必要な設定は以上です
DHCPv4の起動は下記のコマンドで行います
# dhcpd -q -4 -cf /etc/dhcpd.conf eth0
うまく動作したら サーバ起動時に自動実行されるように設定しましょう
次に DHCPv6の設定を行います
DHCPv6は LDAPバックエンドでうまく動作しなかったので
dhcpd6.confに必要な設定を記述します
# dhcpd.conf
#
default-lease-time 86400;
max-lease-time 604800;
subnet6 fe80::/64 {
option dhcp6.name-servers fe80::1***:****:****:***a;
option dhcp6.domain-search "mydomain";
}
設定はこれだけです IPv6アドレスを払い出す必要もなく
DNSサーバのアドレスだけ広報してもらえばよいので簡潔な設定になっています
ネットワークが fe80:: のリンクローカルに対して設定されていますが
これがあるべき姿かどうかは分かりません
DHCPv6の起動は下記コマンドで行います
# dhcpd -q -6 -cf /etc/dhcpd6.conf eth0
サーバの設定は以上で完了です
クライアントマシンで DNSサーバを DHCPv6を通じて解決するには
特にWindowsでは設定が必要です (管理者権限で設定します)
C:\Windows\system32>netsh interface ipv6 show interface
Idx Met MTU 状態 名前
--- ---------- ---------- ------------ ---------------------------
3 10 1500 connected イーサネット
1 50 4294967295 connected Loopback Pseudo-Interface 1
4 50 1280 disconnected isatap.local
5 50 1280 connected Teredo Tunneling Pseudo-Interface
C:\Windows\system32>netsh interface ipv6 set interface 3 otherstateful=enabled
OK
C:\Windows\system32>
Windowsでは IPv6のネットワークインターフェースに対して
「otherstateful=enabled」に設定する必要があります
解説はここまでです
自前で DNSサーバを運用するような状況では DHCPまで正しく構築する必要あります
逆に 自宅のネット環境など パソコンやゲーム機が数台だけの環境なら
特に IPv6ではブロードバンドルータさえあればネットの設定は自動化され楽です