配置阿里云ECS支持IPv6

前几天有个小伙伴的 iOS App 提交给水果审核没通过,水果给出的原因是应用在 IPv6 的环境下无法使用。原来小伙伴用的服务器是阿里云的 ECS ,而这玩意并不支持 IPv6 。。。这里就不得不吐槽一下阿里云这么大的云服务厂商,马上都要2017年了还不支持 IPv6 ,然而考虑一下 IPv6 在中国确实发展的并不怎么样。还好,我们可以用 Hurricane Electric 提供的 IPv6 Tunnel Broker 来让 ECS 支持 IPv6 。本文就以 Ubuntu 为例,来介绍一下具体的操作方法, CentOS 等操作系统都差不多,稍作修改也可以用。

首先,到 https://www.tunnelbroker.net/ 注册一个账户,然后登陆,戳 Create Regular Tunnel 。IPv4 Endpoint (Your side) 这里填你 ECS 的公网 IP 地址, Available Tunnel Servers 这里选一个,一般来说 HK 离大陆近延迟低,不过最近 HE.net 的香港似乎都是绕了一圈美国回来的,所以延迟反而很高,这个看自己情况选就好。然后戳 Create Tunnel ,就完成了。

接下来修改 ECS 里面的系统配置,由于阿里云的网络不支持 IPv6 所以他官方镜像里面相关的设置都是被禁用了的,想要使用 IPv6 就要做一些修改。首先修改  /etc/sysctl.conf  ,把下面三项设置都改为0

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

然后编辑 /etc/network/interfaces ,在下面添加 IPv6 Tunnel的相关信息

auto he-ipv6
iface he-ipv6 inet6 v4tunnel
address <IPV6>::2
netmask 64
remote <Tunnel 的 Server IPv4 Address>
local <阿里云的内网 IPv4 地址>
endpoint any
ttl 255
gateway <IPv6>::1
up ip -6 route add 2000::/3 via ::<HE 的 Server IPv4 Address> 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> 需要你自己替换成你刚刚申请的 Tunnel 的 Server IPv6 Address,但不包括最后的::1/64。

确定配置没问题之后就可以重启服务器了,重启之后看看 he-ipv6 接口有没有被启用,如果没有的话手动执行 ifup he-ipv6 启用相关接口,然后你就应该可以使用 Tunnel 里面显示的 Server IPv6 Address 来访问你的阿里云 ECS了。

这里有个坑,local 这里一开始我写的是阿里云外网的 IP 地址,然后发现启用了 Tunnel 之后无论是从外面访问阿里云还是阿里云本身访问 IPv6 都无效,在阿里云上 ping6 ipv6.google.com 的时候提示 no route to host,然后又仔细看了一下 HE.net tunnel broker 里面的描述发现了这样一句话:

NOTE: When behind a firewall appliance that passes protocol 41, use the IPv4 address you get from your appliance’s DHCP service instead of the IPv4 endpoint you provided to our broker.

所以 local 那里应该填的是 ECS 内网的 IP 地址,而不是公网的 IP 地址。。。