IPv6 是什麼意思:位址結構、優點與國內現狀
IPv6 是第 6 版網際網路協議(Internet Protocol version 6),是 IPv4 的後繼者。它把位址從 32 位擴充套件到 128 位,多到每個網段都可以固定用 /64,從根本上解決了 IPv4 位址耗盡、不得不層層 NAT 的問題;代價是與 IPv4 不能直接互通,兩者要長期並存。
IPv6 是什麼意思:它是網際網路協議(Internet Protocol)的第 6 版,由 IETF 制定,用來接替今天仍在大量使用的第 4 版 IPv4。核心規範最早是 1998 年的 RFC 2460,2017 年由 RFC 8200 取代併成為正式的網際網路標準。IPv6 最直接的變化是位址長度:IPv4 是 32 位,約 43 億個位址;IPv6 是 128 位,位址總數是 2^128,約 3.4 × 10^38 個,完整寫法是 8 組用冒號分隔的十六進位制數,通常壓縮成 2001:db8:1a2b:10::25 這樣的形式。它要解決的核心問題是 IPv4 位址不夠用,順帶簡化了報頭、取消了廣播和 ARP、內建了位址自動配置。範例位址使用文件專用字首 2001:db8::/32。
IPv6 要解決什麼問題:IPv4 位址不夠用了
43 億個 IPv4 位址,在網際網路設計之初看起來用不完,到了每人一部手機、每台伺服器若干個位址的年代就遠遠不夠。幾個時間點:
| 時間 | 事件 |
|---|---|
| 2011 年 2 月 | IANA 把最後 5 個 /8 位址塊分給五個地區網際網路序號產生器構,全球公共位址池分配完畢 |
| 2011 年 4 月 | 負責亞太地區的 APNIC 開始分配最後一個 /8,此後每個新會員只能申請到很少量的位址 |
| 此後 | 各地區序號產生器構陸續耗盡,新增 IPv4 位址主要靠轉讓和租用,位址本身成了要花錢買的資源 |
IPv4 世界的應對辦法是 NAT:家裡的路由器把一個公網位址分給全家裝置共用,運營商再在更大範圍內做一層運營商級 NAT,讓許多寬頻使用者共用一個公網位址。NAT 緩解了位址短缺,但也帶來了副作用:外部無法主動連到 NAT 後面的裝置,遠端存取、點對點通訊都要繞路;日誌裡的位址不再對應一台裝置,溯源要同時拿到位址、連接埠和時間;NAT 裝置要為每條連線維護狀態,自己成了瓶頸和故障點。
IPv6 的思路是從根上解決:位址多到不必再省,每台裝置都分配全域性唯一的位址,網路重新回到“端到端可達”,不再需要 NAT。
IPv6 位址長什麼樣:128 位怎麼分層
128 位位址寫成 8 組、每組 4 個十六進位制數,可以省略每組的前導零,並用一次 :: 代替連續的全零組。比書寫規則更重要的是分層:IPv6 位址按字首長度逐級分配,機房和企業拿到的是一個大字首,再往下切。以機房為例:
| 層級 | 字首長度 | 例子 | 含義 | 往下一層能分出多少 |
|---|---|---|---|---|
| 位址持有者 | /32 | 2001:db8::/32 | 運營商或大型機構從序號產生器構拿到的段 | 65,536 個 /48 |
| 站點 | /48 | 2001:db8:1a2b::/48 | 一個機房或一個企業 | 65,536 個 /64 |
| 網段 | /64 | 2001:db8:1a2b:10::/64 | 一個 VLAN,或分給一台伺服器 | 2^64 個介面位址 |
| 介面 | /128 | 2001:db8:1a2b:10::25 | 一塊網路卡上的一個位址 | — |
一個 /48 能切出 65,536 個 /64,而一個 /64 裡有 2^64 個位址,是整個 IPv4 位址總數的約 43 億倍。所以 IPv6 裡沒有人去算“這個段能放幾台主機”:區域網段統一用 /64,位址的後 64 位是介面標識,無狀態位址自動配置(SLAAC)正是靠這 64 位讓主機自己生成位址。點對點的裝置互聯鏈路可以用 /127,這是 RFC 6164 專門允許的例外。
和 IPv4 相比,還有一個習慣要改:一塊網路卡通常同時有好幾個 IPv6 位址。fe80 開頭的鏈路本地位址每塊啟用了 IPv6 的網路卡都有,只在本鏈路內有效,用於鄰居發現和找閘道器;2 或 3 開頭的全域性單播位址才能上公網;此外還可能有 fd 開頭的唯一本地位址(類似 IPv4 私網位址)和定期更換的臨時位址。IPv6 也沒有廣播,原來靠廣播完成的事改用組播(ff 開頭)。
IPv6 和 IPv4 的主要差異
| 對比項 | IPv4 | IPv6 |
|---|---|---|
| 位址長度 | 32 位 | 128 位 |
| 寫法 | 點分十進位制,如 192.0.2.10 | 冒號十六進位制,如 2001:db8::10 |
| 子網表示 | 子網掩碼或字首長度,段的大小各不相同 | 只用字首長度,區域網段統一 /64 |
| 基本報頭 | 20–60 位元組,長度可變,帶報頭校驗和 | 固定 40 位元組,取消報頭校驗和,可選功能放進擴充套件報頭 |
| 分片 | 傳送方和沿途路由器都可以分片 | 只有傳送方分片,路由器不分片,依賴路徑 MTU 發現;鏈路 MTU 最小 1280 位元組 |
| 位址解析 | ARP,廣播查詢 | 鄰居發現協議 NDP,用 ICMPv6 組播 |
| 廣播 | 有 | 沒有,用組播代替 |
| 位址配置 | 手工配置或 DHCP | 手工配置、SLAAC 無狀態自動配置、DHCPv6 |
| NAT | 普遍使用 | 設計上不需要 |
| 一塊網路卡的位址數 | 通常 1 個 | 通常多個 |
| DNS 記錄型別 | A | AAAA |
| 反向解析域 | in-addr.arpa | ip6.arpa |
這張表裡,對維運影響最大的是三行:沒有 ARP,繫結和防欺騙要針對 NDP 重新做;路由器不分片,ICMPv6 不能隨便攔;一塊網路卡多個位址,排查時要先分清看的是哪一個。
IPv6 的優點,以及它沒解決的問題
IPv6 的優點要具體看,以下幾條是實打實的:
- 位址充足。伺服器、容器、物聯網裝置都能拿到全域性位址,規劃時不必再為省位址把網段切得很碎;機房可以給每台伺服器一整個 /64,而不是按個出售 IPv4。
- 端到端可達。不需要連接埠對映,日誌裡記錄的位址就是真實來源,溯源不用再去翻 NAT 裝置的轉換記錄。
- 自動配置。主機根據路由器通告的字首自己生成位址,接上網線即可使用。
- 字首規整,便於彙總。位址按層級分配,一個運營商或機房對外通常只需宣告少量字首。
- 報頭簡化。基本報頭定長、不做校驗和,路由器逐跳處理的工作更少。
同樣要說清楚它沒解決的問題:
- 與 IPv4 不相容。過渡期主要靠雙棧並行,維運物件隨之翻倍:兩套位址、兩套路由、兩套防火牆規則。
- 安全不會自動變好。IPsec 曾在 RFC 4294 裡被列為 IPv6 節點必須支援,2011 年的 RFC 6434 改成了“應當”支援,不能把加密當成 IPv6 自帶。鄰居發現和 ARP 一樣沒有認證,存在 NDP 欺騙和偽造路由器通告的攻擊,交換器上要開啟 RA Guard 一類的防護。
- 速度不一定更快。快慢取決於路徑和對端,與協議版本關係不大。
國內 IPv6 推進到了哪一步
國內的 IPv6 部署由政策推動。2017 年 11 月,中共中央辦公廳、國務院辦公廳印發《推進網際網路協議第六版(IPv6)規模部署行動計劃》,對運營商網路、資料中心、雲服務、內容分發網路以及政府和重點網站應用提出了分階段的改造要求。2021 年 7 月,工業和資訊化部、中央網信辦印發《IPv6 流量提升三年專項行動計劃(2021—2023 年)》,把重點放在提升 IPv6 的實際流量上,原因很直接:使用者拿到了 IPv6 位址,不等於流量就走 IPv6,服務端沒有 AAAA 記錄,連線仍然走 IPv4。
經過這幾年,三家基礎運營商的手機網路和許多地區的家庭寬頻已經普遍下發 IPv6 位址,主流雲平台的雲伺服器、負載均衡和 CDN 都提供 IPv6 選項,政府網站和大型網際網路應用陸續完成了改造。活躍使用者數、流量佔比等最新數字,以國家 IPv6 發展監測平台定期釋出的資料為準。
對 IDC 來說,變化會從客戶那裡傳過來:政企客戶的網站有 IPv6 改造要求,託管它們的機房就要能提供 IPv6 位址、雙棧閘道器和對應的防護;租伺服器的客戶也越來越多地問“能不能給 IPv6”。機房需要提前準備的,是向上遊申請 IPv6 段、讓閘道器和交換器支援雙棧,以及一份能管住 IPv6 分配的台帳。
第一次接觸 IPv6,維運先改掉這幾個習慣
一、防火牆不是一套,是兩套。 iptables 只管 IPv4,IPv6 的規則在 ip6tables 裡。伺服器拿到公網 IPv6 位址後,如果只寫了 iptables 規則,服務在 IPv6 上就等於完全敞開。firewalld 的區域規則對兩者同時生效;ufw 在 /etc/default/ufw 裡 IPV6=yes 時也會同時管理;直接手寫 iptables 指令碼的伺服器最容易漏。檢查方法:
# 只列出 IPv6 上的監聽連接埠;本地位址顯示為 [::] 或 * 的,表示在所有位址上監聽
ss -6 -tlnp
# 分別檢視 IPv4 和 IPv6 的入站規則;ip6tables 為空且預設策略是 ACCEPT,說明 IPv6 沒有任何過濾
iptables -S INPUT
ip6tables -S INPUT
二、不要整類封掉 ICMPv6。 IPv4 時代有人習慣把 ICMP 全部禁掉,在 IPv6 上這樣做會直接斷網。RFC 4890 對 ICMPv6 的過濾給了詳細建議,至少下面這些要放行:
| 型別 | 名稱 | 為什麼不能攔 |
|---|---|---|
| 1 | 目的不可達 | 連線失敗時及時告知,而不是傻等超時 |
| 2 | 資料包過大 | 路由器不分片,路徑 MTU 發現全靠它,攔掉後大包會卡住 |
| 3 | 超時 | traceroute 依賴它 |
| 4 | 引數問題 | 報頭出錯時的反饋 |
| 133–136 | 路由器請求、路由器通告、鄰居請求、鄰居通告 | 位址自動配置、找閘道器、查鄰居 MAC 都靠它們,相當於 IPv4 的 ARP 加上一部分 DHCP |
| 128、129 | 回顯請求、回顯應答 | ping 用,可以限速放行 |
三、不要為了“省位址”把網段切得比 /64 小。 給伺服器配 /120、/112 這種字首,會讓 SLAAC 等依賴 64 位介面標識的功能失效。位址不缺,區域網段一律 /64,需要給客戶更多位址就給 /56 或 /48。
四、封禁和限速按 /64 考慮。 一台主機在自己的 /64 裡可以隨時換位址,按單個位址封禁,對方換一個位址就繞過去了。防火牆黑名單、介面限流、白名單都應該以 /64 為單位思考。
五、加 AAAA 記錄之前,確認 IPv6 真的通。 按 RFC 6724 的預設規則,系統通常優先使用 IPv6。瀏覽器有快速回退機制,很多程式和指令碼卻沒有:域名一旦有了 AAAA 記錄而伺服器的 IPv6 不通,這些客戶端就會卡在連線超時上。上線前從一台有 IPv6 的外部機器測一遍:
# 加記錄前:繞過 DNS,直接連伺服器的 IPv6 位址,能返回 HTTP 狀態行才算通
curl -6 -sI --resolve www.example.com:443:[2001:db8:1a2b:10::25] https://www.example.com/ | head -1
# 加記錄後:確認 AAAA 已生效,再用域名測一次
dig AAAA www.example.com +short
curl -6 -sI https://www.example.com/ | head -1
在機房裡怎麼落地
IPv6 的規劃比 IPv4 簡單,難點在於跟蹤:從上游拿到一個 /48 或更大的段,切成 /64 分給伺服器、切成 /56 分給大客戶,幾年下來哪些子段分給了誰,沒有台帳很快就理不清。
Toplink DCIM 的 IP 位址管理對 IPv6 原生支援:IPv6 段和 IPv4 一樣按 CIDR 錄入,可以按掩碼拆成更小的子段;給伺服器分配時系統自動切出合適的子段,也可以為伺服器批次分配 IPv6 段,或在某個位址塊內生成指定數量的位址。IPv4 和 IPv6 位址段集中登記在同一個系統裡,哪個子段分給了哪台伺服器,查台帳即可。
常見問題
只有 IPv6 的伺服器能存取 IPv4 網站嗎?
不能直接存取。除了改成雙棧,還可以用 NAT64 加 DNS64:DNS64 給只有 A 記錄的域名合成一個 AAAA 位址(常用字首 64:ff9b::/96),NAT64 閘道器再把流量轉換成 IPv4。雲平台是否提供這類閘道器,以平台文件為準。
為什麼沒有 IPv5?
版本號 5 早年分給了實驗性的 Internet Stream Protocol(ST 及後來的 ST2),用於傳輸即時音影片流,從來不是 IPv4 的替代方案。5 已被佔用,所以下一代 IP 用了 6。
家裡有了 IPv6,外網就能直接存取家裡的裝置嗎?
位址上可以,全域性 IPv6 位址本身是端到端可達的。但不少家用路由器和光貓預設攔截外部主動發起的 IPv6 連線,需要手動放行;運營商下發的字首也可能在重新撥號後變化,長期存取還要配合動態域名。