服務器支持 IPv6 的原因
我一直在努力學習關于 IPv6 的相關知識。一方面,IPv6 的基礎概念是很簡單的(沒有足夠的 IPv4 地址可以滿足互聯網上的所有設備,所以人們發明了 IPv6!每個人都能有足夠的 IPv6 地址!)
但是當我試圖進一步理解它時,我遇到了很多問題。其中一個問題是:為什么 ??twitter.com?? 不支持 IPv6。假設,網站不支持 IPv6 并不會造成很多困難,那么為什么網站需要支持 IPv6 呢?
我在 Twitter 上詢問了很多人 ??為什么他們的服務器支持 IPv6??,我得到了很多很好的答案,我將在這里總結一下。事先說明一下,因為我對 IPv6 基本上毫無經驗,所以下面所總結的理由中可能會有寫得不準確的地方,請大家多多包涵。
首先,我想解釋一下為什么 ??twitter.com?? 可以不支持 IPv6,因為這是最先讓我困惑的地方。
怎么知道 ??twitter.com?? 不支持 IPv6 呢?
你可以使用 ??dig?
? 命令以 ??AAAA?
? 的選項查詢某一個域名的 IPv6 地址記錄,如果沒有記錄,則表明該域名不支持 IPv6。除了 ??twitter.com??,還有一些大型網站,如 ??github.com?? 和 ??stripe.com?? 也不支持 IPv6。
為什么 ??twitter.com?? 仍然適用于 IPv6 用戶?
我發現這真的很令人困惑。我一直聽說因為 IPv4 地址已經用完了,從而很多互聯網用戶被迫要使用 IPv6 地址。但如果這是真的,??twitter.com?? 怎么能繼續為那些沒有 IPv6 支持的人提供服務呢?以下內容是我昨天從 Twitter 會話中學習到的。
互聯網服務提供商(ISP)有兩種:
- 能為所有用戶擁有足夠 IPv4 地址的 ISP
- 不能為所有用戶擁有足夠 IPv4 地址的 ISP
我的互聯網服務提供商屬于第 1 類,因此我的計算機有自己的 IPv4 地址,實際上我的互聯網服務提供商甚至根本不支持 IPv6。
但是很多互聯網服務提供商(尤其是北美以外的)都屬于第 2 類:他們沒有足夠的 IPv4 地址供所有用戶使用。這些互聯網服務提供商通過以下方式處理問題:
- 為所有用戶提供唯一的 IPv6 地址,以便他們可以直接訪問 IPv6 網站
- 讓用戶共享IPv4 地址,這可以使用 CGNAT(“??運營商級 NAT??carrier-grade NAT”)或者“464XLAT”或其他方式。
所有互聯網服務提供商都需要 一些 IPv4 地址,否則他們的用戶將無法訪問 ??twitter.com?? 等只能使用 IPv4 的網站。
為什么網站要支持 IPv6?
現在,我們已經解釋了為什么可以 不支持 IPv6。那為什么要支持 IPv6 呢?有下面這些原因。
原因一:CGNAT 是一個性能瓶頸
對我而言,支持 IPv6 最有說服力的論點是:CGNAT 是一個瓶頸,它會導致性能問題,并且隨著對 IPv4 地址的訪問變得越來越受限,它的性能會變得更糟。
有人也提到:因為 CGNAT 是一個性能瓶頸,因此它成為了一個有吸引力的拒絕服務攻擊(DDoS)的目標,因為你可以通過攻擊一臺服務器,影響其他用戶對該服務器的網站的可用性。
支持 IPv6 的服務器減少了對 CGNAT 的需求(IPv6 用戶可以直接連接!),這使得互聯網對每個人的響應速度都更快了。
我認為這個論點很有趣,因為它需要各方的努力——僅僅你的網站支持 IPv6,并不會讓你的網站更好地運行,而更重要的是如果 幾乎每個網站 都支持 IPv6,那么它將使每個人的互聯網體驗更好,尤其對于那些無法輕松訪問 IPv4 地址的國家/地區。
實際上,我不知道這在實踐中會有多大的關系。
不過,使用 IPv6 還有很多更自私的論點,所以讓我們繼續探討吧。
原因二:只能使用 IPv6 的服務器也能夠訪問你的網站
我之前說過,大多數 IPv6 用戶仍然可以通過 NAT 方式訪問 IPv4 的網站。但是有些 IPv6 用戶是不能訪問 IPv4 網站的,因為他們發現他們運行的服務器只有 IPv6 地址,并且不能使用 NAT。因此,這些服務器完全無法訪問只能使用 IPv4 的網站。
我想這些服務器并沒有連接很多主機,也許它們只需要連接到一些支持 IPv6 的主機。
但對我來說,即使沒有 IPv4 地址,一臺主機也應該能夠訪問我的站點。
原因三:更好的性能
對于同時使用 IPv4 和 IPv6(即具有專用 IPv6 地址和共享 IPv4 地址)的用戶,IPv6 通常更快,因為它不需要經過額外的 NAT 地址轉換。
因此,有時支持 IPv6 的網站可以為用戶提供更快的響應。
在實際應用中,客戶端使用一種稱為“Happy Eyeballs”的算法,該算法能夠從 IPv4 和 IPv6 中為用戶選擇一個最快的鏈接。
以下是網站支持 IPv6 的一些其他性能優勢:
- 使用 IPv6 可以提高搜索引擎優化(SEO),因為 IPv6 具有更好的性能。
- 使用 IPv6 可能會使你的數據包通過更好(更快)的網絡硬件,因為相較于 IPv4,IPv6 是一個更新的協議。
原因四:能夠恢復 IPv4 互聯網中斷
有人說他碰到過由于意外的 BGP 中毒,而導致僅影響 IPv4 流量的互聯網中斷問題。
因此,支持 IPv6 的網站意味著在中斷期間,網站仍然可以保持部分在線。
原因五:避免家庭服務器的 NAT 問題
將 IPv6 與家庭服務器一起使用,會變得簡單很多,因為數據包不必通過路由器進行端口轉發,因此只需為每臺服務器分配一個唯一的 IPv6 地址,然后直接訪問服務器的 IPv6 地址即可。
當然,要實現這一點,客戶端需要支持 IPv6,但如今越來越多的客戶端也能支持 IPv6 了。
原因六:為了擁有自己的 IP 地址
你也可以自己購買 IPv6 地址,并將它們用于家庭網絡的服務器上。如果你更換了互聯網服務提供商,可以繼續使用相同的 IP 地址。
我不太明白這是如何工作的,是如何讓互聯網上的計算機將這些 IP 地址路由轉發給你的?我猜測你需要運行自己的自治系統(AS)或其他東西。
原因七:為了學習 IPv6
有人說他們在安全領域中工作,為保證信息安全,了解互聯網協議的工作原理非常重要(攻擊者正在使用互聯網協議進行攻擊!)。因此,運行 IPv6 服務器有助于他們了解其工作原理。
原因八:為了推進 IPv6
有人說因為 IPv6 是當前的標準,因此他們希望通過支持 IPv6 來為 IPv6 的成功做出貢獻。
很多人還說他們的服務器支持 IPv6,是因為他們認為只能使用 IPv4 的網站已經太“落后”了。
原因九:IPv6 很簡單
我還得到了一堆“使用 IPv6 很容易,為什么不用呢”的答案。在所有情況下添加 IPv6 支持并不容易,但在某些情況下添加 IPv6 支持會是很容易的,有以下的幾個原因:
- 你可以從托管公司自動地獲得 IPv6 地址,因此你只需要做的就是添加指向該地址的?
?AAAA?
? 記錄 - 你的網站是基于支持 IPv6 的內容分發網絡(CDN),因此你無需做任何額外的事情
原因十:為了實施更安全的網絡實驗
因為 IPv6 的地址空間很大,所以如果你想在網絡中嘗試某些東西的時候,你可以使用 IPv6 子網進行實驗,基本上你之后不會再用到這個子網了。
原因十一:為了運行自己的自治系統(AS)
也有人說他們為了運行自己的自治系統(我在這篇 ??BGP 帖子?? 中談到了什么是 AS),因此在服務器中提供 IPv6。IPv4 地址太貴了,所以他們為運行自治系統而購買了 IPv6 地址。
原因十二:IPv6 更加安全
如果你的服務器 只 有公共的 IPv6 地址,那么攻擊者掃描整個網絡,也不能輕易地找出你的服務器地址,這是因為 IPv6 地址空間太大了以至于不能掃描出來!
這顯然不能是你僅有的安全策略,但是這是安全上的一個大大的福利。每次我運行 IPv4 服務器時,我都會驚訝于 IPv4 地址一直能夠被掃描出來的脆弱性,就像是老版本的 WordPress 博客系統那樣。
一個很傻的理由:你可以在你的 IPv6 地址中放個小彩蛋
IPv6 地址中有很多額外的位,你可以用它們做一些不重要的事情。例如,Facebook 的 IPv6 地址之一是“2a03:2880:f10e:83:face:b00c:0:25de”(其中包含 ??face:b00c?
?)。
理由還有很多
這就是到目前為止我所了解的“為什么支持 IPv6?”的理由。
在我理解這些原因后,相較于以前,我在我的(非常小的)服務器上支持 IPv6 更有動力了。但那是因為我覺得支持 IPv6,對我來說只需要很少的努力。(現在我使用的是支持 IPv6 的 CDN,所以我基本上不用做什么額外的事情)
我仍然對 IPv6 知之甚少,但是在我的印象中,支持 IPv6 并不是不需要花費精力的,實際上可能需要大量工作。例如,我不知道 Twitter 在其邊緣服務器上添加 IPv6 支持需要做多少繁雜的工作。
其它關于 IPv6 的問題
這里還有一些關于 IPv6 的問題,也許我之后再會探討:
- 支持 IPv6 的缺點是什么?什么會出錯呢?
- 對于擁有了足夠 IPv4 地址的 ISP 來說,有什么讓他們提供 IPv6 的激勵措施?(另一種問法是:我的 ISP 是否有可能在未來幾年內轉為支持 IPv6?或者他們可能不會支持 IPv6?)
- ??Digital Ocean?? (LCTT 譯注:一家建立于美國的云基礎架構提供商,面向軟件開發人員提供虛擬專用服務器(VPS))只提供 IPv4 的浮動地址,不提供 IPv6 的浮動地址。為什么不提供呢?有更多 IPv6 地址,那提供 IPv6 的浮動地址不是變得更便捷嗎?
- 當我嘗試 ping IPv6 地址時(例如??example.com?? 的 IP 地址?
?2606:2800:220:1:248:1893:25c8:1946?
?),我得到一個報錯信息??ping: connect: Network is unreachable?
?。這是為什么呢?(回答:因為我的 ISP 不支持 IPv6,所以我的電腦沒有公共 IPv6 地址)