Gavin

阿里云centos6.5开启ipv6

背景

前段时间接了个外包项目,ios端已经提交AppStore受审,今天收到邮件说,他们在IPV6的wifi环境下,发现我们APP的所有接口都没有反应,让我们解决这个问题先。。。。

“苹果商店6月1日起,强制app需要支持IPv6-only的网络。”

此时我的内心是崩溃的,在国内的环境支持IPV6,你tm真的不是在逗我!?

服务器环境

服务器端用了阿里云的ECS,查了下阿里云的文档和论坛资源,发现阿里云现在没有提供IPV6的地址,并且默认关闭了IPV6的隧道,要想让我们的服务支持ipv6,最简单的办法只能通过https://tunnelbroker.net提供的6in4隧道来实现了。

服务器OS: centos 6.5

一、申请IPV6隧道

参考文章[基础常识]为阿里云ECS(Windows 2012)创建IPv6隧道地址

1. 注册账号(https://tunnelbroker.net 注册过程比较简单,基本的内容拼音随便写写也可以过的,注册后需要邮箱验证)

2. 创建IPV6隧道

1如图,选择左侧的create regular tunnel创建隧道,在右侧的IPV4 endpoint中输入你的服务器的IPV4地址,选择asia hk就可以提交了

3. 提交后可以查看到你的6in4隧道情况,页面请不要关闭

2

二、服务器开启IPV6服务

参考文章centos6.5开启IPV6服务


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
modprobe ipv6
#如果未报错,请忽略以下所有代码

#可能会提示错误Fetal:Module not found。此时可以尝试使用

#1. 启用IPv6模块
insmod /lib/modules/$(uname -r)/kernel/net/ipv6/ipv6.ko
#2. 加入开机启动
echo 'insmod /lib/modules/$(uname -r)/kernel/net/ipv6/ipv6.ko' >> /etc/rc.local
#3. 编辑文件
vi /etc/modprobe.d/disable_ipv6.conf
#将以下代码
alias net-pf-10 off
alias ipv6 off
options ipv6 disable=1
#改为
alias net-pf-10
alias ipv6
options ipv6 disable=0

#4. 重启网络服务
service network restart

三、建立IPV6隧道并重启后自动加载

参考文章Cent0S Tunnelbroker IPV6隧道自动加载


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
#1.编辑/etc/sysconfig/network,加入以下内容来打开IPV6和设置默认网关:

NETWORKING_IPV6=yes
IPV6_DEFAULTDEV="sit1"

#2.编辑/etc/sysconfig/network-scripts/ifcfg-eth0,加入默认IPV6网关地址
#具体地址参考步骤一种申请的6in4隧道
#P.S:ifcfg-eth0为你的网卡配置文件,请根据自己的实际情况修改
#阿里云eth0网卡绑定的是内网地址,在这个网卡配置上动手机,不担心外网登陆不上

IPV6ADDR=IPV6网关

#3.创建/etc/sysconfig/network-scripts/ifcfg-sit1 配置文件

ONBOOT=yes
DEVICE=sit1
BOOTPROTO=none
IPV6INIT=yes
IPV6TUNNELIPV4=隧道服务器的IPV4,参考步骤一得到的地址
IPV6TUNNELIPV4LOCAL=本机的IPV4地址,参考步骤一得到的地址
IPV6ADDR=本机IPV6开始地址,参考步骤一得到的地址

#4.设置完成后,重启
service network restart

#5.查看ifconfig是否生效
ifconfig

#检验ipv6是否生效,国内可以使用百度。。。
ping6 ipv6.baidu.com

四、修改nginx配置


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
#1. 检查nginx是否支持ipv6,查看输出结果是否有--with-ipv6字样,如果没有,sorry,请重新编译
nginx -V

#2. 修改默认配置文件
vi /etc/nginx/nginx.conf

#3. 在include /etc/nginx/conf.d/*.conf前插入下列语句
server {
  listen 80;
  listen [::]:80 ipv6only=on;
}

#4. 检查conf.d/*.conf中是否有listen 80的,都可以删了
#为什么要这样。。。因为nginx不支持在不同的vhost里分别listen ipv6的80端口,会报如下错误
#nginx: [emerg] duplicate listen options for [::]:80 in /etc/nginx/conf.d/***.conf:3

#5. 重启nginx
nginx -s reload

五、修改域名解析

还没验证是否成功(可以使用ipv4.sixxs.org代理来验证,例如你的host为www.abc.com,则访问www.abc.com.ipv4.sixxs.org)

在域名解析中,记录类型选择AAAA,记录地址输入你步骤一得到的IPV6地址即可

参考文章通过 IPV6 地址访问域名,如何设置域名解析?

结语

折腾了三个多小时,终于折腾完了,喊朋友重新提交验证了,等苹果帮我检查是否有问题吧(已过)。。。如果有误,我再重新调整。

目前国内这块相关资料比较零散比较少,随整理出我这次折腾的过程给大家参考,操作需谨慎,如有错误欢迎指出。

码字很辛苦,转载请注明来自淡兰色的海洋《阿里云centos6.5开启ipv6》

评论

  1. 深圳 #1

    死活Ping6 不通

    回复
    2016-10-12