2017 年 11 月 26 日,中共中央辦公廳、國(guó)務(wù)院辦公廳印發(fā)了《推進(jìn)互聯(lián)網(wǎng)協(xié)議第六版(IPv6)規(guī)模部署行動(dòng)計(jì)劃》
據(jù) APNIC Labs 提供的全球 IPv6 用戶數(shù)(估計(jì))及 IPv6 用戶普及率的數(shù)據(jù),截至 2017 年 11 月,全球 IPv6 用戶數(shù)排名前十位的國(guó)家/地區(qū),依次是印度、美國(guó)、德國(guó)、日本、巴西、英國(guó)、法國(guó)、加拿大、比利時(shí)、越南等,中國(guó) IPv6 用戶數(shù)排在第 13 位,如表 1 所示。而全球 IPv6 用戶普及率排在前十位的國(guó)家/地區(qū),依次是比利時(shí)、印度、德國(guó)、美國(guó)、希臘、瑞士、盧森堡、英國(guó)、葡萄牙、日本等,中國(guó) IPv6 用戶普及率僅有 0.38%,排在第 67 位。
表1 全球IPv6用戶數(shù)(估值)排名
Ipv6域名情況
Ipv6域名狀態(tài)
|
政府部門
|
其他行業(yè)
|
可使用
|
41%
|
2%
|
過(guò)渡中
|
43%
|
54%
|
不可使用
|
16%
|
44%
|
《行動(dòng)計(jì)劃》指出,將用5到10年時(shí)間,形成下一代互聯(lián)網(wǎng)自主技術(shù)體系和產(chǎn)業(yè)生態(tài),建成全球最大規(guī)模的 IPv6 商業(yè)應(yīng)用網(wǎng)絡(luò),實(shí)現(xiàn)下一代互聯(lián)網(wǎng)在經(jīng)濟(jì)社會(huì)各領(lǐng)域深度融合應(yīng)用,成為全球下一代互聯(lián)網(wǎng)發(fā)展的重要主導(dǎo)力量。
1.到 2018 年末,市場(chǎng)驅(qū)動(dòng)的良性發(fā)展環(huán)境基本形成,IPv6 活躍用戶數(shù)達(dá)到 2 億,在互聯(lián)網(wǎng)用戶中的占比不低于 20%,并在以下領(lǐng)域全面支持 IPv6:國(guó)內(nèi)用戶量排名前 50 位的商業(yè)網(wǎng)站及應(yīng)用,省部級(jí)以上政府和中央企業(yè)外網(wǎng)網(wǎng)站系統(tǒng),中央和省級(jí)新聞及廣播電視媒體網(wǎng)站系統(tǒng),工業(yè)互聯(lián)網(wǎng)等新興領(lǐng)域的網(wǎng)絡(luò)與應(yīng)用;域名托管服務(wù)企業(yè)、頂級(jí)域運(yùn)營(yíng)機(jī)構(gòu)、域名注冊(cè)服務(wù)機(jī)構(gòu)的域名服務(wù)器,超大型互聯(lián)網(wǎng)數(shù)據(jù)中心(IDC),排名前5位的內(nèi)容分發(fā)網(wǎng)絡(luò)(CDN),排名前10位云服務(wù)平臺(tái)的50%云產(chǎn)品;互聯(lián)網(wǎng)骨干網(wǎng)、骨干網(wǎng)網(wǎng)間互聯(lián)體系、城域網(wǎng)和接入網(wǎng),廣電骨干網(wǎng),LTE網(wǎng)絡(luò)及業(yè)務(wù),新增網(wǎng)絡(luò)設(shè)備、固定網(wǎng)絡(luò)終端、移動(dòng)終端。
2.到 2020 年末,市場(chǎng)驅(qū)動(dòng)的良性發(fā)展環(huán)境日臻完善,IPv6 活躍用戶數(shù)超過(guò) 5 億,在互聯(lián)網(wǎng)用戶中的占比超過(guò) 50%,新增網(wǎng)絡(luò)地址不再使用私有 IPv4 地址,并在以下領(lǐng)域全面支持 IPv6:國(guó)內(nèi)用戶量排名前 100 位的商業(yè)網(wǎng)站及應(yīng)用,市地級(jí)以上政府外網(wǎng)網(wǎng)站系統(tǒng),市地級(jí)以上新聞及廣播電視媒體網(wǎng)站系統(tǒng);大型互聯(lián)網(wǎng)數(shù)據(jù)中心,排名前 10 位的內(nèi)容分發(fā)網(wǎng)絡(luò),排名前 10 位云服務(wù)平臺(tái)的全部云產(chǎn)品;廣電網(wǎng)絡(luò),5G 網(wǎng)絡(luò)及業(yè)務(wù),各類新增移動(dòng)和固定終端,國(guó)際出入口。
3.到 2025 年末,我國(guó) IPv6 網(wǎng)絡(luò)規(guī)模、用戶規(guī)模、流量規(guī)模位居世界第一位,網(wǎng)絡(luò)、應(yīng)用、終端全面支持 IPv6,全面完成向下一代互聯(lián)網(wǎng)的平滑演進(jìn)升級(jí),形成全球領(lǐng)先的下一代互聯(lián)網(wǎng)技術(shù)產(chǎn)業(yè)體系。
按通知要求,2018 年是涉及工信部相關(guān) IPV6 任務(wù)的重要時(shí)間節(jié)點(diǎn)。我司生產(chǎn)的安全防護(hù)產(chǎn)品也要全面支持 IPV6。因此,在這里歸納 IPV6 開發(fā)中遇到的問(wèn)題及解決方案。
IPv4 地址是類似 A.B.C.D 的格式,它是32位,用 . 分成四段,用10進(jìn)制表示;而IPv6地址類似 X:X:X:X:X:X:X:X 的格式,它是128位的,用 : 分成 8 段,用 16 進(jìn)制表示;可見,IPv6 地址空間相對(duì)于 IPv4 地址有了極大的擴(kuò)充。
RFC2373 中詳細(xì)定義了 IPv6 地址,按照定義,一個(gè)完整的IPv6地址的表示法:xxxx:xxxx:xxxx:xxxx:xxxx:xxxx:xxxx:xxxx
例如: 2001:0000: 1F 1F :0000:0000:0100: 11A 0:ADDF
為了簡(jiǎn)化其表示法, rfc2373 提出每段中前面的 0 可以省略,連續(xù)的 0 可省略為 ::,但只能出現(xiàn)一次。例如:
1080:0:0:0:8:800: 200C : 417A 可簡(jiǎn)寫為 1080::8:800: 200C : 417A
FF01:0:0:0:0:0:0:101 可簡(jiǎn)寫為 FF01::101
0:0:0:0:0:0:0:1 可簡(jiǎn)寫為 ::1
0:0:0:0:0:0:0:0 可簡(jiǎn)寫為 ::
類似于 IPv4中的CDIR表示法,IPv6用前綴來(lái)表示網(wǎng)絡(luò)地址空間,比如:
2001:251:e000::/48 表示前綴為48位的地址空間,其后的80位可分配給網(wǎng)絡(luò)中的主機(jī),共有2的80次方個(gè)地址。
為了使您更好的理解 IPv6,在這里給出一個(gè)表格,以比較IPv4和IPv6地址對(duì)應(yīng)關(guān)系和區(qū)別。
IPv4地址 | IPv6地址 |
組播地址( 224.0.0.0/4) | IPv6組播地址(FF00::/8) |
廣播地址 | 無(wú),只有任播( anycast)地址 |
未指定地址為 0.0.0 .0 | 未指定地址為 :: |
回路地址為 127.0.0.1 | 回路地址為 ::1 |
公用 IP地址 | 可匯聚全球單播地址 |
私有地址( 10.0.0 .0/8、172.16.0.0/12和192.168.0.0/16) | 本地站點(diǎn)地址( FEC0::/48) |
Microsoft自動(dòng)專用IP尋址自動(dòng)配置的地址(169.254.0.0/16) | 本地鏈路地址( FE80::/64) |
表達(dá)方式:點(diǎn)分十進(jìn)制 | 表達(dá)方式:冒號(hào)十六進(jìn)制式(取消前置零、零壓縮) |
子網(wǎng)掩碼表示:以點(diǎn)陣十進(jìn)制表示法或前綴長(zhǎng)度表示法( CIDR) | 子網(wǎng)掩碼表示:僅使用前綴長(zhǎng)度表示法( CIDR) |
? IPv6 地址指定給接口,一個(gè)接口可以指定多個(gè)地址。
? IPv6 地址有作用域:
link local地址 本鏈路有效
site local地址 本區(qū)域(站點(diǎn))內(nèi)有效,一個(gè)site通常是個(gè)校園網(wǎng)
global地址 全球有效,即可匯聚全球單播地址
? IPv6 地址分類:
unicast 單播(單點(diǎn)傳送)地址
multicast 組播(多點(diǎn)傳送)地址
anycast 任播(任意點(diǎn)傳送)地址
IPv6 沒(méi)有定義廣播地址,其功能由組播地址替代
? ::/128 即 0:0:0:0:0:0:0:0,只能作為尚未獲得正式地址的主機(jī)的源地址,不能作為目的地址,不能分配給真實(shí)的網(wǎng)絡(luò)接口。
? ::1/128 即 0:0:0:0:0:0:0:1,回環(huán)地址,相當(dāng)于IPv4中的localhost(127.0.0.1),ping locahost 可得到此地址。
? 2001::/16 全球可聚合地址,由 IANA 按地域和ISP進(jìn)行分配,是最常用的IPv6地址,屬于單播地址。
? 2002::/16 6 to 4 地址,用于 6to4 自動(dòng)構(gòu)造隧道技術(shù)的地址,屬于單播地址。
? 3ffe::/16 早期開始的 IPv6 6bone 試驗(yàn)網(wǎng) 地址,屬于單播地址。
? fe80::/10 本地鏈路地址,用于單一鏈路,適用于自動(dòng)配置、鄰機(jī)發(fā)現(xiàn)等,路由器不轉(zhuǎn)發(fā)以fe80開頭的地址。
? ff00::/8 組播地址。
? ::A.B.C.D 兼容 IPv4 的 IPv6 地址,其中 <A.B.C.D> 代表 IPv4 地址。自動(dòng)將 IPv6 包以隧道方式在 IPv4 網(wǎng)絡(luò)中傳送的 IPv4/IPv6 節(jié)點(diǎn)將使用這些地址。
? ::FFFF:A.B.C.D 是 IPv4 映射過(guò)來(lái)的 IPv6 地址,其中 <A.B.C.D> 代表 IPv4 地址,例如 ::ffff:202.120.2.30 ,它是在不支持IPv6的網(wǎng)上用于表示 IPv4 節(jié)點(diǎn)。
在目前 IPv6 和 IPv4 共存的情況下,實(shí)現(xiàn) V4 和 V6 互聯(lián)互通的綜合組網(wǎng)技術(shù)和策略有:雙棧策略和隧道策略
雙棧策略是指在網(wǎng)元中同時(shí)具有 IPv4和IPv6兩個(gè)協(xié)議棧,它既可以接收、處理、收發(fā)IPv4的分組,也可以接收、處理、收發(fā)IPv6的分組。對(duì)于主機(jī)(終端)來(lái)講,“雙棧”是指其可以根據(jù)需要來(lái)對(duì)業(yè)務(wù)產(chǎn)生的數(shù)據(jù)進(jìn)行IPv4封裝或者IPv6封裝。對(duì)于路由器來(lái)講,“雙?!笔侵冈谝粋€(gè)路由器設(shè)備中維護(hù)IPv6和IPv4兩套路由協(xié)議棧,使得路由器既能與IPv4主機(jī)也能與IPv6主機(jī)通信,分別支持獨(dú)立的IPv6和IPv4路由協(xié)議,IPv4和IPv6路由信息按照各自的路由協(xié)議進(jìn)行計(jì)算,維護(hù)不同的路由表。IPv6數(shù)據(jù)報(bào)按照IPv6路由協(xié)議得到的路由表轉(zhuǎn)發(fā),IPv4數(shù)據(jù)報(bào)按照IPv4路由協(xié)議得到的路由表轉(zhuǎn)發(fā)。
隧道策略是 IPv4/v6 綜合組網(wǎng)技術(shù)中經(jīng)常使用到的一種機(jī)制。所謂“隧道”,簡(jiǎn)單地講就是利用一種協(xié)議來(lái)傳輸另一種協(xié)議的數(shù)據(jù)技術(shù)。隧道包括隧道入口和隧道出口(隧道終點(diǎn)),這些隧道端點(diǎn)通常都是雙棧節(jié)點(diǎn)。在隧道入口以一種協(xié)議的形式來(lái)對(duì)另外一種協(xié)議數(shù)據(jù)進(jìn)行封裝,并發(fā)送。在隧道出口對(duì)接收到的協(xié)議數(shù)據(jù)解封裝,并做相應(yīng)的處理。在隧道的入口通常要維護(hù)一些與隧道相關(guān)的信息,如記錄隧道 MTU 等參數(shù)。在隧道的出口通常出于安全性的考慮要對(duì)封裝的數(shù)據(jù)進(jìn)行過(guò)濾,以防止來(lái)自外部的惡意攻擊。
隧道的配置方法分為手工配置隧道和自動(dòng)配置隧道,而自動(dòng)配置隧道又可以分為兼容地址自動(dòng)隧道、 6to4 隧道、6over4、ISATAP、MPLS 隧道、GRE 隧道等,這些隧道的實(shí)現(xiàn)原理和技術(shù)細(xì)節(jié)都不相同,相應(yīng)的,其應(yīng)用場(chǎng)景也就不同。
PMTU(Path MTU,路徑最大傳輸單元)是在源節(jié)點(diǎn)和目的節(jié)點(diǎn)之間的路徑上的任一鏈路所能支持的鏈路 MTU 的最小值。
在IPv6網(wǎng)絡(luò)中,分段不在中間路由器上進(jìn)行。當(dāng)需要傳送的數(shù)據(jù)報(bào)文長(zhǎng)度比鏈路 MTU 大時(shí),只由源節(jié)點(diǎn)本身對(duì)數(shù)據(jù)報(bào)文進(jìn)行分段,中間路由器不對(duì)數(shù)據(jù)報(bào)文進(jìn)行再次分段。這就要求源節(jié)點(diǎn)在發(fā)送數(shù)據(jù)報(bào)文前能夠發(fā)現(xiàn)整個(gè)發(fā)送路徑上的所有鏈路的最小 MTU,然后以該 MTU 值發(fā)送數(shù)據(jù)報(bào)文,這就是 PMTU 發(fā)現(xiàn)。
PMTU發(fā)現(xiàn)過(guò)程如上圖所示,圖中各步驟含義如下:
(1)源節(jié)點(diǎn)向目的節(jié)點(diǎn)發(fā)送一個(gè) IPv6 數(shù)據(jù)報(bào)文,其長(zhǎng)度為 1500 字節(jié)。
(2)中間路由器 RTA 的鏈路 MTU 值為 1400字節(jié),所以它會(huì)用 ICMPv6 數(shù)據(jù)報(bào)文超長(zhǎng)消息向源節(jié)點(diǎn)應(yīng)答,告訴源節(jié)點(diǎn)"路徑上的 MTU 值為 1400 字節(jié)"。
(3)源節(jié)點(diǎn)向目的節(jié)點(diǎn)發(fā)送一個(gè) IPv6 數(shù)據(jù)報(bào)文,其長(zhǎng)度為 1400 字節(jié)。
(4)中間路由器 RTB 的鏈路 MTU 值為 1300 字節(jié),所以它會(huì)用 ICMPv6 數(shù)據(jù)報(bào)文超長(zhǎng)消息向源節(jié)點(diǎn)應(yīng)答,告訴源節(jié)點(diǎn)"路徑上的 MTU 值為 1300 字節(jié)"。
(5)源節(jié)點(diǎn)向目的節(jié)點(diǎn)發(fā)送一個(gè)I Pv6 數(shù)據(jù)報(bào)文,其長(zhǎng)度為 1300 字節(jié)。
Debian 配置 IPV6
vi /etc/network/interfaces
# /etc/network/interfaces -- configuration file for ifup(8),ifdown(8)
# The loopback interface
# automatically added when upgrading
auto lo
iface lo inet loopback
auto eth0
iface eth0 inet6 static
address 2001:da8:2:10d::2
netmask 64
up route -A inet6 add default gw 2001:da8:2:10d::1 dev $IFACE
iface eth0 inet static
address 58.1.4.74
netmask 255.255.255.0
up route add default gw 58.1.4.1 dev $IFACE
1. 編譯
nginx 編譯時(shí)需添加 --with-ipv6
2. 配置 - listen
listen [::]:80;
listen [::]:80 ipv6only=on;
以上兩種配置方式,均表示只監(jiān)聽 IPV6 地址的 80 端口,因?yàn)?ipv6only 默認(rèn)值為 on
listen [::]:80 ipv6only=off;
listen 80;
listen [::]:80 ipv6only=on;
同時(shí)監(jiān)聽 IPV4 和 IPV6 地址。建議使用后者,若使用前者,nginx 獲取的 remote_addr 值均為 ipv6(如客戶端地址10.1.1.1,變量值為::ffff:10.1.1.1)。
listen [fe80::20c:29ff:fe39:fded]:80;
監(jiān)聽指定 IPV6 地址
3. 配置 - upstream
upstream lbserver {
server [2001:da8:2:10d::2]:8088;
}
不支持代理 fe80 開頭的本地鏈路地址。
4. 配置 - proxy_pass
proxy_pass http://[2001:da8:2:10d::2]:8088;
同 upstream,不支持代理 fe80 開頭的本地鏈路地址。
版本1,若 ping 及 ping6 用法如下:
ping
Usage: ping [-aAbBdDfhLnOqrRUvV] [-c count] [-i interval] [-I interface]
[-m mark] [-M pmtudisc_option] [-l preload] [-p pattern] [-Q tos]
[-s packetsize] [-S sndbuf] [-t ttl] [-T timestamp_option]
[-w deadline] [-W timeout] [hop1 ...] destination
ping6
Usage: ping6 [-aAbBdDfhLnOqrRUvV] [-c count] [-i interval] [-I interface]
[-l preload] [-m mark] [-M pmtudisc_option]
[-N nodeinfo_option] [-p pattern] [-Q tclass] [-s packetsize]
[-S sndbuf] [-t ttl] [-T timestamp_option] [-w deadline]
[-W timeout] destination
則,ping IPV6 用法如下:
ping6 -I eth0 fe80::20c:29ff:fe39:fded
PING fe80::20c:29ff:fe39:fded(fe80::20c:29ff:fe39:fded) from fe80::20c:29ff:fe39:fded eth0: 56 data bytes
64 bytes from fe80::20c:29ff:fe39:fded: icmp_seq=1 ttl=64 time=0.036 ms
64 bytes from fe80::20c:29ff:fe39:fded: icmp_seq=2 ttl=64 time=0.044 ms
版本1,不支持帶有 [ ] 的 IPV6 地址,且只有 ping6 生效。
版本2,若 ping 及 ping6 用法如下:
ping
BusyBox v1.22.0.git (2013-12-31 13:39:13 CST) multi-call binary.
Usage: ping [OPTIONS] HOST
Send ICMP ECHO_REQUEST packets to network hosts
-4,-6 Force IP or IPv6 name resolution
-c CNT Send only CNT pings
-s SIZE Send SIZE data bytes in packets (default:56)
-t TTL Set TTL
-I IFACE/IP Use interface or IP address as source
-W SEC Seconds to wait for the first response (default:10)
(after all -c CNT packets are sent)
-w SEC Seconds until ping exits (default:infinite)
(can exit earlier with -c CNT)
-q Quiet, only displays output at start
and when finished
ping6
BusyBox v1.22.0.git (2013-12-31 13:39:13 CST) multi-call binary.
Usage: ping6 [OPTIONS] HOST
Send ICMP ECHO_REQUEST packets to network hosts
-c CNT Send only CNT pings
-s SIZE Send SIZE data bytes in packets (default:56)
-I IFACE/IP Use interface or IP address as source
-q Quiet, only displays output at start
and when finished
則,ping IPV6 用法如下:
ping -I eth2 fe80::20c:29ff:fe39:fded
PING fe80::20c:29ff:fe39:fded (fe80::20c:29ff:fe39:fded): 56 data bytes
64 bytes from fe80::20c:29ff:fe39:fded: seq=0 ttl=64 time=4.279 ms
64 bytes from fe80::20c:29ff:fe39:fded: seq=1 ttl=64 time=0.501 ms
ping -I eth2 [fe80::20c:29ff:fe39:fded]
PING [fe80::20c:29ff:fe39:fded] (fe80::20c:29ff:fe39:fded): 56 data bytes
64 bytes from fe80::20c:29ff:fe39:fded: seq=0 ttl=64 time=0.657 ms
64 bytes from fe80::20c:29ff:fe39:fded: seq=1 ttl=64 time=0.543 ms
ping -6 -I eth2 fe80::20c:29ff:fe39:fded
PING fe80::20c:29ff:fe39:fded (fe80::20c:29ff:fe39:fded): 56 data bytes
64 bytes from fe80::20c:29ff:fe39:fded: seq=0 ttl=64 time=0.679 ms
64 bytes from fe80::20c:29ff:fe39:fded: seq=1 ttl=64 time=0.557 ms
ping -6 -I eth2 [fe80::20c:29ff:fe39:fded]
PING [fe80::20c:29ff:fe39:fded] (fe80::20c:29ff:fe39:fded): 56 data bytes
64 bytes from fe80::20c:29ff:fe39:fded: seq=0 ttl=64 time=0.658 ms
64 bytes from fe80::20c:29ff:fe39:fded: seq=1 ttl=64 time=0.619 ms
ping6 -I eth2 fe80::20c:29ff:fe39:fded
PING fe80::20c:29ff:fe39:fded (fe80::20c:29ff:fe39:fded): 56 data bytes
64 bytes from fe80::20c:29ff:fe39:fded: seq=0 ttl=64 time=0.698 ms
64 bytes from fe80::20c:29ff:fe39:fded: seq=1 ttl=64 time=0.547 ms
ping6 -I eth2 [fe80::20c:29ff:fe39:fded]
PING [fe80::20c:29ff:fe39:fded] (fe80::20c:29ff:fe39:fded): 56 data bytes
64 bytes from fe80::20c:29ff:fe39:fded: seq=0 ttl=64 time=0.561 ms
64 bytes from fe80::20c:29ff:fe39:fded: seq=1 ttl=64 time=0.693 ms
版本2,帶不帶 -6 和 [] 均是兼容的,但必須指定一個(gè)用來(lái)發(fā)送數(shù)據(jù)包的網(wǎng)絡(luò)接口。
版本1 和 版本2 通用格式如下:ping6 -I eth0 fe80::20c:29ff:fe39:fded
PS:如果 ping6 的目標(biāo)不是以 fe80 開頭的本地鏈路地址,則不需要使用 -I 參數(shù)
route -A inet6 add default gw 2001:da8:da8:da8:16fe:b5ff:fed9:b534
route -A inet6 del default gw 2001:da8:da8:da8:16fe:b5ff:fed9:b534
tcpdump -nn host 2001:da8:da8:da8:16fe:b5ff:fed9:b534
tcpdump -nn ip6
tcpdump -nn icmp6
ssh -P22 2001:da8:da8:da8:16fe:b5ff:fed9:b534,-6 只是強(qiáng)制使用 v6 地址,沒(méi)有 -6 的時(shí)候如果對(duì)端是 v6 地址,則也可以正常使用。
scp -P22 [2001:da8:da8:da8:16fe:b5ff:fed9:b534]:/tmp/a /tmp/,注意需要使用中括號(hào),因?yàn)?v6 地址中的 : 會(huì)和 ip 后面的 : 混淆掉。
curl http://2001:da8:da8:da8:16fe:b5ff:fed9:b534/
fping6 2001:da8:da8:da8:16fe:b5ff:fed9:b534
telnet fe80::216:3eff:fe56:aff8 22
wget http://lvs.lxdns.net/testcdn.htm -e http-proxy=http://[2001:da8:da8:da8:16fe:b5ff:fed9:b534]
更多建議: