IPv6系列-初學者的10個常見困擾


本文是《IPv6系列》文章的第二篇《常見困擾》,緊接《入門指南》,用於解答IPv6的10個常見困擾。

小慢哥的原創文章,歡迎轉載


目錄

▪ 本文緣由
▪ 困擾1. IPv4和IPv6只有地址格式不同嗎
▪ 困擾2. IPv4到IPv6對應用程序是透明無感知的嗎
▪ 困擾3. 提供WEB服務,需要每台服務器都配置IPv6地址嗎
▪ 困擾4. IPv4和IPv6要配在同一張網卡上嗎
▪ 困擾5. 我的網卡有fe80開頭的地址,可以用來上公網嗎
▪ 困擾6. IPv6地址如何配置
▪ 困擾7. 沒有了ARP,如何解析MAC地址
▪ 困擾8. IPv6使用多播替代廣播,需要做哪些改造
▪ 困擾9. IPv6真的安全嗎
▪ 困擾10. 如何學習IPv6
▪ 后續說明


本文緣由

在筆者的上一篇文章《IPv6系列-入門指南》里,簡要闡述了以下內容:

▷ 掌握IPv6的必要性
▷ IPv6的3個常見顧慮
▷ IPv6基礎知識
▷ 常用測試方法

而在進一步的實踐學習中,會遇到很多的困擾。筆者結合自己以及身邊的同行兄弟們遇到的困擾,精心挑選出10個困擾在本文中進行解答。

如果沒有閱讀過《IPv6系列-入門指南》,敬請勞神垂閱,以便知識的連貫。


困擾1. IPv4和IPv6只有地址格式不同嗎

除了地址格式不同,IPv4與IPv6協議棧也不同,他們在邏輯上是完全不同的2個世界

以下實踐中經常會遇到的4個不同之處:

基本通訊過程:ND替代ARP、多播替代廣播、fe80地址成為標配、ICMP成為通訊核心
IP配置方式:客戶端以無狀態自動配置IP成為主流,弱化DHCP
DNS域名解析:AAAA記錄替代IPv4的A記錄、對應用存在優先級問題(優先解析AAAA還是A)
應用層適應性:socket編程中AF_INET僅支持IPv4,AF_INET6僅支持IPv6


困擾2. IPv4到IPv6對應用程序是透明無感知的嗎

錯,是有感知的,上層應用程序需要進行改造。

舉個例子,當訪問fzxiaomange.com時候,是要優先解析IPv6地址(AAAA)還是IPv4地址(A),因為總得選一條線路來發送請求。現在許多框架會優先選擇IPv6。

注意:如果解析出AAAA記錄,即使本機沒有可路由IPv6地址,也有可能依然嘗試通過IPv6進行請求,導致請求失敗

還有一個典型的例子,是程序會在應用層里交互底層IP地址,比如FTP主動模式會在應用層里交互IPv4地址,而如果實際可用的是IPv6地址,就可能導致后續連接的異常。

無法做到透明無感知,是導致產生IPv4到IPv6的部分過渡方案的原因之一。


困擾3. 提供WEB服務,需要每台服務器都配置IPv6地址嗎

現在有一種言論,說“IPv6地址無限多,每台服務器都可以配一個IP地址,不用做NAT”。

這很容易誤導人,具體如何使用IPv6,還得根據場景而定。比如筆者的個人博客fzxiaomange.com,由nginx->php->mysql組成,分別位於3台服務器上,那只需要在nginx上配置IPv6地址,並在DNS上添加一條AAAA記錄指向L7的IPv6地址即可。完全沒必要在php、mysql服務器上配置IPv6地址,而且一旦配置了,就直接暴露內網了。

每個設備都配置IPv6,主要適用於偏客戶端以及地址需求量大的場景,諸如物聯網設備、手機4G、家庭寬帶等。

另外,IPv6有NAT,適用於辦公PC、機房服務器等需要訪問IPv6網絡,而不想被別人主動訪問的場景。


困擾4. IPv4和IPv6要配在同一張網卡上嗎

都可以,首先需要先了解2個詞“單棧”“雙棧”

以節點為角度(通用的解釋):

▷ 單棧:表示一個IPv6節點,也就是一台服務器,或一部手機,僅有IPv6地址,或僅有IPv4地址,前者叫做“IPv6單棧”“IPv6-Only”,后者叫“IPv4單棧”“IPv4-Only”
▷ 雙棧:表示一個IPv6節點,同時擁有IPv6地址和IPv4地址

以網卡為角度

▷ 單棧:表示一張網卡僅有IPv6地址,或僅有IPv4地址,示意圖如下

singlestack

▷ 雙棧:表示一張網卡同時擁有IPv6地址和IPv4地址

dualstack

IPv4和IPv6在邏輯上是兩個完全不相交的世界。如果終端處位於同一個物理層,比如同一個VLAN,那么網卡就只能同時配置IPv6地址和IPv4地址;反之,就必須一張網卡配置IPv6,另一張網卡配置IPv4。所以,關鍵看網絡架構是如何設計,各有利弊。比如放同一張網卡上,就可以做到帶寬共享,而放不同網卡,可以做到帶寬分別限制與計費。


困擾5. 我的網卡有fe80開頭的地址,可以用來上公網嗎

win10

centos7

當網卡啟動的時候,會自動生成“鏈路本地地址”(Link-Local Address),這是一個fe80::/10的單播地址。“鏈路本地地址”用於IP自動配置鄰居發現等。

注意事項

