2010/11/10

NanoBSD

覚え書きモード。


Q: できれば FreeBSD ベースで、電源をいきなりブチッと切っても大丈夫な、組み込み向け (?) の BSD はないですか?

A: NanoBSD は如何でしょう?


さて、NanoBSD ですが。
FreeBSD の配布物に含まれている、組み込み向けにカスタムした FreeBSD イメージを作るためのスクリプト群、またはその成果物のことだそうで。
スクリプトは、/usr/src/tools/tools/nanobsd/nanobsd.sh にあります。

仕組みとしては、以下のようになっている模様。

 ・/ は、リードオンリーでマウント
 ・/etc と /var は md (メモリディスク) に作成
 ・不揮発設定は /cfg に保存 (/etc は、起動時に /cfg を一時的にリードオンリーでマウントして自動生成)
 ・システムパーティションは2つある
 ・/cfg も1パーティションになっている (当たり前)

システムの更新は、2つあるシステムパーティションのうち、現在非アクティブな方に新しいイメージを書き込み、そこから起動。
上手く動いたら、起動したパーティションをアクティブにマークして終了。
ダメだったら、とりあえず元々起動していたパーティションから起動し直してサービスを続行させておき、イメージの作り直しを行う。
つまり、ダウンタイムは再起動の手間だけとなる上、復旧も容易。

なお、この NanoBSD をベースに使用しているプロジェクトには、以下の物などがある。
 ・FreeNAS
 ・BSD Router Project
 ・pfSense


NanoBSD に関する資料は、以下などを参照。

Introduction to NanoBSD
http://www.freebsd.org/doc/en_US.ISO8859-1/articles/nanobsd/index.html

NanoBSD HowTo
http://www.freebsd.org/doc/en_US.ISO8859-1/articles/nanobsd/howto.html

FreeBSD Doc NanoBSD (上記2つの日本語訳)
http://www.seichan.org/wiki/index.php?FreeBSD-Doc-NanoBSD

documentation:technical_docs:nanobsd (BSD Router Project の NanoBSD 情報ページ)
http://bsdrp.net/documentation/technical_docs/nanobsd

2010/11/04

IPv6 Address とプライバシー

もう、遥かに前から言われていたことですが、IPv6 では、自動設定 (Auto Configuration) で付けられたアドレスにはプライバシー上の問題がありました。
その理由は、128bits ある IPv6 Address の下 64bits は EUI-64 Address の 7bits 目を反転して作成するのですが、EUI-64 Address は、MAC Address を 24bits づつに分けた間に 0xFFFE を挿入して作るため。
つまり、Address の下 64bits を監視していれば、上位 64bits が変わろうとも (どのネットワークの下にぶら下がろうとも)、個人を特定してトレースできてしまうということ。
そんなわけで、MAC Address がわからず、作り直し可能な Address を自動生成したいね、ということに。

そのための規格が、既に存在します。
プライバシー拡張、って奴です。
 "Privacy Extensions for Stateless Address Autoconfiguration in IPv6" (RFC 4941: Obsolete 3041)
なんで Stateless かって、Stateful の場合は DHCPv6 でしょうから、Local Scope の Address (下 64bits の 7bits 目が 0 の Address) を振ればいいじゃない、と言う話ですね。
DHCPv6-PD の場合は、Stateless 扱いになるんじゃないかしら。



さて、このプライバシー拡張。
Windows は、標準で対応し、有効になっているらしいです。(XP 以降)
しかし、FreeBSD とか Mac OS X では、対応はしているけれど、デフォルト無効なのよね。
そんなわけで、有効にする方法をば。


FreeBSDの場合)

これらのために、以下の sysctl 値が定義されています。
net.inet6.ip6.use_tempaddr (default: 0)
 プライバシー用一時アドレスを使用するか (1 で有効)
net.inet6.ip6.prefer_tempaddr (default: 0)
 プライバシー用一時アドレスを送信元アドレスとするか (1 で有効)
net.inet6.ip6.temppltime (default: 86400)
 プライバシー用一時アドレスの推奨有効時間 (秒単位で指定。デフォルト1日)
net.inet6.ip6.tempvltime (default: 604800)
 プライバシー用一時アドレスの最大有効時間 (秒単位で指定。デフォルト1週間)

システムが起動してから設定するなら、
 # sysctl net.inet6.ip6.use_tempaddr=1
 # sysctl net.inet6.ip6.prefer_tempaddr=1
とでもしてください。
ただ、再起動すると消えてしまうので、常に有効にしたい場合は /etc/sysctl.conf に記述を追加してください。
 net.inet6.ip6.use_tempaddr=1
 net.inet6.ip6.prefer_tempaddr=1


Mac OS X の場合)

FreeBSD と、二点を除いて変わりません。
違う点は、net.inet6.ip6.prefer_tempaddr 変数がないところと sysctl の指定方法です。
Mac OS X では、net.inet6.ip6.use_tempaddr を 1 にすれば、発信元にプライバシー用一時アドレスを使うようになります。
システムが起動してからは、以下のように設定します。
 sysctl -w net.inet6.ip6.use_tempaddr=1
-w オプションが必要になります。
FreeBSD では、このオプションは単に無視されるだけなので、付けてやっても動作は変わりません。
FreeBSD 同様、再起動すると設定が消えてしまうので、常に有効にするなら /etc/sysctl.conf に記述を追加してください。