Upgrade to Pro — share decks privately, control downloads, hide ads and more …

書いて覚えるDHCPv6-PD

 書いて覚えるDHCPv6-PD

IPv6初体験の素人がDHCPv6-PDでPrefix取得するコード書いて勉強してみました記録です.

jitomesky

June 29, 2015
Tweet

Other Decks in Programming

Transcript

  1. ⽴立立ちはだかる壁 u vyatta系ルーター⽤用OS(VyOS, EdgeOS) のバグ u IPv6しか降降ってこないPPPoEデバイスを扱えない u 最低限の知識識すらない u

    IPv6のプレフィックスって何……? u DHCPv6-PDって何? dhcpv6-pdってデーモン⽴立立てろってこと? コードを書いて覚えよう
  2. DHCPv6とは? u IPv6⽤用のDHCP.IPv4の時のDHCPとは別物. u DHCPv6メッセージのオプションを⽤用いて,以下の様なことができる u DNSサーバーの通知 u プレフィックスオプションの通知(DHCPv6-PD(後述) u

    IPv6アドレスの付与 u IPv6は接続時にリンクローカルアドレスでIP通信ができるので, DHCPv6の通信 は全てIP(UDP/IP)で通信する. u クライアント : 546/UDP u サーバー : 547/UDP
  3. Solicitメッセージの構造 Solicit: (1) ⻑⾧長さ トランザクションID 8 0 16 32(bit) クライアント識識別⼦子:

    (1) オプション⻑⾧長 クライアントのDUID DUID: DHCP固有識識別⼦子.リンク層アドレスなどから⼀一意に決定される オプション部
  4. Advertiseメッセージの構造 Advertise: (2) ⻑⾧長さ トランザクションID 8 0 16 32(bit) クライアント識識別⼦子:

    (1) オプション⻑⾧長 クライアントのDUID サーバー識識別⼦子: (2) オプション⻑⾧長 サーバーのDUID オプション1 オプション2
  5. アイエエエ Solicit,PDオプション ナンデ u RFC3633に「SolicitにPDオプション⼊入れて,Advertiseで返していいよ」と書い てある. u The requesting router

    then transmits a Solicit message containing an IA_PD option describing the IA_PD. Delegating routers that can delegate prefixes to the IA_PD respond to the requesting router with an Advertise message. u ルーターを選ぶとき参考にするために使⽤用するとのこと u The requesting router may include prefixes in the IA_PDs as a hint to the delegating router about specific prefixes for which the requesting router has a preference. u プレフィックスがほしいだけならAdvertiseについてるPD取得すれば良良さそう u Request, Replyパケット書くのめんどくさい(⼩小声)
  6. PDオプションの付いたSolicitメッセージ Solicit: (1) ⻑⾧長さ トランザクションID 8 0 16 32(bit) クライアント識識別⼦子オプション

    IAID(Zero-fill) プレフィックス: (26) オプション⻑⾧長: (12) プレフィックス オプション T1(Zero-fill) T2(Zero-fill)
  7. PDオプションの付いたAdvertiseメッセージ Advertise: (2) ⻑⾧長さ トランザクションID 8 0 16 32(bit) クライアント識識別⼦子オプション

    プレフィックス: (26) オプション⻑⾧長 プレフィックス オプション サーバー識識別⼦子オプション IAID T1 T2 IA_Prefix (次スライド参照)
  8. IA_Prefix IA_Prefix: (26) ⻑⾧長さ 8 0 16 32(bit) Preferred lifetime:

    infinity(0xffffffff) プレフィックス ⻑⾧長 プレフィックスアドレス(0-23bit) Valid lifetime: infinity(0xffffffff) プレフィックスアドレス(24-119bit) プレフィックス (120-127bit)
  9. DHCPv6サーバーの設定 u OSはDebian 8.0を使⽤用 u DHCPv6サーバーはwide-dhcpv6-serverを使⽤用 u sudo aptitude –y

    install wide-dhcpv6-server u /etc/wide-dhcpv6/dhcp6s.confに以下を記述して起動する. interface eth1{ allow rapid-commit; }; host hoge{ duid 00:01:00:01:1c:fb:53:ac:08:00:27:42:a9:d9; prefix 2001:db8:1111::/48 infinity; }; u sudo dhcp6s –Df eth1 サーバーが使うNIC クライアントのDUID プレフィックス
  10. コード と デモ u コード; https://gist.github.com/jitomesky/a3204946092bacef1993 u プレフィックス 2001:0db8:111::/48 が得られた

    u ※サーバーのDUIDをクライアントに流流⽤用したので,DUIDが⼀一致している(普通はダメ)
  11. 参考⽂文献 u マスタリングTCP/IP IPv6編 u IPv6の基礎について知るならまずこれを読むと良良さそう u 但しDHCPv6の詳しい解説は少ない u http://ja.wikipedia.org/wiki/DHCPv6

    u RFC3315(IPv6関連全般の話) u https://www.ietf.org/rfc/rfc3315.txt u RFC3633(DHCPv6-PD関連の話) u https://www.ietf.org/rfc/rfc3633.txt