现在 iOS 上架因为 IPv6
被拒的小伙伴越来越多了,网上相关教程也比较多,不过有很多教程写得不是很完整或者压根就是网上随便转载的,自己都没测试过。今天我们就自己来配置一遍吧,我使用的是Ubuntu 14.04.5 LTS
,Web Server使用的是Nginx1.4.6
。
国内大部分服务器是不支持 IPv6 的,不过我们可以使用 HURRICANE ELECTRIC (下面我简称HE)提供的免费 IPv6 通道,自己手动配置 IPv6 。
创建 IPv6 通道
首选去 HE 注册一个账号,地址 https://www.tunnelbroker.net 。
然后点击 Create Regular Tunnel
,IPv4 Endpoint 项填写你的 ECS 外网 IPv4 地址,Available Tunnel Servers 项选择一个通道服务器并完成通道创建。通道服务器根据自己需求去选择,我选择的是 Tokyo, JP 。
完成后我们可以看到如下图所示界面:
配置Linux支持IPv6
使用 SSH 登录服务器,修改 /etc/sysctl.conf
文件,将下图三行配置改成0。
修改 /etc/network/interfaces
文件,在底部添加下面配置信息。
auto he-ipv6 iface he-ipv6 inet6 v4tunnel address <IPv6>::2 netmask 64 remote <HE Server IPv4> local <阿里云 内网 IPv4> endpoint any ttl 255 gateway <IPv6>::1 up ip -6 route add 2000::/3 via ::<HE Server IPv4> dev he-ipv6 up ip -6 addr add <IPv6>::1:1/128 dev he-ipv6 up ip -6 addr add <IPv6>::2:1/128 dev he-ipv6 down ip -6 route flush dev he-ipv6
其中 <IPv6>
是 HE 里的 Server IPv6 Address ,但是不带 ::1/64
注意 <> 也一起替换掉哦。强调下 local 是阿里云ECS的内网 IPv4 地址,很多人配置出错就是这里出了问题。
配置参考图如下所示:
配置完成后重启服务器后,重新使用 SSH 登录服务器,执行下面命令确认 IPv6 已经启用。
ifup he-ipv6
如果看到下面文字,则说明启用成功,没有看到请按照流程重新检查你的配置信息。
ifup: interface he-ipv6 already configured
监听IPv6端口
我们使用的是 Nginx ,如果你使用的是 Apache ,原理是一样的,具体配置修改请自行查阅。
server { listen 80 default_server; listen [::]:80 default_server ipv6only=on; root /var/www/api/public; index index.php index.html index.htm; server_name cp.6ag.cn; location / { try_files $uri $uri/ /index.php?$query_string; } location ~ \.php$ { try_files $uri /index.php =404; fastcgi_split_path_info ^(.+\.php)(/.+)$; fastcgi_pass unix:/var/run/php7.1-fpm.sock; fastcgi_index index.php; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; include fastcgi_params; } }
看第三行监听了 IPv6 80 端口,我没有使用 SSL ,则没有监听 443 端口,如果你需要可以自己添加,同理。
修改 Nginx 配置文件后别忘了重启 Nginx 使其生效哦,Nginx 安装方式不同,重启的方式也可能不同。
sudo service nginx restart
添加AAAA解析
注意是添加AAAA解析,而不是直接修改原来的A记录解析,否则可能手机蜂窝网会无法访问。
解析记录值填写 HE 里的 Client IPv6 Address 地址,但需要去掉 /64 。完成后如下所示:
测试结果
我们可以使用 IPv6 在线测试网站来测试我们的 IPv6 配置是否成功,访问 http://ipv6-test.com/validate.php,输入我们的域名,如果看到下图所示则说明OK了。