去年底公司的網路換到 Hinet,主要的伺服器也搬到了中華的 IDC,其中一項優點就是可以申請 IPv6 的 IP,內部兩條線路加上IDC三條線各配了 2^16 個 IP 。
申請到 IP,當然不是看爽的,開始規劃全面導入 IPv6

【網路環境】
首先在線路與防火牆設定部分,就遇到了問題,花了很多的時間去測試,IDC 的還比較簡單,公司網路部分,尤其在 FortiGate 的設定,找不到一份完整的 IPv6 設定說明,這一部分最後當然就只能要請求支援,感謝中華電信高雄營運處至聖服務中心的陳建仁經理,以及工程師劉彥岐的協助, 終於讓網路可以同時使用 IPv4/IPv6 兩種架構。
網路通了之後,就開始一一的實作對外服務部分,為了避免文章過於冗長,以下將只列出實際碰到的問題,讓有需要的大大不必再走冤枉路。
【DNS 設定與解析測試】
網路沒問題之後,開始將一些對外服務的網域名稱,加入一筆 IPv6 的主機紀錄(AAAA Record),這一部分建議獨立設定一筆,以方便測試。
例如您的網域名稱是 example.tw,您原本已經有一筆A紀錄 www.example.tw 對應到 IPv4 的 IP
建議先新增一筆 AAAA ipv6.example.tw 對應的 IPv6 的 IP
等測試過沒問題了,再新增一筆 AAAA 將 www.example.tw 對應到IPv6 的 IP。
簡單的整理一下:
A Record: www.example.tw 對應到 192.168.1.100
AAAA Record: ipv6.exemapl.tw 對應到 fe80::352c:728b:dce0:dce8
後續的 IPv6 連線測試都針對 ipv6.example.tw 進行測試即可,這樣可以保證一定是使用 IPv6 連線。
確認沒問題了,再新增一筆
AAAA Record: www.exemapl.tw 對應到 fe80::352c:728b:dce0:dce8
也就是當其他人使用 nslookup 查詢 www.example.tw 這個網址時,將得到兩筆 IP,如果對方支援 IPv6 ,預設將會以 IPv6 為主(實測並非如此,常常是以最新的一筆 DNS Cache 為主 )。
【網站部分】
完成了 DNS 測試,先進行網站的設定。
公司的網站都是架在 Windows Server 上,所以只要 Windows 支援 IPv6,應該就沒太大問題。
Windows Server 2008(IIS7)以後的原則上沒有什麼問題。
如果您用的是 Windows Server 2003 (IIS 6),您必須先更新到 R2 版本,同時務必要注意以下幾點說明:
IIS 6 只有 HTTP 部分支援 IPv6,其他 SMTP、FTP 並沒有支援。
一旦啟用 IPv6 所有的站台都全部支援,無法個別設定。
IP 過濾部分不支援 IPv6,因此您無法將 IPv6 的 IP 列入黑名單,不過這不是什麼大問題,最大的風險在於如果您限定只允許某些 IPv4 的 IP 可以連線,對方如果用 IPv6 連進來就不受限了。
這一部分可能一下轉不過來,記著一個原則,IPv4 和 IPv6 是兩種不同的通訊端Socket,所以過濾機制要分別設定。當您設定只允許某些 IP 可以連線時,只是表示,如果對方是使用 IPv4,而且是使用這些IP,就可以連進來,否則就拒絕。同樣的針對 IPv6 您必須另外設定過濾條件,但是不幸的是,IIS6 的 IP 過濾機制不支援 IPv6。
詳細的限制條件請參考 微軟網站How IIS 6.0 Supports IPv6 (IIS 6.0)
還一個要注意的地方是,如果您的網站有紀錄訪 IP 的紀錄,請先確認一下資料庫欄位開得夠不夠大,否則可能造成寫入失敗的錯誤,如果程式裡的變數是以陣列方式宣告,也要注意陣列的大小夠不夠。
IPv4 255.255.255.255
IPv6 ffff:ffff:ffff:ffff:ffff:ffff:ffff:ffff
設定完成就可以開始紀行測試,目前您只要搜尋一下 IPv6 測試,就可以找到一堆測試網站。以下是Hinet的測試網站,請參考
HiNet IPv6網站檢測系統
【Mail Server】
Mail Server 架設就比較簡單,因為是用公司自己開發的 Rainbow Mail Server,如果有問題,直接叫研發團隊改就可以了。目前最新的版本已完全支援 IPv4/IPv6 雙 IP 架構,不需要額外的設定,只要系統支援 IPv6,就會自動啟用 IPv6 的服務。完全配合系統自動切換,如果系統同時支援 IPv4/IPv6,Mail Server 就同時支援兩種 IP 架構。
軟體架設其實很簡單,真正的問題在實際" 上線收發測試"部分。
原本以為很簡單,研發團隊也在內部用了 5 台電腦先實作一個測試環境,但是上線之後一直都測不過。
一開始是使用 Gmail 進行測試,為了確保是使用 IPv6 連線,所以將作業系統的 IPv4 停用。
首先利用 outlook 透過 Rainbow Server 寄信的 Gmail 信箱,可以正常的收到信,所以確認寄信部分沒問題了。
接下來測試收信部分,怎麼收就是收不到,但是只要將 IPv4 開啟,就立刻收到信。
後來又找到一個測試網站,gogo6.com 也有提供 IPv6 Mail Server 測試,只要寄信到 bouncer@freenet6.net ,如果您是用 IPv6 的 IP 寄的,他就會回信。
但同樣的等到天荒地老也等不到回信。
到底是線路問題?還是軟體問題?還是 DNS 設定問題?

