關閉/啟用 IPv6 臨時位址 (temporary address, privacy extensions)

IPv6 環境已經沒有 NAT 這回事了(至少目前是這樣),使用 global IPv6 位址連上 internet 之後,就可以與其他人互通。

一般來說 IPv6 位址 (128 bits) 由 Prefix 和 Interface ID 所組成。 Prefix 可視為網路編號,因此除非網路改號,否則是不變的。而 Interface ID 一般是用 EUI-64 的方法,參照 MAC 位址來產生的,所以只要是利用同一張網路卡,其 Interface ID 也就不會變。

因此,雖然 IPv6 在 internet 直接互連可以增加效率、非常便利,但一直使用相同的位址,很容易被壞人盯上。所以 RFC 4941 定義了 IPv6 Privacy Extension,讓 IPv6 host 可以隨機產生 Interface ID,定期更換,以提高安全性。這樣的位址又有人稱為臨時位址 (temporary address)。

因此,雖然 RFC 裡面建議預設不要啟動,但常用的作業系統 (Windows, Mac, Linux) 都會優先使用臨時位址連線。

繼續閱讀 “關閉/啟用 IPv6 臨時位址 (temporary address, privacy extensions)”

IPv6 Unique Local Address

在多次的演講與簡報中,發現大家還不是很熟悉 IPv6 的私有位址概念。一些很早開始接觸 IPv6 的人只知道 IPv6 site-local 位址就是 IPv6 版本的 RFC1918。殊不知,site-local 位址因為有太多的缺點已經被捨棄了。新版本的私有位址我們稱為 Unique Local Address

為什麼要叫做 “Unique Local Address”呢?因為:一、這些位址只在本地(local/isolated)網路才是唯一。二、不用 “private” 是因為 private 一詞用來描述 routing 的範圍。

那麼 Unique Local Address (ULA) 和 IPv4 RFC1918 有什麼相同或是不一樣的地方?

就如同 RFC 1918 規定了 10.0.0.0/8、172.16.0.0/12、192.168.0.0/16 三個 private 網路 prefix , IANA 也規定了 ULA 的 prefix 編號:FC00::/7。

其位址格式如下:

ULA Address Format

若再加上 L-bit,那麼 ULA 就分成兩部分:FC00::/8 與 FD00::/8。這兩個 prefix 有著不同的使用方式。

IPv4 RFC 1918 強調的是,既然是 private address,任何人都可以隨意使用不需註冊,但這些網段不能進入 global internet routing。

FC00::/8 的 ULA 網路,當然也不能參與 global routing,但是,仍然需要註冊(上圖 “Global ID” 欄位內的數值),以維持獨特性 (unique)。由於是需要註冊,所以這類的網路位址是可以放在 global DNS 裡面的。雖然有各種註冊管理的方法被提出,到目前為止還沒有得到共識,因此這個 prefix 目前並沒有使用的意義。

相反的,FD00::/8 的 ULA 網路,”Global ID” 欄位中的數字可以任意設定,不需註冊。但是 RFC 中仍然建議使用亂數隨機的方法產生,以避免與其他網路衝突。也許有人會問,既然都是設定給私有網路,為什麼還要怕衝突?在目前 IPv4 環境中,時常聽到公司合併後位址衝突,而產生極大的困擾。因此如果能夠依循 RFC 所建議的方法,盡量產生不會衝突的網路號碼,就可以避免如此的困擾。

建議的演算法:trunc( SHA-1( local time . local EUI-64 ), 40bits)

如果需要使用這樣的方法來產生 prefix 的話,可以不用自己寫程式算,直接到 SixXS 的網頁輸入相關資料,就會產生專屬的 prefix。產生之後,還可以在上面註冊(非正式)以避免與別人衝突。

另外,因為不需要註冊,無法完全避免衝突,所以 FD00::/8 的網路,不能放在 Global DNS 中,當然也不能放入 global routing 中了!

在 iPhone 上同步 Google 聯絡人與行事曆

我的電腦與 iPhone 上的行事曆與聯絡人一直以來都是使用 Google 的雲端服務。iPhone 一直以來都是使用 Google Sync,利用 Exchange 的方式與 Google 同步。

1

不過,上週 Google 宣布了一些服務的冬季大出清,其中 Google Sync 從明年 1 月 13 日起,不再接受新設備的註冊(除非付費使用 Google Apps for Business)。這樣一來,明年之後,如果購買新的行動裝置該怎麼辦呢?

繼續閱讀 “在 iPhone 上同步 Google 聯絡人與行事曆”

IPv6 如何決定封包送到 router 還是本地網路?(IPv6 on-link determination)

研究所一年級上學期時修了一門恩師的“電腦網路”,第一次考試裡面有一題到現在還記憶猶新的考題:使用瀏覽器連線到台大網站時,電腦(網路)做了哪些事?

在知道連線目的端的 IP 位址 (DST) 後,電腦必須要知道 DST 是在本地還是遠端網路。如果是在本地網路,則必須使用 ARP 取得對方的 MAC 位址;如果是在遠端網路,則必須先將封包送到 Router 去,由 Router 轉送 (當然要先使用 ARP 取得 router 的 MAC 位址)。

但是,電腦怎麼知道 DST 是在本地網路還是遠端網路呢?IPv4 是利用 netmask 與 DST 做 AND 運算,再與自己的網路位址做比對,以決定是否在本地網路。(參閱 RFC 1122)

IPv6 不是這樣子做的!網路是不是本地端,與 IP 位址(還有 netmask) 是沒有關係的。

IPv6 預設只將 link-local 網段 (FE80::/10) 視為本地網路。那麼,IPv6 要怎麼判斷 DST 是否在本地網路呢?

當 IPv6 hosts 利用 Router Advertisement 取得有效 prefix 資訊的時候,如果 Prefix Information Option (PIO) 的欄位裡面的 L-bit (on-link) 為 1,那麼該 prefix 就是本地網路 (on-link)。而這個 prefix 就會被加入或更新 IPv6 的 Prefix List。所以 IPv6 hosts 的 Prefix List,其實就是記錄有哪些 prefix 是本地端的。當然,這個 Prefix List 也可以手動設定。

如果封包目的地 MAC 位址不存在於 Neighbor Table (等同於 IPv4 的 ARP Table),目的地也是屬於本地網路 (on-link prefix),IPv6 hosts 便會開始 address resolution (NS/NA),以求得對方的 MAC 位址。其他的,IPv6 hosts 會將封包送到 default router 轉送。如果 hosts 沒有 default router,就會產生 Neighbor Unreachable 的訊息。

詳細做法請參閱 RFC 5942

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 位址啦!