▷ 核心:每張網卡都會存在“鏈路本地地址”,這是IPv6協議通訊的核心,不應當刪掉
▷ 范圍:僅在同一個二層范圍內進行傳播,不會被路由器做轉發
▷ 地址:“鏈路本地地址”的算法不統一,有的操作系統會根據mac地址計算而來(EUI-64),而有的則是隨機或其他某種算法計算而來
▷ 服務:“鏈路本地地址”雖然可以在二層內互通,但主要用於核心通訊以及某些網絡高級協議。不適用於上層應用業務之間的通訊。因此不能用來上公網,也不能用於對外提供服務


困擾6. IPv6地址如何配置

公網地址和私網地址

▷ 公網地址:“全球單播地址”(Global Unicast Address,2000::/3)
▷ 私網地址:“唯一本地地址”(Unique-Local Address,fc00::/7)

細心的人可能會發現,為什么這里叫做“全球單播地址”,而“唯一本地地址”卻不叫做“唯一本地單播地址”,好吧,其實都是簡稱,在RFC里是這么定義的:“Global Unicast Addresses”、“Link-Local IPv6 Unicast Addresses”。其實“全球單播地址”是可以叫做“全球地址”的,只是這樣顯得有點別扭。

自動生成還是固定IP

在IPv6里,任何單播地址都可以自動生成,也可以手工配置固定IP,具體看應用場景:

▷ 客戶端:如果我想訪問ipv6互聯網,而不對外提供服務,那么使用自動生成即可,無需使用固定的ip地址
▷ 服務端:如果需要對外提供服務,那么ip地址就需要固定了,不能使用自動生成

自動配置IP

在ipv6里還分為2種方法:“有狀態”與“無狀態”

▷ 有狀態(Stateful):地址由DHCPv6 Server統一管理,DHCPv6 Client從中獲得一個可用的IP地址
▷ 無狀態(Stateless,簡稱SLAAC):路由器發出“路由通告”報文(Router Advertisement,簡稱RA),報文內包含了IPv6地址的前綴信息。當收到RA包后,就會根據其中前綴信息,自動生成一個或多個IP地址


困擾7. 沒有了ARP,如何解析MAC地址

ARP協議是IPv4用於解析目標MAC地址的協議,而在IPv6里,解析地址采用的是鄰居發現(Neighbor Discovery Protocol,簡稱NDP或ND)

ND不是一個具體協議,而是用來描述多個相關功能的協議的抽象集合,所涵蓋的所有協議均是基於ICMPv6。其中有2種報文與解析MAC地址有關:

鄰居請求報文NS(Neighbor Solicitation):請求解析
鄰居通告報文NA(Neighbor Advertisement):響應解析

這與ping是非常類似的:

▷ ping:發送icmp的echo request報文,對端響應icmp的echo reply報文
▷ 地址解析:發送icmp的ns報文,對端響應icmp的na報文


困擾8. IPv6使用多播替代廣播,需要做哪些改造

IPv6使用多播替代了廣播,多播的特點是不會像廣播那樣完全泛洪,而是數據包只發送給加入了多播組的機器。

但是,這有個前提,就是交換機要能識別並維護多播組的信息,主流交換機都具備此功能,然而並不都是默認開啟的。對於二層交換機來說,需要開啟MLDv2 Snooping

顧名思義,就是交換機會識別“MLDv2成員報告”報文從哪個端口發來的,並記錄下來,之后當交換機收到多播包后,會先查找其多播地址是否能在緩存里匹配上

▷ 匹配成功:僅會將數據包從相應的端口發出
▷ 匹配失敗:就會泛洪,此時和廣播毫無差異


困擾9. IPv6真的安全嗎

理想很美好,IPv6從設計之初,就進行了大量的安全方面的設計,“完整的”IPv6在安全方面有至少以下3個優勢:

▷ 原生支持的端到端加密
▷ 安全的鄰居發現(Secure Neighbor Discovery,簡稱SEND
▷ 更大的地址空間

現實很殘酷,只有第3點發揮了作用,更大的地址空間,減少了被非法掃描到的概率。而第1、2點並沒真正普及起來,因為協議本身就很復雜、學習難度很大、實現起來也很不容易。因此IETF為了加速IPv6的普及,對安全性不再強制要求。這也導致了IPv6實際上並沒有預期中的那么安全,在IPv4里存在的地址欺騙、虛假網關等情況,在IPv6里依然存在。


困擾10. 如何學習IPv6

網上能找到非常多的IPv6教程,其中有很多教程都是通篇講IPv6地址、IP包格式、ICMP包格式,這很容易讓初學者打退堂鼓。筆者雖然不是專業的網工,但願能拋磚引玉,推薦的學習步驟如下:

1️⃣ IPv6的歷史、設計理念
2️⃣ IPv6的地址格式、分類、前綴計算,以及與IPv4的對比
3️⃣ IP地址、網關路由的配置與查看
4️⃣ 服務端實踐,嘗試給自己的網站增加IPv6
5️⃣ 客戶端實踐,讓自己的PC訪問IPv6互聯網
6️⃣ 應用層實踐,自己寫一對C/S程序,能同時支持IPv4與IPv6
7️⃣ IPv6通訊原理,抓包分析每個包,熟悉ND、DHCPv6等
8️⃣ IPv4與IPv6的互訪、過渡
9️⃣ IPv6安全
🔟 具體領域的IPv6,例如移動IPv6


后續說明

在《IPv6系列》后續文章中,筆者會有選擇性地對“困擾10”中提到的部分內容整理成文。為什么是有選擇性,因為筆者並非網工出身,沒有把握寫出更好的文章,不能誤人子弟。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM