阿里云服务器以及CDN支持IPV6的方法
自从AppStore要求必须支持IPv6后,国民感到震惊的同时,也加速了国内的ipv6的普及。 但是国内的服务器托管商(比如阿里云)几乎都不支持IPv6。
本文是博主金亚大王呕心沥血的填坑之旅,亲测可行,完美支持IPv6
关键词: 阿里云,ECS, IPV6, CDN,IPV6隧道
废话不多说,说说我是怎么解决的。
思路:
数据交互层 建立IPv6隧道到服务器
静态CDN 需要使用国外的DNS来CNAME
1,阿里云服务器配置
CentOS 7.3 专有网络(经典网络也没关系)
修改配置
编辑 vim /etc/modprobe.d/disable_ipv6.conf 文件(需要root权限)
disable 设置成 0
编辑 vim /etc/sysconfig/network 文件(需要root权限)
NETWORKING_IPV6 设置成 yes
然后执行 service network restart 重启
编辑 /etc/sysctl.conf 文件(需要root权限)
再运行 sysctl -p 的命令,启用IPv6 (需要root权限)
开启IPv6
使用 ip addr 查看是否已经有 inet6 的地址,如果有说明已经开启ipv6
其他
如果有Nginx 服务,需要监听 IPv6的地址
如下所示,加个 listen [::]:80 ipv6only=on; 即可(如果出现不支持,或者nginx版本太低,可能没有加入ipv6的支持,需要重新编译 –with-ipv6 的版本)
使用 netstat -tuln 来查看是否用 tcp6 ::80的监听,如果有则说名监听成功
类似这种
如果没有netstat,安装一下 sudo yum install net-tools -y
2. IPv6隧道配置
到 https://tunnelbroker.net/ 网站申请一个tunnel
(有人说qq邮箱收不到验证邮件,建议使用Gmail)
注册步骤就不说了,注册后需要验证邮箱,然后登陆
创建Tunnel
IPv4 Endpoint 需要些服务器的外网IP地址,也就是用这个IP能访问到你的服务。
查看Tunnel信息
红框里面的 Client IPv6 Address 就是你的IPv6 地址,之后解析域名的时候用的就是它(域名里不用写“/64”)哦~
配置信息
注意这里的 local ip需要写内网IP,下面的NOTE: 已经用英文说明了
然后把这一坨命令直接在服务器上运行就行了(注意需要root权限)
测试 ping6 he.net
能ping通说明已经配置成功。
接下来只需要在DNS解析里面,将域名指向ipv6的地址即可,需要用AAAA记录
AAAA xxxx 2001:xxxxx
解析之后可以用 wget -6 http://xxxxxxx 来验证你的解析是否正确以及IPv6是否ok。如果能获取到网页信息,说明一切正常。(https同理)
3. 配置静态服务
静态服务器一般都有自带的CDN啥的,这些都ok,只是需要一个支持IPv6的域名CNAME到你自己的CDN就行了。
国内的DNS不要想了,基本都没法用,我这里用的国外的 cloudflare免费版
https://www.cloudflare.com
首先先用邮箱注册一个账号。
添加网站
然后添加网站。只需要写 xxx.com就行了,不需要二级域名
点击scan
然后他会有40多秒的时间去扫面此域名的DNS解析,同时会给你播放一个动画片
查看DNS解析
扫描结果页面一般都是空的,直接点 CONTINUE 继续就可以了
这里会让你选平台,当然是免费的
移交 DNS 解析
这里要注意了,是要把域名的DNS解析交接到 Cloudflare上面。
需要到你的域名运营商那里,设置域名的 DNS 【管理】
!!【重要】一旦将 DNS【管理】 修改到 cloudflare上面后,原来域名的所有解析将失效!!
所以不建议用原来的域名,建议新申请个域名来做这个事儿。
设置完解析后,点击CONTINUE
Cloudflare会去尝试接管此域名,
有可能会提示 解析失败,需要点击retry来重新检测
Status:Active 说明解析成功,这时候Cloudflare就可以解析你的DNS域名了
然后你需要在你的CDN服务商建立一个新的域名,然后将Cloudflare添加你自己的域名CNAME到你的新CDN域名即可
使用wget -6 http://xxxxx.png 来测试静态资源是否支持ipv6
ipv6-test
http://ipv6-test.com/validate.php 测试结果如下
备注:
所有的wget -6 需要在支持ipv6的机器上使用,比如你上面配置好的IPv6的服务器。
如果只是为了给苹果审核用,可能需要在代码里针对IPv6地址做特殊处理,比如IPv6地址访问的时候,需要返回IPv6的CDN地址。所以建议在返回的通用方法里统一做一次“替换”,以无缝接入IPv6。
我们是给IPv6单独部署了一台服务器,没有在整体的负载均衡下面,具体的负载均衡下的IPv6设置,暂时还没研究。