SSブログ

IPv6化 + DHCPv6 その5 (FreeBSD9.0R、2012/10/28) [FreeBSD]

前回FreeBSD8.2Rで試した時は、DHCPv6クライアントが思うように動かず様子見としていました。
その後何度か話題として触れていますが、KDDI auひかりで割り当てられるIPv6アドレスのプリフィックスがたまに変わってしまうため、都度FreeBSDの設定を追従させるのがかなり面倒なのです。プリフィックスは変わっても良いので、せめて下位のアドレス部は固定にならないかと思い、基礎研究(?)として再チャレンジです。

と、実はアドレス部を固定するのであれば、ホームゲートウェイのAterm BL190HWで簡単にできてしまいます。ただ、IPアドレスの配布はスクリーンショットを見て分かるように、DHCPv6での配布が前提となっているんですよね。これはFreeBSDには敷居が高いのです。
20121028_Aterm_v6.jpg

前回、DHCPv6クライアントにはKAMEプロジェクトの実装である/usr/ports/net/dhcp6を使いましたが、再度Webを検索してみたところ下記様な記述を発見。ちょっと期待できるではありませんか。
https://wikispaces.psu.edu/display/ipv6/DHCPv6#DHCPv6-ISCdhclient4.1.0
ざっと調べてみたところ、FreeBSD9.0R標準のdhclientにはそのようなオプションはないため、ports/net/isc-dhcp42-clientをインストールしてみることにしました。しかもmake時にいきなり[x] IPv6なんてオプション選択表示が出るじゃありませんか。いよいよ期待できます。ちなみにインストールの結果は下記の通り、実装が違うのかバージョンが違うのか、全くの別物のようです。ports版には-6というIPv6を臭わせるオプションがあります。
atom# /sbin/dhclient
usage: dhclient [-bdqu] [-c conffile] [-l leasefile] interface
atom# /usr/local/sbin/dhclient -h
Internet Systems Consortium DHCP Client 4.2.4-P2
Copyright 2004-2012 Internet Systems Consortium.
All rights reserved.
For info, please visit https://www.isc.org/software/dhcp/
Usage: dhclient [-4|-6] [-SNTP1dvrx] [-nw] [-p ] [-D LL|LLT]
                [-s server-addr] [-cf config-file] [-lf lease-file]
                [-pf pid-file] [--no-pid] [-e VAR=val]
                [-sf script-file] [interface]

ここで少しおさらいです。リリースノートにも書いてありますが、FreeBSD9.0RからIPv6まわりの設定が変わっており、特にipv6_enableが廃止になっています。私の環境だと以下のような記述になっています。
atom# cat /etc/rc.conf
#ipv6_enable="YES" # obsolete
ipv6_network_interfaces="lo0 re0"
ipv6_activate_all_interfaces="YES"
ifconfig_re0_ipv6="inet6 accept_rtadv"
rtsol_flags=""
rtsold_enable="YES"

話は戻りますが、
atom# cat /etc/dhclient.conf
send dhcp6.oro 3, 23, 24;

atom# /usr/local/sbin/dhclient -6
としたところ、いともあっさりとDHCPv6のIPアドレスが貰えてしまいました。DHCPv6クライアント実装に関しては何も問題がないようです。しかもご丁寧に/etc/resov.confまでちゃんと書き換えてくれました。(KDDIホームゲートウェイ仕様に書き換えられてしまったので、ちょっと被害が出ました)

…が、問題は今のFreeBSDのブートシーケンスにおいて、IPv6環境適用時にDHCPv6クライアントを動作させる仕組みがないことです。標準添付のdhclientがIPv6に対応すれば、ブートシーケンスや起動オプションに見直しが入るかもしれませんが、それは未来のこと。
rc.localに書くことも考えましたが、ブート時に立ち上がるサービスのListenアドレスに影響が出そうなので、試してしません。推測するに/sbin/dhclientの呼び出しはrc.conf内のifconfig_re0="DHCP"がトリガとなっているはずなので、IPv4までを含めて完全DHCPクライアント化してしまえばなんとかなるような気がしますが、自宅LAN環境のDHCPサーバがこのFreeBSD自身なのでそれも難しそうです。
dhclientが動いてかつIPv4アドレスが固定で割り当てられる素敵な環境があればいいのですが…。と考え、ダメもとでめちゃくちゃな設定を書いてみました。
atom# cat /etc/rc.conf
dhclient_program="/usr/local/sbin/dhclient"
dhclient_flags="-6"
ifconfig_re0="DHCP 192.168.0.1 netmask 255.255.255.0"

で、結果は。…なぜか思惑通りに動いてしまいました。IPv4の固定IPアドレスと、IPv6のDHCPv6による固定IPアドレス割り当てが実現したのです。rc系スクリプトの構文解析が素直なんでしょうかねぇ、ちゃんと動いてしまうFreeBSDにびっくりです。
ただ、将来的に正式なDHCPv6クライアントが実装されるでしょうし、こういう無茶な記載はどこにも保証されていないやり方なので、あくまで暫定措置ですね。
タグ:IPv6

共通テーマ:日記・雑感