IPv6にも対応した DHCPサーバの設定
UNIX系のDHCPの有名な実装は ISC-DHCP と WIDE-DHCP(リンクは WIDE-DHCPv6)です
今回は ISC-DHCPを使って IPv4 IPv6 両対応のDHCPサービスを構築します
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ではブロードバンドルータさえあればネットの設定は自動化され楽です