

我一直在努力學習關於 IPv6 的相關知識。一方面,IPv6 的基礎概念是很簡單的(沒有足夠的 IPv4 地址可以滿足互聯網上的所有設備,所以人們發明了 IPv6!每個人都能有足夠的 IPv6 地址!)
但是當我試圖進一步理解它時,我遇到了很多問題。其中一個問題是:為什麼twitter.com🔗 twitter.com不支持 IPv6。假設,網站不支持 IPv6 並不會造成很多困難,那麼為什麼網站需要支持 IPv6 呢?
我在 Twitter 上詢問了很多人為什麼他們的服務器支持 IPv6🔗 twitter.com,我得到了很多很好的答案,我將在這裡總結一下。事先說明一下,因為我對 IPv6 基本上毫無經驗,所以下面所總結的理由中可能會有寫得不準確的地方,請大家多多包涵。
首先,我想解釋一下為什麼twitter.com🔗 twitter.com可以不支持 IPv6,因為這是最先讓我困惑的地方。

怎麼知道twitter.com🔗 twitter.com不支持 IPv6 呢?
你可以使用dig命令以AAAA的選項查詢某一個域名的 IPv6 地址記錄,如果沒有記錄,則表明該域名不支持 IPv6。除了twitter.com🔗 twitter.com,還有一些大型網站,如github.com🔗 github.com和stripe.com🔗 stripe.com也不支持 IPv6。

為什麼twitter.com🔗 twitter.com仍然適用於 IPv6 用戶?
我發現這真的很令人困惑。我一直聽說因為 IPv4 地址已經用完了,從而很多互聯網用戶被迫要使用 IPv6 地址。但如果這是真的,twitter.com🔗 twitter.com怎麼能繼續為那些沒有 IPv6 支持的人提供服務呢?以下內容是我昨天從 Twitter 會話中學習到的。
互聯網服務提供商(ISP)有兩種:
我的互聯網服務提供商屬於第 1 類,因此我的計算機有自己的 IPv4 地址,實際上我的互聯網服務提供商甚至根本不支持 IPv6。
但是很多互聯網服務提供商(尤其是北美以外的)都屬於第 2 類:他們沒有足夠的 IPv4 地址供所有用戶使用。這些互聯網服務提供商通過以下方式處理問題:
所有互聯網服務提供商都需要一些IPv4 地址,否則他們的用戶將無法訪問twitter.com🔗 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 的一些其他性能優勢:

原因四:能夠恢復 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 的地址空間很大,所以如果你想在網絡中嘗試某些東西的時候,你可以使用 IPv6 子網進行實驗,基本上你之後不會再用到這個子網了。

原因十一:為了運行自己的自治系統(AS)
也有人說他們為了運行自己的自治系統(我在這篇BGP 帖子🔗 jvns.ca中談到了什麼是 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 的問題,也許我之後再會探討:
這篇來自 Tailscale 的 IPv4 與 IPv6 文章🔗 tailscale.com非常有意思,並回答了上述的一些問題。
via:https://jvns.ca/blog/2022/01/29/reasons-for-servers-to-support-ipv6/
作者:Julia Evans選題:lujun9972譯者:chai001125校對:wxy
本文由LCTT原創編譯,Linux中國榮譽推出

