---
author: Julia Evans
category: 技术
comments_data: []
count:
  commentnum: 0
  favtimes: 0
  likes: 0
  sharetimes: 0
  viewnum: 4207
date: '2022-10-15 15:51:14'
editorchoice: false
excerpt: 假设，网站不支持 IPv6 并不会造成很多困难，那么为什么网站需要支持 IPv6 呢？
fromurl: https://jvns.ca/blog/2022/01/29/reasons-for-servers-to-support-ipv6/
id: 15142
islctt: true
largepic: /images/p/202210/15/155046v94vbmo5imykfkxz.jpg
permalink: /article-15142-1.html
pic: /data/attachment/album/202210/15/155046v94vbmo5imykfkxz.jpg.thumb.jpg
related: []
reviewer: wxy
selector: lujun9972
summary: 假设，网站不支持 IPv6 并不会造成很多困难，那么为什么网站需要支持 IPv6 呢？
tags:
- IPv6
thumb: false
title: 服务器支持 IPv6 的原因
titlepic: true
translator: chai001125
updated: '2022-10-15 15:51:14'
---

![](/data/attachment/album/202210/15/155046v94vbmo5imykfkxz.jpg)


我一直在努力学习关于 IPv6 的相关知识。一方面，IPv6 的基础概念是很简单的（没有足够的 IPv4 地址可以满足互联网上的所有设备，所以人们发明了 IPv6！每个人都能有足够的 IPv6 地址！）


但是当我试图进一步理解它时，我遇到了很多问题。其中一个问题是：为什么 [twitter.com](http://twitter.com) 不支持 IPv6。假设，网站不支持 IPv6 并不会造成很多困难，那么为什么网站需要支持 IPv6 呢？


我在 Twitter 上询问了很多人 [为什么他们的服务器支持 IPv6](https://twitter.com/b0rk/status/1487156306884636672)，我得到了很多很好的答案，我将在这里总结一下。事先说明一下，因为我对 IPv6 基本上毫无经验，所以下面所总结的理由中可能会有写得不准确的地方，请大家多多包涵。


首先，我想解释一下为什么 [twitter.com](http://twitter.com) 可以不支持 IPv6，因为这是最先让我困惑的地方。


### 怎么知道 [twitter.com](http://twitter.com) 不支持 IPv6 呢？


你可以使用 `dig` 命令以 `AAAA` 的选项查询某一个域名的 IPv6 地址记录，如果没有记录，则表明该域名不支持 IPv6。除了 [twitter.com](http://twitter.com)，还有一些大型网站，如 [github.com](http://github.com) 和 [stripe.com](http://stripe.com) 也不支持 IPv6。



```
$ dig AAAA twitter.com
(empty response)
$ dig AAAA github.com
(empty response)
$ dig AAAA stripe.com
(empty response)

```

### 为什么 [twitter.com](http://twitter.com) 仍然适用于 IPv6 用户？


我发现这真的很令人困惑。我一直听说因为 IPv4 地址已经用完了，从而很多互联网用户被迫要使用 IPv6 地址。但如果这是真的，[twitter.com](http://twitter.com) 怎么能继续为那些没有 IPv6 支持的人提供服务呢？以下内容是我昨天从 Twitter 会话中学习到的。


互联网服务提供商（ISP）有两种：


1. 能为所有用户拥有足够 IPv4 地址的 ISP
2. 不能为所有用户拥有足够 IPv4 地址的 ISP


我的互联网服务提供商属于第 1 类，因此我的计算机有自己的 IPv4 地址，实际上我的互联网服务提供商甚至根本不支持 IPv6。


但是很多互联网服务提供商（尤其是北美以外的）都属于第 2 类：他们没有足够的 IPv4 地址供所有用户使用。这些互联网服务提供商通过以下方式处理问题：


* 为所有用户提供唯一的 IPv6 地址，以便他们可以直接访问 IPv6 网站
* 让用户 *共享* IPv4 地址，这可以使用 CGNAT（“<ruby> <a href="https://en.wikipedia.org/wiki/Carrier-grade_NAT">  运营商级 NAT </a> <rt>  carrier-grade NAT </rt></ruby>”）或者“464XLAT”或其他方式。


所有互联网服务提供商都需要 *一些* IPv4 地址，否则他们的用户将无法访问 [twitter.com](http://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 帖子](https://jvns.ca/blog/2021/10/05/tools-to-look-at-bgp-routes/) 中谈到了什么是 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](https://docs.digitalocean.com/products/networking/floating-ips/) （LCTT 译注：一家建立于美国的云基础架构提供商，面向软件开发人员提供虚拟专用服务器（VPS））只提供 IPv4 的浮动地址，不提供 IPv6 的浮动地址。为什么不提供呢？有更多 IPv6 地址，那提供 IPv6 的浮动地址不是变得更 *便捷* 吗？
* 当我尝试 ping IPv6 地址时（例如 [example.com](http://example.com) 的 IP 地址`2606:2800:220:1:248:1893:25c8:1946`），我得到一个报错信息 `ping: connect: Network is unreachable`。这是为什么呢？（回答：因为我的 ISP 不支持 IPv6，所以我的电脑没有公共 IPv6 地址）


这篇 [来自 Tailscale 的 IPv4 与 IPv6 文章](https://tailscale.com/kb/1134/ipv6-faq/) 非常有意思，并回答了上述的一些问题。




---


via: <https://jvns.ca/blog/2022/01/29/reasons-for-servers-to-support-ipv6/>


作者：[Julia Evans](https://jvns.ca/) 选题：[lujun9972](https://github.com/lujun9972) 译者：[chai001125](https://github.com/chai001125) 校对：[wxy](https://github.com/wxy)


本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译，[Linux中国](https://linux.cn/) 荣誉推出