Surprise! DHCPv6 不會做的事

IPv4 的 DHCP 位址發放與 DHCPv6 有著很大的不同。下面就列出一些 DHCPv6 讓人意想不到的地方。

  • 不再只是 DORA 模式(Discover, Offer, Request, Acknowledgement)

不管是 SLAAC (Stateless Address Autoconfigure) 或是 DHCPv6,IPv6 host 的介面需要取得位址時,都會先送出 Router Solicitation (RS) 訊息,接著 Router 會回覆 Router Advertisement (RA)。

如果 RA 回覆必須使用 DHCPv6 取得位址 (RA 的 M-bit 為 1 ),才會開始啟動 DORA 四步驟。

值得一提的是,在 IPv4 DHCP 中,DORA 四步驟是不能避免的,初學者往往會覺得很疑惑,為什麼不使用後面的兩個步驟(Request, Acknowledgement)就好呢?

事實上,IPv6 確實存在這樣的選項:Rapid Commit。Client 端與 server 端都啟動 Rapid Commit 之後,就可以使用兩步驟 (Solicit, Reply) 取得 IPv6 位址。Cisco IOS 對於 Rapid Commit 的設定方法如下:

Server:  Router(config-if)#ipv6 dhcp server poolname rapid-commit

Client:  Router(config-if)#ipv6 dhcp client pd prefix-name rapid-commit

  • DHCPv6 並不會給 prefix length

IPv4 DHCP 會提供 subnet mask 的資訊,但 DHCPv6 並不會。Prefix length (subnet mask) 的訊息放在 RA 中 “prefix information” 內的 “prefix length” 欄位

  • DHCPv6 並不會給 default gateway 位址

IPv6 hosts 的 default router 位址並不是由 RA 訊息或 DHCPv6 訊息提供的。當收到 RA 訊息時,IPv6 hosts 會取得封包的來源地 IPv6 位址。由於 RA 訊息的來源地位址一定是 link local 位址,所以 IPv6 hosts 的 default router 位址就當然一定會是 link local 位址啦!

讓用戶端只用 DHCPv6 的位址:IPv6 Prefix “no-autoconfig”

當 Router 的 M-bit (DHCPv6) 設為 1 後,用戶端除了會向 DHCPv6 Server 取得一個位址以外,仍然會使用 RA 所給的 Prefix 生成一個 SLAC 位址(Windows 與 Mac 會再生一個 privacy extension 的位址),總共取得/生成兩個 IPv6 位址(Windows 與 Mac 為三個)。Mac OS 的例子如下: 繼續閱讀 “讓用戶端只用 DHCPv6 的位址:IPv6 Prefix “no-autoconfig””

Ubuntu Linux Desktop IPv6 位址設定方式

使用 Linux 時,IPv6 位址怎麼設定?下面以 Ubuntu 11.04 為例,說明各種 IPv6 位址設定的不同含義。

在 Ubuntu 的”編輯網路連線”中,點選“IPv6設定”,有關 IPv6 位址的設定方法如下圖幾種:

本文只說明紅框中的前三樣,因為一般人一定不懂為什麼”自動“還要分三種? 繼續閱讀 “Ubuntu Linux Desktop IPv6 位址設定方式”

最簡易的 IPv6 環境設定— stateless DHCPv6 (使用 IOS DHCPv6 server)

要建立 IPv6 的網路,第一個問題便是如何讓用戶端取得 IPv6 的各項位址資訊。當然最簡單的就是 IPv6 autoconfiguration 了。

用戶端設備雖然可以透過 Router 的 RA (Router Advertisement) 取得 IPv6 prefix、Gateway 位址,但是最重要的 DNS 位址卻沒有,也無法透過 RA 取得。 繼續閱讀 “最簡易的 IPv6 環境設定— stateless DHCPv6 (使用 IOS DHCPv6 server)”

IPv6 位址的取得 (Autoconfiguration and DHCPv6)


和 IPv4 相同,介面的 IPv6 位址可以是手動設定(static)或是自動設定。

手動設定沒什麼好說的。這篇文章要講的是自動設定的種類與方法。

在 IPv6 的環境裡,Router 的介面會定期的使用 multicast 發出 Router Advertisement (RA)。

這個 RA 包含了這個網路(網段)的 ipv6 prefix 資訊。

如果我們把介面設定成 IP 位址自動設定(autoconfiguration),電腦的網路卡收到 RA 之後,會利用這個 Prefix 再加上網路卡的 Interface ID (通常是使用 EUI-64 來取得) 組合成 128 bits 的 IPv6 位址。

But wait! 只有 IPv6 位址和 default gateway,上網會寸步難行吧。至少還需要 DNS server 的位址啊!

如果我們來看 Router Advertisement 的格式 (RFC 4861) ,你會發現,RA 真的只會給 IPv6 prefix 而已。但是,如何讓電腦順利的上網呢?

我們把 RA 的格式拿出來看:

raformat

紅框的地方,叫做 Router Advertisement Option (上圖為舊的資訊,最新的定義在 RFC5175,不過上圖足以解釋本文)。我們要看的就是其中的 M bit 與 O bit。

M: Managed Address Configuration 這個 bit 如果是 1,代表要請電腦另外再去跟 DHCPv6 要 IPv6 Prefix

O: Other Configuration 這個 bit 如果是 1,代表請電腦去跟 DHCPv6 要 DNS 等等資訊。

我們常聽到的 stateful DHCPv6 與 stateless DHCPv6,就是由 M bit 與 O bit 的組合不同而來的。

  1. M=1, O=0 or 1: 所有資訊(包括 Prefix、DNS等等資訊)都請電腦使用 DHCPv6 取得。(Stateful DHCPv6)
  2. M=0, O=1: 使用 RA 裡面的 Prefix,但是 DNS 等等資訊請電腦使用 DHCPv6 取得。(Stateless DHCPv6)
  3. M=0, O=0: 電腦將只得到 Prefix,無法取得 DNS 等資訊。(Stateless autoconfiguration)

所謂的 stateful 就是必須要由 server 去動態維護、保留其對應狀態的資訊。會有這種需求的,就是 IPv6 位址的指派、對應。

而 stateless 則是不須動態維護的資訊,如 DNS 等資訊,因為這些不會動態改變,都是固定的資訊。

所以當 prefix 由 DHCPv6 來提供的時候,因為 DHCPv6 server 會有對應表(binding table),所以這種就叫 stateful DHCPv6。

而如果 prefix 是由 router 提供,因為 router 不會留存這個 binding table,所以這種方式就叫做 stateless autoconfiguration or stateless DHCPv6。

那麼,Cisco IOS 如何設定 M bit 與 O bit 呢(也就是如何選擇 stateful DHCPv6/stateless DHCPv6/stateless autoconfiguration)?

設定 M bit:

Router(config-if)# ipv6 nd managed-config-flag

設定 O bit:

Router(config-if)# ipv6 nd other-config-flag

至於,有沒有方法不須 DHCPv6 直接從 RA 裡得到 DNS 資訊?有,不過目前(Oct. 2009)還不是標準,請參見 RFC5006。在 router 端,Linux/BSD上的 radvd (Router Advertisement Deamon)有支援 RFC 5006。在 client 端,ndisc6 裡的 rdnssd 有支援 RFC5006。不過,我都沒有試過。Cisco/Juniper 也都尚未支援 RFC5006。