尽管在 2010 左右 IPV6 就开始刷存在感了,但是直到美帝把 IPV4 的资源都分配完了,IPV6 依旧没有获得很好的支持。
但是最近在开发者的圈子里,IPV6 开始怒刷存在感,因为苹果现在开始需要每一个 APP 都支持 IPV6-Only 环境下的使用。我觉得这是一件好事,如果不好好推动一把, IPV6 的体验始终不会跟上去。所以,如果苹果不推,那么迟早谷歌也会强推 IPV6。
阿里云CentOS
默认的阿里云CentOS系统是没有启用IPv6地址的
编辑文件,/etc/modprobe.d/disable_ipv6.conf,将其中的三行都注释掉
1 |
vi /etc/modprobe.d/disable_ipv6.conf |
个别系统是存在放dist.conf文件中
1 |
vi /etc/modprobe.d/dist.conf |
1 2 3 |
# alias net-pf-10 off # alias ipv6 off # options ipv6 disable=1 |
编辑文件,/etc/sysconfig/network,将其中的 NETWORKING_IPV6=no 改为 NETWORKING_IPV6=yes, 如果没有该配置可忽略。
重启系统,以让更改生效。系统重启后,运行 ifconfig 命令,可以看到IPv6的地址
IPv6-Only
IPv6-Only 意味着网络下只能连接上 IPv6 地址,没有 IPV4 的存在,这也就意味着 DNS 缓存服务器也必须是 IPv6 地址,只能连接上支持 IPv6 的服务器。如果要解析一个域名,域名本身及其所属的根域名的 DNS 服务器也必须统统支持 IPv6。
- 域名所属的根域名的 DNS 服务器 支持 IPv6
- 域名使用的 DNS 解析和 DNS 服务器 支持 IPv6
- 服务器 支持 IPV6,并拥有 IPV6 ip 资源
- 服务器系统和 Web 软件 支持 IPV6
域名和 DNS 服务
在 顶级域名的 IPV6 支持报告 中,我们可以看到截止本文发布,仅 98.1% 的顶级域名都已经支持 IPV6 的解析了。像:com、net、biz、cloud、top 都是支持的。
然后是 DNS 服务器了,国外的例如 CloudFlare、NS1、Rage53、DNSimple、Rage4 等,国内的 DnsPod、百度云加速、sDNS 都已经支持了。 不过截止本文发布,阿里云 DNS、Cloudxns 还不支持 IPV6-Only。
DNS 解析 IPV6,对应的是 AAAA 记录。 IPV4 对应的是 A 记录。
服务器支持 IPV6
目前,国外的 DigitalOcean、Vultr、Linode 都是默认分配 IPV6 IP 的,很多一些 VPS 品牌甚至会赠送一个段的 IPV6 资源。而在国内目前看来,无论是 阿里云、青云、腾讯云 还是其他,都并没有很好的 IPV6 支持。
如果我们的网站或应用托管在阿里云或者其他云上,那么要让其支持 IPV6-Only,那么目前有两种可行的方案就是:
- 服务器在第三层(网络层)使用隧道传输来曲线支持 IPV6
- HTTP Proxy ,让支持 IPV6 的服务器做反向代理,将 AAAA 记录解析到代理服务器上
- 使用 CDN 缓存,像 CloudFlare 这样的 CDN 只要使用就可以支持 IPV6
不过,上述的三种,都有一定缺陷,其中第一种缺陷最少,几乎原生;而反代受限于反代服务器的延时,而且建设成本也挺高的;CDN 缓存么,像 Cloudflare 在国内速度并不理想
隧道传输支持 IPV6
这里介绍使用 Hurricane Electric Free IPv6 Tunnel Broker 来拓展服务器支持 IPV6.Tunnel Broker 相当于建立在网络层(第三层)上的代理,需要你的服务器的操作系统支持,而且服务器必须要有一个固定的 IPv4 地址。
一、注册,https://www.tunnelbroker.net/ 记得,别忘了验证邮箱
二、创建隧道,https://www.tunnelbroker.net/new_tunnel.php
三、IPv4 Endpoint (Your side):
输入服务器的 IP ; Available Tunnel Servers:
这里选择一个延时最低的地域。经过测试亚洲的 香港、新加坡、日本 国内访问还都挺糟糕的。 推荐 Fremont。
四、点击 Create Tunnel
就创建好了,
在 HE 哪里,点击 Example Configurations
,然后选择自己的系统,这里以 CentOS 为例。
五、重新编译nginx加入 --with-ipv6
的支持,这时nginx就可以配置ipv6的地址了
1 2 3 4 5 6 7 8 9 |
server { listen 80; // 监听 IPv4 的 80 端口 listen [::]:80; // 监听 IPv6 的 80 端口 } server { listen 443 ssl http2; // 监听 IPv4 的 443 端口 listen [::]:443 ssl http2; // 监听 IPv6 的 443 端口 } |