IPv6系列-為什麼一定要了解IPv6

IPv6系列-為什麼一定要了解IPv6

本文是《IPv6系列》文章的第一篇《入門指南》,用於快速瞭解並上手IPv6。

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


目錄

▪ 一. 為什麼要了解IPv6

▪ 二. 顧慮:IPv6地址太複雜了,記不住啊

▪ 三. 顧慮:每臺服務器都有IPv6地址,會暴露整個內網,不安全

▪ 四. 顧慮:IPv6地址有好幾種類型,很難區分和記憶

▪ 五. 需要學哪些知識

▪ 六. IPv6基礎知識

▪ 七. IPv6地址生成

▪ 八. 常用命令

▪ 九. 在線測試工具

▪ 十. 開啟與關閉IPv6

▪ 十一. 在CentOS7上配置靜態IPv6地址

▪ 十二. 如何讓我的網站對外提供IPv6服務


一. 為什麼要了解IPv6

你以為我會講些“正確的廢話”,比如IPv6地址空間巨大,可以讓地球上的每一粒沙子擁有一個IP地址?比如IPv6更加安全?

錯!我才不在意這些,這跟我們有什麼關係。

我要講的,是不上IPv6,會有哪些後果。

1️⃣ 勢不可擋:各大運營商已經在全面鋪設IPv6,包括手機、家庭寬帶,比如筆者所在地福州的移動4G手機,已經獲得IPv6地址。

2️⃣ 坐以待斃:當IPv6佔用率達到一定比例的時候,我相信已有的網站、新申請備案的網站,會被強制要求上IPv6,如果不配置,已有網站停止運營、申請備案不予通過。甚至,到那時,手機、家庭寬帶,會僅獲得IPv6地址,無法獲得IPv4地址。最後,IPv4從中國互聯網中廢除。

通過上述2點,可以知道,作為服務端(如WEB服務提供方)是必須要上IPv6的,否則不僅無法運營、連用戶也都無法訪問。

那麼,內網需要IPv6嗎

▪ 家庭內網,比如連著wifi的手機、電腦

▪ 企業內網,比如辦公室內每個工位上的電腦

▪ 數據中心內網,比如機房內的服務器、公有云主機

這些內網環境,是否也需要配置ipv6地址?

答:只要你想訪問IPv6互聯網,就必須要在終端上配置IPv6地址。原因在於“IPv6優先原則”,越來越多的程序,比如各大編程語言的許多主流模塊/框架,在進行域名解析時,會通過dns優先查詢AAAA記錄(對應IPv4的A記錄) ,若該域名有提供IPv6訪問,就必然會解析出AAAA記錄。接著,就會優先通過IPv6來訪問(即使本機沒有配置IPv6,甚至沒有啟用IPv6),如果IPv6網絡不通,則該訪問直接失敗,即便有的模塊/框架在失敗後會嘗試IPv4,但已經增加了許多的延時

綜上所述,IPv6已經來臨,而不是還在討論中,現在沒有任何理由繼續固守IPv4了。與其坐以待斃,不如主動學習


二. 顧慮:IPv6地址太複雜了,記不住啊

說的好像IPv4地址你能背下來似的,其實IPv6地址只是長度增加,並且展示方式從十進制改為十六進制,具體的計算方式是一樣的。而且有dns在,沒必要去背IP地址,就算是內網的IPv6地址,也可以通過DHCPv6或者路由器發送RA包來自動生成IPv6地址。


三. 顧慮:每臺服務器都有IPv6地址,會暴露整個內網,不安全

擔心是對的,但解決方案也和IPv4一樣,有2種:

▷ 可以在內網服務器上配置“IPv6私網地址”,這樣公網就訪問不到了。在IPv6中,私網地址是fd00::/8,這相當於IPv4的10.0.0.0/8、172.16.0.0/12、192.168.0.0/16。然後在網關上配置NAT

▷ 依然用“IPv6公網地址”(即全球單播地址),但在網關上配置“有狀態防火牆”

無論是哪種方案,最終都實現了“只出不進”,即服務器可以主動訪問IPv6公網,但公網無法主動訪問進來,保證了內網的安全。


四. 顧慮:IPv6地址有好幾種類型,很難區分和記憶

什麼全球單播、唯一本地、鏈路本地,類型太多了吧?其實,常用的IPv6地址,在IPv4中都能一一對應找到。

全球單播:對應IPv4的公網

唯一本地:對應IPv4的私網