GMail 明明收到信了,所以理論上 gogo6 也收搜得到信,沒有回信難道我們的網路不是走 IPv6,但是 IPv4 明明關閉了。
為控制變因,首先在 mail server 上設定 pre-defined MX Record,強制寄到 Gmail 的主機名稱,同時收信之後檢查郵件標頭,確認是使用 IPv6 寄信。
到此,至少確認寄到 Gmail 和 gogo6 的都是使用 IPv6,理論上 gogo6 應該會回信,收不到信,難道是 IPv6 的 SMTP 沒寫好?
整理一下:
可以正常使用 IPv6 寄信,但是收不到回信,如果開啟 IPv4 就可以收,但是開啟 IPv4 去側就不準。
gogo6 必須使用 IPv6 寄信才會回信,所以就算開啟 IPv4 對測試結果應該沒有影響。所以就開啟 IPv4進行測試,果然收到信了。
後來在網站 http://www.gogo6.com/freenet6/tools 的說明看到一段文字
Please note that the bouncer is only reachable over IPv6, however, the reply message may be mailed to you over IPv4. Check message headers of the reply message.
看到這段文字,在搜尋一下 GMail IPv6 的文章,在一段討論內容中,同樣的說明,只有收信支援 IPv6,寄信還是使用 IPv4。
"I confirmed we currently don't support delivery to IPv6 only servers. I don't have an estimate on when this will be supported, but I will update this thread when it is supported or I get an estimate."
http://productforums.google.com/forum/#!topic/gmail/Ixp8B6pW-o4
IPv6 delivery is "not supported" on GMail and Google Apps
http://www.tunnelbroker.net/forums/index.php?topic=2567.0;prev_next=prev#new
For server-to-server, Gmail can receive IPv6 mail, but cannot send it yet.
http://productforums.google.com/forum/#!topic/gmail/VQqeu3iDQ94
原來絕大部分號稱支援 IPv6 的 Mail 服務,都是做一半的。那要怎麼測呢?難道這就是所謂的支援 IPv6?
後來終於找到一個網站,可以支援 IPv6 收發,而且回覆非常快,直接將您的郵件標頭回覆給您。
echo@v6address.com
http://www.v6address.com/content/email-autoresponder
利用 v6address.com 的測試功能,終於可以安心確認 Mail Server 可以支援 IPv4/IPv6 雙 IP 架構了。
接下來還有兩個問題,需要處理:
【垃圾郵件部分】
IP過濾必須分別設定,而且IPv6的 IP數太多,列舉式的 IP 過濾機制很難發揮效果,目前各大垃圾郵件黑名單資料庫都不支援 IPv6。
IPv6 沒有所謂浮動 IP 的觀念,所以拒絕浮動 IP 寄信的功能也將失效。
其他主要的寄件認證功能就剩下 SenderID(SPF)、DKIM(DomainKeys)、GreyListing 這三種。
SenderID 目前設定的比例還不是那麼高,有的甚至連外寄連線的主機名稱都直接用電腦名稱,如果啟用 SenderID 驗證,鐵定擋掉一堆正常的客戶。
DKIM 更不要說了,啟用的少之又少。
剩下 GreyListing 灰名單驗證,看來是比較可行又簡單。
不過IP灰名單驗證可能會擋掉像 Gmail 的信,因為 Gmail 的重寄機制幾乎都是使用不同 IP 在寄送,所以如啟用了IP 灰名單驗證,Gmail 的信可能會擋掉。有人問過 Gmail 這個問題,為什麼重寄的時候不用原來 IP,Gmail是建議使用灰名單機制,改用 SPF或是將 Gmail 加入安全名單。
【MX設定部分】
目前 IPv4/IPv6 Dual Stack 的設定有兩種。
選項一:
兩組 MX Record 分別對應一組 A Record (例如 mail.example.tw) 與 AAAA Record(例如 ipv6mail.example.tw)
當外部的寄件者使用 IPv4 寄信進來,如果先找到第二組 MX ,因為對應到的是 IPv6 可能發生連線失敗,依據規範就會找下一筆 MX,如果是對應到 IPv4 的就可以成功。
使用這種架構有個好處,不管你有多少筆 MX,依據規範,Mail Server 都會依據優先順序一一去嘗試。
選項二:
同一組 MX Record 對應一個網址,例如 mail.example.tw,而 mail.example.tw 同時對應到 IPv4 與 IPv6兩個 IP。
Gmail 目前就是這樣的設定,雖然可以查到 5 組 MX,但是每一筆都對應兩種 IP。
這種設定方式有個缺點,有的 Mail Server的 DNS查詢機制在透過網址解析 IP,網址和IP是一對一的(round robin的觀念,每次取得一組,以達到 load blance 的目的),因此只會取得一組 IP 進行連線。
雖然有 5 組 MX,如果運氣太好,每一組解析到的都是 IPv6,那就會發生連線錯誤。
雖然目前大部分的 mail server 都已具有處理這類問題的能力,連線失敗,會嘗試同一個網址是否可以解析到其他的 IP,但是實際測試結果還是有些 mail server 不支援。
以上是實作 IPv4/IPv6 的一些經驗分享,僅供參考,如果有何錯誤或建議歡迎提出指正。