RouterOSでステートレスDHCPv6な設定を行う

2018-06-02 15:13Blog

IPv6まわりはいまだによくわかっていない筆者です。

RouterOSもIPv6には対応しているのですが、相変わらずNGNなIPv6に対応していないので、ひかり電話なしの環境では、RAは受け取れるのですが確認する手段がないという状態です。また、RA Proxy機能も実装されていないので、bridgeインターフェースをゴニョゴニョするしかないはずです。
どうしても無理なら、ひかり電話ありのHGWの環境にすると、DHCPv6が払いだされることになるので、これならばRouterOSは受け取れるようになります。

問題はinternal、LAN側の話なのですが、通常ならRAだけで問題ないと思いますが、DNSv6な情報もクライアントに渡したい場合は、若干設定が必要なようです。

ノードのIPv6アドレス設定方法 RAは必要か? RAにプレフィックス情報が必要か? m-flag/o-flag 付加情報(DNSサーバアドレスなど)
手動 不要 手動設定
SLAAC 必要 必要 off/off 手動設定
ステートフルDHCPv6 必要 不要 on/on DHCPで配布
ステートレスDHCPv6 必要 必要 off/on DHCPで配布

参照:

どう割り振る? IPv6でのアドレス設計 (1/3):これから始めるIPv6(2) – @IT
http://www.atmarkit.co.jp/ait/articles/1109/06/news122.html

クライアント側はというと、

Windows10 Creators updateからRAでDNSサーバの情報が払い出された場合、受け取れるようになっていたんですね・・・

参照:

JPNIC Blog :: Windows10 Creators updateにしてRDNSSを試してみました。
https://blog.nic.ad.jp/blog/windows10rdnss/

とにかくDHCPv6サーバを用意してやることで、DNSv6情報を配布できるみたいです。

しかし、RouterOS側を確認してみると、そのままではRouterOSが保持するDNSv6情報配布できない場合があるようです。問題がない場合もあるみたいですが・・・

公式フォーラムを覗いていると、この問題そのものに言及している書き込みがありました。

どうやらDHCPv6オプションのrawデータそのものを編集して対応すればよいようです。

/ipv6 dhcp-server option
add code=23 name=dnsrecursivenameserver value=0x20010db800000000000000000000000220010db8000000000000000000000003
add code=24 name=domainsearchlist value=0x076578616d706c65036e657400076578616d706c6503636f6d00

がっつり16進数に書き換えてありますね・・・ Webなどには、16進数の変換してくれるサイトもあるので、それらを活用するのも手段ですが、実はWikiにはこのへんについて説明があります。

Starting from v6.8 available data types for options are:

  • 0xXXXX – hex string (works also in v5)
  • ‘XXXXX’ – string (works also in v5 but without ‘ ‘ around the text)
  • $(XXXXX) – variable (currently there are no variables for server)
  • ‘10.10.10.10’ – IP address
  • s’10.10.10.10′ – IP address converted to string
  • ’10’ – decimal number
  • s’10’ – decimal number converted to string

’’シングルクォーテーションで囲ってあげると、良しなに変換してくれます。つまり以下のようにします。

/ipv6 dhcp-server option
add code=23 name=dnsrecursivenameserver value='2001:db8::2''2001:db8::3'
add code=24 name=domainsearchlist value='example.net'

あとはipv6 ndを以下のようにして、otherフラグを設定することで、ステートレスDHCPv6な環境を構築することができると思います。

/ipv6 nd
set [ find default=yes ] other-configuration=yes

ちなみに筆者はDHCPv6サーバを設定しても、DNSv6情報が払い出されない動作がよくわからなくて、最近まで別にDHCPv6サーバを構築して、そちらから払い出すようにしていました。

今回の件を確認してから、再度RouterOSに任せるようにしたので、別に構築したDHCPv6サーバはシャットダウンしました。

今回の記事については、動作させることがメインになってしまったため、どうしてそのような動作をするのか、などが不勉強です。間違えているなどありましたらご指摘など頂けますと助かります。