DHCPサービスの導入

IPv6にも対応した DHCPサーバの設定

UNIX系のDHCPの有名な実装は ISC-DHCPWIDE-DHCP(リンクは WIDE-DHCPv6)です
今回は ISC-DHCPを使って IPv4 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 ハイブリッドにしました
下記の図は 構成概要です
自宅DHCPv4 DHCPv6構成
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ではブロードバンドルータさえあればネットの設定は自動化され楽です

IPv6サーバツールへ戻る