ULAのグローバルIDを決める2013年08月21日 08:28

IPv6にはいろいろなアドレスがある。インターネットに出て行くならば、GUA(Global Unicast Address)が必要。プロバイダに払い出してもらうものであり、ローカルで構築するときは使えない。IPv4のプライベートアドレスに相当するのが、ULA(Unique Local Address)。今回はこれを設定する。
IPv6で感じた一番の違和感がNATが無いこと。IPv4では、ローカルのネットワークは、プライベートアドレスを用い、外と出入りするときにNATでアドレス変換する。多くの場合、変換は、1:1ではなく、N:1だったり、N:Mだったり。その常識をいったん頭から追い出す。ULAを設定しても、将来、インターネットと出入りするときにGUAとアドレス変換するわけではない。ネットワークインターフェースが、ULAとGUAと複数のアドレスを同時に持つ。実際にやってみると、3つも4つも設定される。
閑話休題。ULAも外に出て行くわけではないが、できるだけ一意にすることが求められる。そのためのアドレス生成の手順がRFC4193に示されている。世の中にいくつかツールがあるが、勉強がてら作ってみる。

Javaによるツール:http://www.02.246.ne.jp/~torutk/ipv6/uniquelocal.html
RFC4193の参考訳がある。
CGIによるツール:http://www.kame.net/~suz/gen-ula.html
@ITの記事(http://www.atmarkit.co.jp/ait/articles/1306/21/news008.html)ではこちらを使う。

使うのは、機器のMACアドレスと、NTPから取得した時刻情報。perlを使う。モジュールを活用すれば、手順を並べるだけ。大きな数字を扱うのも得意。

1)NTPから時刻情報を取得。1900年からの累積の秒数を用いる。perlのtime関数では、1970年からの情報になるので、Net::NTPのget_ntp_responseを用いる。時刻情報の構造を読み取るのに、YAML::XSのDumpを用いる。
2)MACアドレスから、eui-64の値を求める。6バイトのMACアドレス(16進表記)の間に、0xfffeを埋め込む。
3)1900年からの累積秒数の16進表記の後ろに、eui-64をくっつける。
4)SHA-1のハッシュキーを求める。160bit(20バイト)の値。Digest::SHAのsha1_hexを用いる。
5)20バイトのキーの後ろ40bit(5バイト)をグローバルIDとして用いる。
6)接頭辞0xfd(8bit)、グローバルID(40bit)、Subnet(16bit)、インターフェースID(64bit)、の都合128bitで、ULAは完成。

実行してみる。

ULAのGlobal IDの生成
NTPが返したTransmit Timestampの値を年に換算すると、43~44年。2013年から減ずると1970年。RFC1305の記述と異なり、1970年からの累積秒数になっているようだ。perlのtime関数の仕様に合わせているか。Reference Timestampを換算すると、約-70年。2つを合わせると目的の数値が得られる。
http://www.ietf.org/rfc/rfc1305.txt ;Data Formatsの段落

MACアドレスは、CiscoのRouterの値を用い、間に0xfffeを埋め込み、eui-64にする。

2つをくっつけると32バイト。ハッシュ値を求めると、40バイトになる。後ろ5バイトをとってきて、ULAの前半部分は完成。最終結果は、タイムスタンプを用いているので、毎回変わるが、途中経過は、巷のツールと似たような値を示す。大丈夫か。

次は、このアドレスを用いて、ネットワーク機器の設定に進む。
fde3:4c30:cae5::/48
しかし、この表記に慣れねばならぬ。

最後は、適当に書いたプログラム。
ULAのGlobal IDを作成するプログラム例

cygwinで動かす。久しぶりに見ると、64bit版が出ていたので、早速セットアップ。以前のFAQでは、作らない、と言っていたのに、これも時代の趨勢。代わりにActive Perlはアンインストール。両方あるといろいろ競合する。
http://www.cygwin.com/

コメント

コメントをどうぞ

※メールアドレスとURLの入力は必須ではありません。 入力されたメールアドレスは記事に反映されず、ブログの管理者のみが参照できます。

※なお、送られたコメントはブログの管理者が確認するまで公開されません。

名前:
メールアドレス:
URL:
コメント:

トラックバック

このエントリのトラックバックURL: http://c5d5e5.asablo.jp/blog/2013/08/21/6953027/tb

※なお、送られたトラックバックはブログの管理者が確認するまで公開されません。