伺服器支持 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。
$ dig AAAA twitter.com
(empty response)
$ dig AAAA github.com
(empty response)
$ dig AAAA stripe.com
(empty response)
為什麼 twitter.com 仍然適用於 IPv6 用戶?
我發現這真的很令人困惑。我一直聽說因為 IPv4 地址已經用完了,從而很多互聯網用戶被迫要使用 IPv6 地址。但如果這是真的,twitter.com 怎麼能繼續為那些沒有 IPv6 支持的人提供服務呢?以下內容是我昨天從 Twitter 會話中學習到的。
互聯網服務提供商(ISP)有兩種:
- 能為所有用戶擁有足夠 IPv4 地址的 ISP
- 不能為所有用戶擁有足夠 IPv4 地址的 ISP
我的互聯網服務提供商屬於第 1 類,因此我的計算機有自己的 IPv4 地址,實際上我的互聯網服務提供商甚至根本不支持 IPv6。
但是很多互聯網服務提供商(尤其是北美以外的)都屬於第 2 類:他們沒有足夠的 IPv4 地址供所有用戶使用。這些互聯網服務提供商通過以下方式處理問題:
- 為所有用戶提供唯一的 IPv6 地址,以便他們可以直接訪問 IPv6 網站
- 讓用戶 共享 IPv4 地址,這可以使用 CGNAT(「 運營商級 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 地址)
這篇 來自 Tailscale 的 IPv4 與 IPv6 文章 非常有意思,並回答了上述的一些問題。
via: https://jvns.ca/blog/2022/01/29/reasons-for-servers-to-support-ipv6/
作者:Julia Evans 選題:lujun9972 譯者:chai001125 校對:wxy
本文轉載來自 Linux 中國: https://github.com/Linux-CN/archive