201503261246使用 IPv6 DualStack 連線速度變慢

  最近剛把 DNS 服務增加 IPv6 的查詢功能,也開始導入使用者同時使用 IPv4 與 IPv6 的環境,對於使用者來說很簡單,只需要在網路設定上開啟 IPv6 自動取得IP或手動設定後,現今的作業系統都能幫你處理並行的問題。問題在哪?DNS OK、USER PC OK ... 但是網際網路上的伺服器服務卻不一定有設定 IPv6 , IPv4 連線是通的,這就會造成連線初期很慢、很鈍,要過好幾秒鐘才能連上,連上後就正常了。

-------------------------------------------------------------------------------------

這問題的原因在 IPv6 連線的優先權高於 IPv4 ,於是作業系統會先以 IPv6 連線 (如果對方伺服器在 DNS 有設定 IPv4, IPv6 ,但主機本身卻還沒設定 IPv6 地址,意即查得到連不到),這問題常會發生在 IPv6 導入過渡期。

① Client 透過 IPv4/IPv6 連線到 DNS 查詢目的網域 www.abc.com 的IP位址
② DNS 回報目的 www.abc.com 的 IPv4 跟 IPv6 兩個 IP 位址
③ Client 以 IPv6 連線到從 DNS 問到的目的 IPv6 位址
正常情況連不到就斷線了,可是作業系統很聰明,他知道目的主機分別有 IPv4 跟 IPv6 的地址,當 IPv6 連不到時,他會改用問到的 IPv4 地址去連線
④ Client 以 IPv4 連線到目的主機
⑤ 目的主機回應後續的服務連線


## 使用 nslookup 跟 ping 指令來觀察 ###

沒使用 IPv6 目的主機的 nslookup 回應
名稱: www.nthu.edu.tw
Address: 140.114.69.135

C:\>ping www.nthu.edu.tw
Ping www.nthu.edu.tw [140.114.69.135] (使用 32 位元組的資料):

使用 IPv6 目的主機的 nslookup 回應 (可以看到回應有包含 IPv4 跟 IPv6 )
名稱: www.nctu.edu.tw
Addresses: 2001:f18:113:41::202
2001:f18:113:40::36
140.114.60.159
210.61.2.219
140.113.40.36
140.113.41.202

C:\>ping www.nctu.edu.tw
Ping www.nctu.edu.tw [2001:f18:113:40::36] (使用 32 位元組的資料):

-------------------------------------------------------------------------------------

所以慢、頓是因為 ③ 等待連線失效的時間,才會改用 IPv4 的方式連線
那有辦法修改連線的優先順序嗎?可以~修改 使用者電腦 Client 端的連線順序

--- Windows 修改 IP v4 / v6 連線順序 -----------------

* 使用 netsh 指令查詢順序  (開啟命令提示字元,執行 cmd)
netsh interface ipv6 show prefixpolicies

正在查詢使用中的狀態...
優先順序 標籤 首碼
---------- ----- --------------------------------
50    0    ::1/128
40    1    ::/0
30    2    2002::/16
20    3    ::/96
10    4    ::ffff:0:0/96
5      5    2001::/32

其中的...
::ffff:0:0/96    -- 指的是 IPv4 的設定,意即提高這項的優先順序,就可以決定先走 IPv6 或 v4

S1:開啟系統管理員命令提示字元
S2:執行指令
       netsh interface ipv6 set prefixpolicy ::ffff:0:0/96 60 4
S3:觀察優先順序
       netsh interface ipv6 show prefixpolicies
S4:再用 ping 來測試,就會發現原本走 IPv6 的變成「先」走 IPv4 了


上圖的目的網路無法連線,只是因為 ICMP 被關閉了。

 

--- 那 Linux  修改 IP v4 / v6 連線順序  ----------------

簡單的說,只要對應修改 /etc/gai.conf 就可以了 

A call to getaddrinfo(3) might return multiple answers. According to RFC 3484 these answers must be sorted so
that the answer with the highest success rate is first in the list. The RFC provides and algorithm for the
sorting. The static rules are not always adequate, though. For this reason the RFC also requires that system
administrators get the chance to dynamically change the sorting. For the glibc implementation this can be
achieved with the /etc/gai.conf file.

但是~ /etc/gai.conf  有這個檔案,但預設是空的,你要依照他的格式去編輯內容,如底下的例子內容
sudo vi /etc/gai.conf  然後新增底下文字

label ::1/128 0
label ::/0 1
label 2002::/16 2
label ::/96 3
label ::ffff:0:0/96 4
precedence ::ffff:0:0/96 60
precedence ::1/128 50
precedence ::/0 40
precedence 2002::/16 30
precedence ::/96 20


Reference :

微軟 Microsoft 修正 IPv6 偏好問題說明:http://support.microsoft.com/zh-tw/kb/2533454   
netsh 指令說明:https://msdn.microsoft.com/zh-tw/library/cc740203%28v=ws.10%29.aspx   
http://www.ipv6.org.tw/docu/elearning8_2005/1009402616b-19.pdf   
Linux http://mirrors.bieringer.de/Linux+IPv6-HOWTO/resolver.html      
IPv6 升級實作技術手冊第 1.2 版    https://www.gsnv6.tw/docu/SOP/04.IPv6_SOP_Linux_Server.pdf     

回應
關鍵字
Google Search
Google
累積 | 今日
loading......
平均分數:0 顆星
投票人數:0
我要評分:
Google