SLAAC
IPv6で、端末がDHCPサーバを使わずに、ルータ広告(RA)で知らされたサブネットプレフィックスと、自分で作ったインタフェース識別子を組み合わせて、自分のIPv6アドレスを自動で設定する仕組み。
イマシルちゃんの解説
IPv4では、住所(IPアドレス)をもらうのに、DHCPサーバにお願いするのがふつうだったよね。
IPv6のSLAACでは、パソコンが自分で住所を作っちゃうんだ。
ルータが「この町の名前はこれだよ」って教えてくれたら、
パソコンは、自分で考えた「番地」をくっつけて、住所の完成!
同じ住所の人がいないかも、ちゃんと自分で確かめるんだよ。
より深い解説
定義
SLAAC(IPv6 Stateless Address Autoconfiguration)は、RFC 4862で定められた、IPv6アドレスの自動設定の方式である。どの端末にどのアドレスを割り当てたかという状態(ステート)をサーバで管理しないため、ステートレスと呼ばれる。近隣探索プロトコル(NDP)のメッセージを使って実現される。
手順
| 順 | 処理 | 使うメッセージ |
|---|---|---|
| 1 | リンクローカルアドレス(fe80::/64 + インタフェース識別子)を仮に作る | − |
| 2 | 同じアドレスを使う機器がいないか確かめる(重複アドレス検出:DAD) | NS(要請ノードマルチキャスト宛て) |
| 3 | 重複がなければ、正式なリンクローカルアドレスとして使う | NA(全ノードマルチキャスト宛て)など |
| 4 | ルータを探す | RS(全ルータマルチキャスト宛て) |
| 5 | ルータが、プレフィックスやデフォルトルータの情報を知らせる | RA |
| 6 | RAのプレフィックスとインタフェース識別子を組み合わせて、仮のグローバルユニキャストアドレス(GUA)を作り、DADで重複を確かめる | NS |
| 7 | 正式なGUAとして使う。RAの送信元(ルータのリンクローカルアドレス)をデフォルトルータ(デフォルトゲートウェイ)にする | − |
アドレスの作り方
GUA = RAで知らされたサブネットプレフィックス(上位64ビット) + インタフェース識別子(下位64ビット)
例:RAのプレフィックスが 2001:db8:1:2::/64、インタフェース識別子が a8bb:ccff:fe11:2233 なら、GUAは 2001:db8:1:2:a8bb:ccff:fe11:2233/64 になる。
SLAACは、インタフェース識別子が64ビットであることを前提にしているため、端末を収容するネットワークのプレフィックス長は/64にする。
RAのフラグによる方式の切り替え
| RAのフラグ | 意味 | 端末の動作 |
|---|---|---|
| M(Managed)=1 | アドレスはDHCPv6で取得する | ステートフルDHCPv6 |
| O(Other)=1 | アドレス以外の情報(DNSサーバなど)はDHCPv6で取得する | SLAAC+ステートレスDHCPv6 |
| どちらも0 | すべてRAで済ませる | SLAACのみ(DNSサーバはRAのRDNSSオプションで知らせることもできる) |
DHCPv6との比較
| SLAAC | ステートフルDHCPv6 | |
|---|---|---|
| アドレスを決めるのは | 端末自身 | DHCPv6サーバ |
| 割当ての記録 | 残らない | サーバに残る |
| デフォルトルータ | RAで知る | RAで知る(DHCPv6では配布しない) |
| 管理のしやすさ | 端末とアドレスの対応を把握しにくい | 把握しやすい |
SLAACでは、どの端末がどのアドレスを使っているかが、サーバに記録されない。さらにインタフェース識別子をランダムに作る一時アドレスを使うと、アドレスから端末を特定することが難しくなるため、ログの調査などで端末を追跡するには、NDPのテーブル(近隣キャッシュ)を収集するなどの工夫が必要になる。
午後での問われ方
NDPのメッセージの順番(NS、NA、RS、RA)を図で示し、それぞれの処理の目的を問う形が多い。DADの目的は、同じリンク上に同じIPv6アドレスを使っている機器がいないことを確かめること、RAの送信元のリンクローカルアドレスはデフォルトルータとして使う、という点が問われる。