阿里云服务器以及CDN支持IPV6的方法

「特别注意:阿里云已经提供了 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

options ipv6 disable=0

编辑 vim /etc/sysconfig/network 文件(需要root权限)
NETWORKING_IPV6 设置成 yes

NETWORKING_IPV6=yes

然后执行 service network restart 重启

编辑 /etc/sysctl.conf 文件(需要root权限)

net.ipv6.conf.all.disable_ipv6 = 0
net.ipv6.conf.default.disable_ipv6 = 0
net.ipv6.conf.lo.disable_ipv6 = 0

再运行 sysctl -p 的命令,启用IPv6 (需要root权限)

开启IPv6

使用 ip addr 查看是否已经有 inet6 的地址,如果有说明已经开启ipv6

[work@xxx tmp]$ ip addr
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN qlen 1link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00inet 127.0.0.1/8 scope host lovalid_lft forever preferred_lft foreverinet6 ::1/128 scope hostvalid_lft forever preferred_lft forever
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000link/ether 00:16:3e:30:58:e6 brd ff:ff:ff:ff:ff:ffinet 172.17.252.95/20 brd 172.17.255.255 scope global dynamic eth0valid_lft 31454018sec preferred_lft 31454018secinet6 fe80::216:3eff:fe30:xxxx/64 scope linkvalid_lft forever preferred_lft forever

其他

如果有Nginx 服务,需要监听 IPv6的地址
如下所示,加个 listen [::]:80 ipv6only=on; 即可(如果出现不支持,或者nginx版本太低,可能没有加入ipv6的支持,需要重新编译 –with-ipv6 的版本)

server {listen       80;listen [::]:80 ipv6only=on;server_name  www.xxx.com;index index.php;...

使用 netstat -tuln 来查看是否用 tcp6 ::80的监听,如果有则说名监听成功
类似这种

tcp6       0      0 xxx:xxx:23:11f6::2:80  :::*                    LISTEN
tcp6       0      0 ::1:25                  :::*                    LISTEN
tcp6       0      0 :::443                  :::*                    LISTEN

如果没有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

[work@iz2ze4p8dzdjgu7fh60vqcz tmp]$ ping6 he.net
PING he.net(he.net (2001:470:0:76::2)) 56 data bytes
64 bytes from he.net (2001:470:0:76::2): icmp_seq=1 ttl=58 time=432 ms
64 bytes from he.net (2001:470:0:76::2): icmp_seq=2 ttl=58 time=435 ms
64 bytes from he.net (2001:470:0:76::2): icmp_seq=3 ttl=58 time=441 ms
64 bytes from he.net (2001:470:0:76::2): icmp_seq=4 ttl=58 time=429 ms
^C

能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设置,暂时还没研究。

Published by

风君子

独自遨游何稽首 揭天掀地慰生平