前言
尽管在 2010 左右 IPV6 就开始刷存在感了,但是直到美帝把 IPV4 的资源都分配完了,IPV6 依旧没有获得很好的支持。
但是最近在开发者的圈子里,IPV6 开始怒刷存在感,因为苹果现在开始需要每一个 APP 都支持 IPV6-Only 环境下的使用。我觉得这是一件好事,如果不好好推动一把, IPV6 的体验始终不会跟上去。所以,如果苹果不推,那么迟早谷歌也会强推 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
就创建好了,
五、修改网络参数,使系统支持 IPV6。编辑
/etc/sysctl.conf
将
net.ipv6.conf.all.disable_ipv6 = 1
net.ipv6.conf.default.disable_ipv6 = 1
net.ipv6.conf.lo.disable_ipv6 = 1
修改为
net.ipv6.conf.all.disable_ipv6 = 0
net.ipv6.conf.default.disable_ipv6 = 0
net.ipv6.conf.lo.disable_ipv6 = 0
再运行 sysctl -p
的命令,启用IPv6
[email protected]:~# sysctl -p
net.ipv6.conf.all.disable_ipv6 = 0
net.ipv6.conf.default.disable_ipv6 = 0
net.ipv6.conf.lo.disable_ipv6 = 0
vm.swappiness = 0
net.ipv4.neigh.default.gc_stale_time = 120
net.ipv4.conf.all.rp_filter = 0
net.ipv4.conf.default.rp_filter = 0
net.ipv4.conf.default.arp_announce = 2
net.ipv4.conf.all.arp_announce = 2
net.ipv4.tcp_max_tw_buckets = 5000
net.ipv4.tcp_syncookies = 1
net.ipv4.tcp_max_syn_backlog = 1024
net.ipv4.tcp_synack_retries = 2
net.ipv4.conf.lo.arp_announce = 2
net.ipv4.conf.lo.arp_announce = 2
六、在 HE 哪里,点击 Example Configurations
,然后选择自己的系统,这里以 Debian 8.5 为例。
修改 /etc/network/interfaces
文件,在下面加上,如图片中列出的代码
保存,然后重启系统。
七、确认开启。
执行 ifup he-ipv6
确认 IPv6 已启用。
[email protected]:~# ifup he-ipv6
ifup: interface he-ipv6 already configured
ifup: interface he-ipv6 already configured
八、DNS 添加 AAAA 记录到分配的 IP 上。
Web 服务器软件确认开启
并不是服务器开启 IPV6,就一切 OK 了。在 Apache 、Nginx 这样的 WEb 服务器软件上依旧要进行相关设置。
Nginx
server {
listen 80; // 监听 IPv4 的 80 端口
listen [::]:80; // 监听 IPv6 的 80 端口
}
server {
listen 443 ssl http2; // 监听 IPv4 的 443 端口
listen [::]:443 ssl http2; // 监听 IPv6 的 443 端口
}
Apache HTTPD
Listen 服务器 IPV4 IP:8080
Listen [分配的 IPV6 IP]:8080
都别忘记重启!
检测
dig
支持 dig 的系统,可以使用 dig aaaa 来检测域名是否正确解析 IPV6
WWW.MF8.BIZ'S-NOTEBOOK:~ MF8$ dig mirrors6.tuna.tsinghua.edu.cn aaaa ; <<>> DiG 9.8.3-P1 <<>> mirrors6.tuna.tsinghua.edu.cn aaaa ;; global options: +cmd ;; Got answer: ;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 64171 ;; flags: qr rd ra; QUERY: 1, ANSWER: 2, AUTHORITY: 0, ADDITIONAL: 0 ;; QUESTION SECTION: ;mirrors6.tuna.tsinghua.edu.cn. IN AAAA ;; ANSWER SECTION: mirrors6.tuna.tsinghua.edu.cn. 300 IN CNAME mirrors6.a.s.tuna.tsinghua.edu.cn. mirrors6.a.s.tuna.tsinghua.edu.cn. 300 IN AAAA 2402:f000:1:416:166:111:206:63 ;; Query time: 623 msec ;; SERVER: 223.6.6.6#53(223.6.6.6) ;; WHEN: Tue Sep 6 11:55:31 2016 ;; MSG SIZE rcvd: 102
IPV6 test
http://ipv6-test.com/validate.php 可以很方便详细的检测 IPV6 的支持情况。
Route53 ?
AWS 家的
博主好厉害,不过评论版貌似坏掉了,还望修复
什么问题?
过来转转
博主做Android的?
不是啊,咋咧?