2014-02-01

DHCPv6について(DUID)

DHCPv6で(各ホスト上の手動設定ではなく)静的にアドレスを振る方法について調べていて、DUIDというものに辿り着いた。忘れないように書きだす。

DUIDとは
色々世の中にはIDを振る方法があるのだけど、DHCPの仕組みで使われる(と思われる)IDの振り方。DHCP Unique Identifierの略。

RFC3315で定義されているDUID
RFC3315(DHCP for IPv6)[1]のSection-9で定義されているDUIDは3つ。

  • DUID-LLT(DUID Based on Link-layer Address Plus Time)
  • DUID-EN(DUID Assigned by Vendor Based on Enterprise Number)
  • DUID-LL(DUID Based on Link-layer Address)

DUID-LLTとDUID-LLに書かれている「Link-layer Address」は日本語でいう物理アドレス、いわゆるMACアドレスのことで、LLTの方はMACアドレスと時刻から導出、LLはMACアドレスから導出という事らしい。
一方でDUID-ENはIANAがメンテしているPrivate Enterprise Numberに各ベンダが持っているIDを振っていく形式のようだ。
これら3つのIDのオフセットはRFC3315を参照。

RFC6355で定義されているDUID
それでいて、RFC6355(DUID-UUID)[2]でもDUIDが定義されている。
DUID-UUIDはRFC4122で定義されているUUIDをそのまま使う(正確にはDUID-Typeである4の後ろにDUID128bitを繋げる144bit)ということ。UUIDはあんまり重複しないのでこれの方が手軽という事なんだろうか。

もうちょっとだけ続くんじゃ(2014/02/04追記)
元々あるDUID-LLTとDUID-LLについて、dhclientがデフォルトで投げるDUIDがDUID-LLTになっているので、何で似たようなものが2つあるのかdhclientのデフォルト設定について調べていたらバグとして報告されていた[3]。
その中でComment21に
> So it seems like we all agree that DUID-LL is the way to go...
AFAIK even the RFC agrees :).
と書いてあり、それならと思って改めてRFC3315を読んでみると、まずDUID-LLTがある理由は

  • DHCPv6クライアントとDHCPv6サーバとの間で重複しないIDが必要
  • NICを機器の間で付け替えたとしても、別々のIDになるようにする
ために、MACアドレスと時刻を複合キーのように扱ってIDとして使う。との事。
ではDUID-LLが定義されている理由は。

This type of DUID consists of two octets containing the DUID type 3,
a two octet network hardware type code, followed by the link-layer
address of any one network interface that is permanently connected to
the client or server device.  For example, a host that has a network
interface implemented in a chip that is unlikely to be removed and
used elsewhere could use a DUID-LL.
要は、「NICを取り外し不可能なプロダクトに限ってDUID-LLを使ってもいいよー」的なノリで書かれているので、デフォルトはDUID-LLみたいな事になっているようだ(RFC3315を書いた時のノリでは)。

それと、DUID-LLTとDUID-LLの3〜4オクテット目に使われるhardware typeはIANAでメンテされていて[4]、どういう風に識別されているかはDUIDを生成するDHCPv6クライアント次第であることにも注意が必要である。(DHCPv6サーバ側でDUIDを元にした処理をする場合があるので。)
具体的には、6(IEEE 802 Networks)かと思ったら1(Ethernet (10Mb))だったりするので。

[1] http://tools.ietf.org/html/rfc3315#section-9
[2] http://tools.ietf.org/html/rfc6355
[3] https://bugzilla.redhat.com/show_bug.cgi?id=560361
[4] http://www.iana.org/assignments/arp-parameters/arp-parameters.xhtml#arp-parameters-2

0 件のコメント:

コメントを投稿