在我的部落格中,最受歡迎的文章「IPv6 位址的取得 (Autoconfiguration and DHCPv6)」是在 2009 年寫的。過了八年之後,最近因緣際會,做了一些設定和除錯之後,發現有一些更新,所以就再寫一篇。
在這篇 2009 年的文章中提到,Router Advertisement (RA) 沒有辦法提供終端設備 DNS server 的位址,還必須依靠 DHCPv6 提供。在當時,雖然已有 RFC 5006 試著定義在 RA 裡面附上 DNS server 的位址,但仍然缺乏作業系統的支援。
事情有了變化,在 2017 年 3 月,RFC 5006 被 RFC 8106 (Recursive DNS Server, RDNSS)取代,並且進入了標準階段 (Standard Track),Cisco IOS 、Mac OS 也已經開始支援,Windows 10 在 2017 年的 Creators Update 也終於加入支援了,不過,Windows 10 會優先採用 DHCPv6 的參數。
RFC 8106 裡面定義的是如何在 RA 的 Option 裡面附上 DNS Server 的位址。其 Option 格式如下圖:
Type 是由 IANA 定義的 25。
Length 則是以 8 bytes 為單位的長度,最少為 3 (3 * 8 = 24 bytes,扣掉 Type 與 Length 各 1 byte,共 2 bytes,再扣掉 Lifetime 的 4 bytes,還有 Reserved 的 2 bytes,剛好剩下 16 bytes,可放一個 IPv6 位址)。
Lifetime 定義的是 DNS 的有效期,以秒為單位。內容全為 1 代表永不 timeout;全為 0 代表此 Option 中的 DNS Server 位址已失效。
至於 Cisco IOS 的設定,更是簡單:
Router(config-if)#ipv6 nd ra dns server 2001:4860:4860::8888
至於 Apple iOS 與 Google Android,似乎還沒有支援!