linux ipv4 ipv6雙棧 (優先ipv4而不使用ipv6配置)

那個啥,不喜歡看一些背景 分析啥的 直接看紅字修改就好了。 其餘的都是冗餘部分,都是碼出來的,其餘的地方好像搜不到。經驗之談。避免你們採坑。 html


在國家網信辦推行IPv6的大前提下,進行IPv6改造工做,有在服務器上配置IPv4 和 IPv6雙棧的需求。可是調研發現配置IPv6後會出現如下幾個隱患:
linux

雙棧網絡下 IPv6優先級更高:域名解析的AAAA記錄優先級  以及網絡出口的優先級bash


首先說域名解析AAAA優先致使的問題:服務器

因爲雙棧狀況下AAAA記錄優先,域名解析會向localdns發起 AAAA 和A記錄查詢,剛纔說到有AAAA記錄優先網絡

這就埋下了隱患,也就是說域名解析的過程會等待AAAA記錄的返回(不管是否有解析記錄),若是無AAAA解析記錄會影響什麼?架構

理論上有A記錄 也就是IPv4兜底,確定有解析,可是 dns的解析過程當中,若是localdns無結果,會向上級域遞歸,直至根域查詢無果。app

這個過程會浪費掉必定的時間。這個時間也會算到dns解析過程當中,故在雙棧的狀況下 一些域名的解析可能會緩慢,進而影響到服務。curl


而後是 網絡出口IPv6優先致使的問題:ide

網絡架構的變動,通常的服務器都不配置公網IP,都是經過nat/snat出公網的,在進行改造後 直接經過IPv6出公網,不通過nat。對網絡架構是一種改造。測試

可能致使的問題:被調用端獲取到的IP已經變化,相關IP段的受權須要修改。

另外,經過IPv6訪問,可能出現質量不穩定:大網環境不穩定 IPv6正常測試推動過程當中,總體網絡環境 不如如今的穩定。還有 被調用方支持較弱,也就是覆蓋節點不全面 或者是灰度部分不重要的地域,服務質量沒辦法保證。


綜上,在當前狀況下 服務器上及時開啓雙棧支持IPv6也是面臨必定的問題。環境下又必須推動這件事情,那就使用折中方案。配置雙棧 可是 IPv4優先。

配置很簡單:


修改
/etc/gai.conf
precedence  ::ffff:0:0/96  100


關於爲啥修改這個能生效 往下看,其餘的blog好像沒有解釋的,擼了不少協議發現大概是這樣的,歡迎補充。


1 調研gai.conf的理論依據:

    gai.conf說明 http://www.man7.org/linux/man-pages/man5/gai.conf.5.html 

        gai.conf - getaddrinfo(3) configuration file  系統調用getaddrinfo(3) 可能獲得多個地址,系統根據RFC3484選取最優地址。

        RFC容許管理員修改/etc/gai.conf 實現動態更改地址排序規則。

        image2020-1-6+21%3A18%3A27.png?version=1&modificationDate=1578317588000

    RFC3484協議  https://tools.ietf.org/rfc/rfc3484.txt 

    RFC  網絡協議的聖經


       10.3. Configuring Preference for IPv6 or IPv4

        默認狀況下IPv6優先級高於IPv4,應用程序優先使用IPv6地址。能夠經過賦予 ::ffff:0:0/96 更高的優先級實現IPv4優先級高於IPv6。

        注: ::ffff:0:0/96 IPv4/IPv6轉換地址 (IPv4-mapped IPv6 address)

        image2020-1-6+21%3A18%3A56.png?version=1&modificationDate=1578317588000

/etc/gai.conf  默認是缺省的,無配置。

默認的配置爲:

           label  ::1/128       0
           label  ::/0          1
           label  2002::/16     2
           label ::/96          3
           label ::ffff:0:0/96  4
           precedence  ::1/128       50
           precedence  ::/0          40
           precedence  2002::/16     30
           precedence ::/96          20
           precedence ::ffff:0:0/96  10
precedence 的IP段說明:

Prefix              Precedence        Label
::1/128             50                       0
::/0                   40                       1
2002::/16         30                       2
::/96                 20                       3
::ffff:0:0/96       10                       4

0:0:0:0:0:0:0:1/128 50 0 單播地址 環回地址 等同於IPV4的127.0.0.1
0:0:0:0:0:0:0:0/0 40 1 缺省路由 等同於IPV4 0.0.0.0 
2002:0:0:0:0:0:0:0/16 30 2 可聚合全球地址
0:0:0:0:0:0:0:0/96 20 3 ipv4兼容地址
0:0:0:0:0:ffff:0:0/96 10 4 IPv4映射地址(這個地址網絡上信息較少,地址範圍::: ffff:0.0.0.0~:: ffff:255.255.255.255 地址數量128−96 = 2 32 = 4 294 967 296,用於軟件,目的是IPv4映射的地址。 )

來源於維基百科,國內的那貨死活搜不出來。

Prefix Precedence Label Usage
::1/128 50 0 Localhost
::/0 40 1 Default unicast
::ffff:0:0/96 35 4 IPv4-mapped IPv6 address
2002::/16 30 2 6to4
2001::/32 5 5 Teredo tunneling
fc00::/7 3 13 Unique local address
::/96 1 3 IPv4-compatible addresses (deprecated)
fec0::/10 1 11 Site-local address (deprecated)
3ffe::/16 1 12 6bone (returned)

 

2 配置驗證:

        選取服務器進行測試,並配置IPv6地址:


並設置/etc/gai.conf:precedence ::ffff:0:0/96 100

服務器具有雙棧

image2020-1-6+21%3A21%3A36.png?version=1&modificationDate=1578317588000

 

服務器的雙棧可以出公網

image2020-1-6+21%3A23%3A30.png?version=1&modificationDate=1578317588000

 

默認配置下 系統有優先使用ipv6(這裏使用wget測試,curl dig ping等其餘的測試都有IP版本之分,只要指定版本就不算系統優選了):

image2020-1-6+21%3A25%3A41.png?version=1&modificationDate=1578317588000

 

image2020-1-6+21%3A28%3A11.png?version=1&modificationDate=1578317588000

 

修改優先級:

image2020-1-6+21%3A29%3A30.png?version=1&modificationDate=1578317588000

image2020-1-6+21%3A29%3A53.png?version=1&modificationDate=1578317588000

 

屢次測試 可以穩定路由。

 

 

3 測試結果:

        在修改優先級 ::ffff:0:0/96 >= 40 時 服務器優先使用IPv4地址。可按照文檔設定爲100。

測試的鏈接:

 wget -SO /dev/null weixin.qq.com

        wget -SO /dev/null https://k.sinaimg.cn/n/default/1_img/upload/3933d981/300/w1620h1080/20200105/f33b-imrkkfy0727359.jpg/w640slw.jpg

 

結論:

        測試結果顯示 修改該優先級可以達到服務器在雙棧的狀況下,優先使用IPv4。

        該配置 可能會致使後續 使用IPv6失敗的狀況,須要在之後的改造過程當中注意。

        修改/etc/gai.conf ipv4的優先級的方式 是否正確 是否會引發其餘的問題。 協議裏面的內容比較多,包括不少目的地址選址方面的問題。須要關注下。



另外,根據RFC協議中的內容,我這進行了測試,若是有AAAA記錄 可是IPv6地址不通,仍使用IPv4地址,與存活探路有關。不過程序處理須要消耗時間,得不償失。建議直接規避吧。

相關文章
相關標籤/搜索