鏈路本地:在IPv4中也有對應,就是169.254.x.x(這在IPv4中也叫鏈路本地)

至於其他類型的地址,要不然是被廢棄的,要不然就是很少用到的,除非工作所需碰到,否則完全不用理會,上面這3種類型已經足夠用了。除了這3種,下面這2個特殊地址一定很常見

::1,表示環回地址,對應IPv4中的127.0.0.1

::,表示未指定地址,對應IPv4中的0.0.0.0


五. 需要學哪些知識

▷ 開發、測試、DBA:只需簡單瞭解IPv6即可,也就是本文看明白後基本就夠了

▷ 運維人員:除了需要了解IPv6,還需要掌握IPv6通訊的工作原理、防火牆的配置等等,詳見《IPv6系列》後續文章

▷ 網工:需要深入瞭解IPv6,包括IPv6的各類數據包格式、各種架構、多播路由通訊等等


六. IPv6基礎知識

關於IPv6的教程,網絡上已經有非常多寫的很棒的教程了,筆者沒有把握能寫出更好的,因此《IPv6系列》文章,將把重點放在一些概念、解決方案、很多人沒注意到的坑、工作原理等等

IPv6地址長度

▷ IPv4:32 bit

▷ IPv6:128 bit

可以這麼記憶,IPv6比IPv4多了一倍的段落,並且每個段落裡增加了一倍的長度,所以IPv6比IPv4長了2x2=4倍

IPv6地址組成

▷ IPv4:網絡號+主機號/子網掩碼,如192.168.1.2/24

▷ IPv6:前綴ID+接口ID/前綴長度,如2001:0000:0000:0000:0011:0000:0000:0010/64

地址簡寫

▷ IPv4:不支持

▷ IPv6:壓縮0

注意:IPv6單個段落內可重複壓縮,比如上述可壓縮為2001:0:0:0:11:0:0:10/64;若多個段落連續為0,可壓縮,但只能壓縮一次,比如上述可進一步壓縮為2001::11:0:0:10/64,或者2001:0:0:0:11::10/64,通常為前者

檢驗方法

找一臺linux服務器,比如centos7系統,執行ip addr add ${IPv6地址} dev eth0,然後ip addr show dev eth0看一下會如何壓縮

IPv6地址分類

IPv6系列-為什麼一定要了解IPv6

注意:表格列出的是比較常見的地址,並非全部地址

另外,除了單播、多播,IPv6相比IPv4新增了一種任播(anycast),任播是屬於單播範疇內的,無法單純從地址識別出任播

術語

▪ 節點:任何運行IPv6的設備

▪ 路由器:轉發不是發給自己的IPv6報文的節點

▪ 主機:非路由器的節點

▪ 接口:節點和鏈路相連的物理或邏輯配件

▪ 鏈路:由路由器分割的網絡接口集合

▪ 鄰居:同一鏈路上的節點

▪ 鏈路MTU:鏈路能傳輸的最大單位,即最大的IPv6報文字節數

▪ 路徑MTU:IPv6源端和目的端之間能傳輸的最大的IPv6報文字節數,通常是路徑中所有鏈路的最小鏈路MTU


七. IPv6地址生成

▷ IPv4:手工指定、dhcp分配

▷ IPv6:手工指定、dhcp分配、自動生成

在IPv6裡,主流方案就是自動生成IP,而不是手工指定或dhcp分配。當然,作為服務端是需要手工指定的,但對於更廣闊的客戶端來說,基本都是自動生成。這種自動生成的,叫做“無狀態”,相對於“無狀態”,通過dhcp獲取到的固定IP,就叫做“有狀態”(dhcp也支持“無狀態”,這裡不做詳解)

除了協議規定的特殊地址,其他可自行分配的地址,都是可以在具體範圍內自動生成的,包括鏈路本地、全球單播、唯一本地。其中全球單播、唯一本地,是在接收到路由器發送的RA包後自動生成,具體生成的是全球單播還是唯一本地,是根據RA包內容中的前綴而定

如何自動生成的

無需關心,只要記住一點,能用即可。因為有多種自動生成的方法,有通過mac地址換算而來,有通過某種算法獲得,也可能是完全隨機而來,而且有的自動生成的地址還會每隔一段時間自動更換,不同的操作系統實現方法不一樣,無法統一

為什麼會出現這種無法統一的情況

