IPv6系列-初學(xué)者的10個(gè)常見困擾
筆者結(jié)合自己以及身邊的同行兄弟們遇到的困擾,精心挑選出10個(gè)困擾在本文中進(jìn)行解答。
困擾1. IPv4和IPv6只有地址格式不同嗎
除了地址格式不同,IPv4與IPv6協(xié)議棧也不同,他們?cè)谶壿嬌鲜?span style="BOX-SIZING: border-box; FONT-WEIGHT: 700; -webkit-tap-highlight-color: transparent">完全不同的2個(gè)世界
以下實(shí)踐中經(jīng)常會(huì)遇到的4個(gè)不同之處:
▷ 基本通訊過程:ND替代ARP、多播替代廣播、fe80地址成為標(biāo)配、ICMP成為通訊核心
▷ IP配置方式:客戶端以無狀態(tài)自動(dòng)配置IP成為主流,弱化DHCP
▷ DNS域名解析:AAAA記錄替代IPv4的A記錄、對(duì)應(yīng)用存在優(yōu)先級(jí)問題(優(yōu)先解析AAAA還是A)
▷ 應(yīng)用層適應(yīng)性:socket編程中AF_INET僅支持IPv4,AF_INET6僅支持IPv6
困擾2. IPv4到IPv6對(duì)應(yīng)用程序是透明無感知的嗎
錯(cuò),是有感知的,上層應(yīng)用程序需要進(jìn)行改造。
舉個(gè)例子,當(dāng)訪問fzxiaomange.com時(shí)候,是要優(yōu)先解析IPv6地址(AAAA)還是IPv4地址(A),因?yàn)榭偟眠x一條線路來發(fā)送請(qǐng)求?,F(xiàn)在許多框架會(huì)優(yōu)先選擇IPv6。
注意:如果解析出AAAA記錄,即使本機(jī)沒有可路由IPv6地址,也有可能依然嘗試通過IPv6進(jìn)行請(qǐng)求,導(dǎo)致請(qǐng)求失敗。
還有一個(gè)典型的例子,是程序會(huì)在應(yīng)用層里交互底層IP地址,比如FTP主動(dòng)模式會(huì)在應(yīng)用層里交互IPv4地址,而如果實(shí)際可用的是IPv6地址,就可能導(dǎo)致后續(xù)連接的異常。
無法做到透明無感知,是導(dǎo)致產(chǎn)生IPv4到IPv6的部分過渡方案的原因之一。
困擾3. 提供WEB服務(wù),需要每臺(tái)服務(wù)器都配置IPv6地址嗎
現(xiàn)在有一種言論,說“IPv6地址無限多,每臺(tái)服務(wù)器都可以配一個(gè)IP地址,不用做NAT”。
這很容易誤導(dǎo)人,具體如何使用IPv6,還得根據(jù)場(chǎng)景而定。比如筆者的個(gè)人博客fzxiaomange.com,由nginx->php->mysql組成,分別位于3臺(tái)服務(wù)器上,那只需要在nginx上配置IPv6地址,并在DNS上添加一條AAAA記錄指向L7的IPv6地址即可。完全沒必要在php、mysql服務(wù)器上配置IPv6地址,而且一旦配置了,就直接暴露內(nèi)網(wǎng)了。
每個(gè)設(shè)備都配置IPv6,主要適用于偏客戶端以及地址需求量大的場(chǎng)景,諸如物聯(lián)網(wǎng)設(shè)備、手機(jī)4G、家庭寬帶等。
另外,IPv6有NAT,適用于辦公PC、機(jī)房服務(wù)器等需要訪問IPv6網(wǎng)絡(luò),而不想被別人主動(dòng)訪問的場(chǎng)景。
困擾4. IPv4和IPv6要配在同一張網(wǎng)卡上嗎
都可以,首先需要先了解2個(gè)詞“單棧”和“雙棧”:
以節(jié)點(diǎn)為角度(通用的解釋):
▷ 單棧:表示一個(gè)IPv6節(jié)點(diǎn),也就是一臺(tái)服務(wù)器,或一部手機(jī),僅有IPv6地址,或僅有IPv4地址,前者叫做“IPv6單棧”或“IPv6-Only”,后者叫“IPv4單棧”或“IPv4-Only”。
▷ 雙棧:表示一個(gè)IPv6節(jié)點(diǎn),同時(shí)擁有IPv6地址和IPv4地址
以網(wǎng)卡為角度:
▷ 單棧:表示一張網(wǎng)卡僅有IPv6地址,或僅有IPv4地址,示意圖如下
單棧
▷ 雙棧:表示一張網(wǎng)卡同時(shí)擁有IPv6地址和IPv4地址
雙棧
IPv4和IPv6在邏輯上是兩個(gè)完全不相交的世界。如果終端處位于同一個(gè)物理層,比如同一個(gè)VLAN,那么網(wǎng)卡就只能同時(shí)配置IPv6地址和IPv4地址;反之,就必須一張網(wǎng)卡配置IPv6,另一張網(wǎng)卡配置IPv4。所以,關(guān)鍵看網(wǎng)絡(luò)架構(gòu)是如何設(shè)計(jì),各有利弊。比如放同一張網(wǎng)卡上,就可以做到帶寬共享,而放不同網(wǎng)卡,可以做到帶寬分別限制與計(jì)費(fèi)。
困擾5. 我的網(wǎng)卡有fe80開頭的地址,可以用來上公網(wǎng)嗎
win10
centos7
當(dāng)網(wǎng)卡啟動(dòng)的時(shí)候,會(huì)自動(dòng)生成“鏈路本地地址”(Link-Local Address),這是一個(gè)fe80::/10的單播地址。“鏈路本地地址”用于IP自動(dòng)配置、鄰居發(fā)現(xiàn)等。
注意事項(xiàng):
▷ 核心:每張網(wǎng)卡都會(huì)存在“鏈路本地地址”,這是IPv6協(xié)議通訊的核心,不應(yīng)當(dāng)刪掉
▷ 范圍:僅在同一個(gè)二層范圍內(nèi)進(jìn)行傳播,不會(huì)被路由器做轉(zhuǎn)發(fā)
▷ 地址:“鏈路本地地址”的算法不統(tǒng)一,有的操作系統(tǒng)會(huì)根據(jù)mac地址計(jì)算而來(EUI-64),而有的則是隨機(jī)或其他某種算法計(jì)算而來
▷ 服務(wù):“鏈路本地地址”雖然可以在二層內(nèi)互通,但主要用于核心通訊以及某些網(wǎng)絡(luò)高級(jí)協(xié)議。不適用于上層應(yīng)用業(yè)務(wù)之間的通訊。因此不能用來上公網(wǎng),也不能用于對(duì)外提供服務(wù)
困擾6. IPv6地址如何配置
公網(wǎng)地址和私網(wǎng)地址
▷ 公網(wǎng)地址:“全球單播地址”(Global Unicast Address,2000::/3)
▷ 私網(wǎng)地址:“唯一本地地址”(Unique-Local Address,fc00::/7)
細(xì)心的人可能會(huì)發(fā)現(xiàn),為什么這里叫做“全球單播地址”,而“唯一本地地址”卻不叫做“唯一本地單播地址”,好吧,其實(shí)都是簡(jiǎn)稱,在RFC里是這么定義的:“Global Unicast Addresses”、“Link-Local IPv6 Unicast Addresses”。其實(shí)“全球單播地址”是可以叫做“全球地址”的,只是這樣顯得有點(diǎn)別扭。
自動(dòng)生成還是固定IP
在IPv6里,任何單播地址都可以自動(dòng)生成,也可以手工配置固定IP,具體看應(yīng)用場(chǎng)景:
▷ 客戶端:如果我想訪問ipv6互聯(lián)網(wǎng),而不對(duì)外提供服務(wù),那么使用自動(dòng)生成即可,無需使用固定的ip地址
▷ 服務(wù)端:如果需要對(duì)外提供服務(wù),那么ip地址就需要固定了,不能使用自動(dòng)生成
自動(dòng)配置IP
在ipv6里還分為2種方法:“有狀態(tài)”與“無狀態(tài)”
▷ 有狀態(tài)(Stateful):地址由DHCPv6 Server統(tǒng)一管理,DHCPv6 Client從中獲得一個(gè)可用的IP地址
▷ 無狀態(tài)(Stateless,簡(jiǎn)稱SLAAC):路由器發(fā)出“路由通告”報(bào)文(Router Advertisement,簡(jiǎn)稱RA),報(bào)文內(nèi)包含了IPv6地址的前綴信息。當(dāng)收到RA包后,就會(huì)根據(jù)其中前綴信息,自動(dòng)生成一個(gè)或多個(gè)IP地址
困擾7. 沒有了ARP,如何解析MAC地址
ARP協(xié)議是IPv4用于解析目標(biāo)MAC地址的協(xié)議,而在IPv6里,解析地址采用的是鄰居發(fā)現(xiàn)(Neighbor Discovery Protocol,簡(jiǎn)稱NDP或ND)
ND不是一個(gè)具體協(xié)議,而是用來描述多個(gè)相關(guān)功能的協(xié)議的抽象集合,所涵蓋的所有協(xié)議均是基于ICMPv6。其中有2種報(bào)文與解析MAC地址有關(guān):
▷ 鄰居請(qǐng)求報(bào)文NS(Neighbor Solicitation):請(qǐng)求解析
▷ 鄰居通告報(bào)文NA(Neighbor Advertisement):響應(yīng)解析
這與ping是非常類似的:
▷ ping:發(fā)送icmp的echo request報(bào)文,對(duì)端響應(yīng)icmp的echo reply報(bào)文
▷ 地址解析:發(fā)送icmp的ns報(bào)文,對(duì)端響應(yīng)icmp的na報(bào)文
困擾8. IPv6使用多播替代廣播,需要做哪些改造
IPv6使用多播替代了廣播,多播的特點(diǎn)是不會(huì)像廣播那樣完全泛洪,而是數(shù)據(jù)包只發(fā)送給加入了多播組的機(jī)器。
但是,這有個(gè)前提,就是交換機(jī)要能識(shí)別并維護(hù)多播組的信息,主流交換機(jī)都具備此功能,然而并不都是默認(rèn)開啟的。對(duì)于二層交換機(jī)來說,需要開啟MLDv2 Snooping。
顧名思義,就是交換機(jī)會(huì)識(shí)別“MLDv2成員報(bào)告”報(bào)文從哪個(gè)端口發(fā)來的,并記錄下來,之后當(dāng)交換機(jī)收到多播包后,會(huì)先查找其多播地址是否能在緩存里匹配上
▷ 匹配成功:僅會(huì)將數(shù)據(jù)包從相應(yīng)的端口發(fā)出
▷ 匹配失?。壕蜁?huì)泛洪,此時(shí)和廣播毫無差異
困擾9. IPv6真的安全嗎
理想很美好,IPv6從設(shè)計(jì)之初,就進(jìn)行了大量的安全方面的設(shè)計(jì),“完整的”IPv6在安全方面有至少以下3個(gè)優(yōu)勢(shì):
▷ 原生支持的端到端加密
▷ 安全的鄰居發(fā)現(xiàn)(Secure Neighbor Discovery,簡(jiǎn)稱SEND)
▷ 更大的地址空間
現(xiàn)實(shí)很殘酷,只有第3點(diǎn)發(fā)揮了作用,更大的地址空間,減少了被非法掃描到的概率。而第1、2點(diǎn)并沒真正普及起來,因?yàn)?span style="BOX-SIZING: border-box; FONT-WEIGHT: 700; -webkit-tap-highlight-color: transparent">協(xié)議本身就很復(fù)雜、學(xué)習(xí)難度很大、實(shí)現(xiàn)起來也很不容易。因此IETF為了加速IPv6的普及,對(duì)安全性不再?gòu)?qiáng)制要求。這也導(dǎo)致了IPv6實(shí)際上并沒有預(yù)期中的那么安全,在IPv4里存在的地址欺騙、虛假網(wǎng)關(guān)等情況,在IPv6里依然存在。
困擾10. 如何學(xué)習(xí)IPv6
網(wǎng)上能找到非常多的IPv6教程,其中有很多教程都是通篇講IPv6地址、IP包格式、ICMP包格式,這很容易讓初學(xué)者打退堂鼓。筆者雖然不是專業(yè)的網(wǎng)工,但愿能拋磚引玉,推薦的學(xué)習(xí)步驟如下:
1️⃣ IPv6的歷史、設(shè)計(jì)理念
2️⃣ IPv6的地址格式、分類、前綴計(jì)算,以及與IPv4的對(duì)比
3️⃣ IP地址、網(wǎng)關(guān)路由的配置與查看
4️⃣ 服務(wù)端實(shí)踐,嘗試給自己的網(wǎng)站增加IPv6
5️⃣ 客戶端實(shí)踐,讓自己的PC訪問IPv6互聯(lián)網(wǎng)
6️⃣ 應(yīng)用層實(shí)踐,自己寫一對(duì)C/S程序,能同時(shí)支持IPv4與IPv6
7️⃣ IPv6通訊原理,抓包分析每個(gè)包,熟悉ND、DHCPv6等
8️⃣ IPv4與IPv6的互訪、過渡
9️⃣ IPv6安全