原因在於IPv6協議一直在發展,新協議推翻老協議,每個實現者(也就是不同的操作系統)的誕生時間不同,所參考的協議就有可能不同,而且有的協議還支持不只一種方式,不同實現者出於不同的考量就會採用不同的方式。怎麼辦?沒辦法,要不然不理會,要不然投入精力去研究其不同之處,沒有一勞永逸的方法。(這段話不僅適用IPv6地址,還適用其他方面,比如DHCPv6等等)


八. 常用命令

# 查看ip
ip -6 addr

# 查看路由
ip -6 route

# 查看多播地址
ip -6 maddr
netstat -gn

# 查dns AAAA記錄(走ipv4線路)
dig -t AAAA fzxiaomange.com
nslookup -query=AAAA fzxiaomange.com

# 查dns AAAA記錄(走ipv6線路)
dig @2620:0:ccc::2 -6 -t AAAA fzxiaomange.com
nslookup -query=AAAA fzxiaomange.com 2620:0:ccc::2

# 查dns AAAA記錄(走ipv6線路的最純粹、最完整、最靠譜方法)
dig @2620:0:ccc::2 -t AAAA -6 fzxiaomange.com +trace

# curl
curl -6 https://fzxiaomange.com

# ping
ping6 fzxiaomange.com

# trace route
mtr -6 fzxiaomange.com
traceroute6 fzxiaomange.com
tracert6 fzxiaomange.com
tracepath6 fzxiaomange.com

# 鄰居地址解析,類似ipv4的arping
ndisc6 -n 2002::102 eth0

# iptables查看
ip6tables-save

# tcpdump
tcpdump -nnn -i eth0 ip6

九. 在線測試工具

公共dns列表

https://dns.icoa.cn/ipv6/

查詢網站是否提供IPv6

https://ready.chair6.net/
http://ip6tools.com/#checkWebServer

查詢我自己是否擁有公網IPv6地址

http://www.test-ipv6.com
http://ip6tools.com/#WhatisMyIPv6Address

十. 開啟與關閉IPv6

# 檢查ipv6是否開啟
sysctl -a | grep ipv6 | grep disable # 如果輸出的值是一堆0則表示ipv6是開啟的
ip -6 addr | grep inet6,如果有看到fe80則表示ipv6是開啟的

# 臨時禁用ipv6
sysctl -w net.ipv6.conf.all.disable_ipv6=1

# 臨時開啟ipv6
sysctl -w net.ipv6.conf.all.disable_ipv6=0

# 徹底禁用ipv6
在grub裡添加ipv6.disable=1,然後重啟操作系統

十一. 在CentOS7上配置靜態IPv6地址

1️⃣ 內核參數

# /etc/sysctl.conf裡增加
net.ipv6.conf.all.disable_ipv6=0
net.ipv6.conf.default.disable_ipv6=0
net.ipv6.conf.lo.disable_ipv6=0

# 立即生效
sysctl -p

2️⃣ /etc/sysconfig/network裡增加一行

NETWORKING_IPV6=yes

3️⃣ /etc/sysconfig/network-scripts/ifcfg-eth0

DEVICE=eth0
BOOTPROTO=none
ONBOOT=yes
IPV6INIT=yes
IPV6ADDR=2002::102/64
IPV6_DEFAULTGW=2002::1

4️⃣ 重啟網絡

systemctl restart network

十二. 如何讓我的網站對外提供IPv6服務

1️⃣ 找你的運營商要IPv6地址

▷ 如果你的服務器是託管在電信機房裡,那麼就找電信運營商要,通常會給你一個/48或/56的地址段

▷ 如果你的服務器用的是公有云,比如阿里雲、騰訊雲,就找他們要,只不過由於IPv6還未全面普及,因此有的地域有提供IPv6,有的沒有。另外,提供IPv6的方案也不完全一樣,有的是以雙棧方式,就是你的雲主機裡可以直接看到IPv6地址,而有的是負載均衡或者彈性IP方式提供。筆者的網站是放在騰訊雲上,用的就是IPv6的L4負載均衡

2️⃣ 接下來,在dns裡為自己的網站域名增加AAAA記錄。(其實現在很多大廠dns服務器,即NS,還未提供純IPv6線路的解析,比如筆者的個人網站域名解析商當前不支持ipv6-only,這點會在後續文章裡進行詳細說明)

3️⃣ 最後一步,測試IPv6,可通過https://ready.chair6.net/進行查詢

這裡展示下筆者個人網站支持IPv6後的效果

IPv6系列-為什麼一定要了解IPv6

IPv6系列-為什麼一定要了解IPv6

相關推薦

推薦中...