12 月 15 2016
配置阿里云ECS支持IPv6
本文共被喵星人侦察过40,352次。。。前几天有个小伙伴的 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 地址。。。
joe
2017 年 01 月 07 日 @ 17:21
多谢大神仙人指路,妈的,就死在那个坑上了,搞了一上午搞不定,换了内网ip搞定了。
Huang Chengda
2017 年 01 月 08 日 @ 11:44
换成内网ip后出现下面的情况了:
IPv6 web server web server is unreachable : Connection timed out
大懒猫
2017 年 01 月 08 日 @ 11:51
@Huang Chengda:你的web server也要配置监听IPv6对应的地址和端口才行
Huang Chengda
2017 年 01 月 08 日 @ 11:58
@joe:
我也遇到了相同的问题,但是我将地址写成内网地址,结果报错啦
IPv6 web server web server is unreachable : Connection timed out
Hauzer Lee
2017 年 03 月 08 日 @ 17:39
第二行那里是 iface 吧,前面的 i 丢了
大懒猫
2017 年 03 月 08 日 @ 17:42
@Hauzer Lee:啊啊。。。没注意。。。灰常感谢!已改!
Hauzer Lee
2017 年 03 月 08 日 @ 23:55
@大懒猫:客气啊,我是偷懒照抄了一把。。哈!然后报错了
花开两朵
2017 年 03 月 10 日 @ 01:55
你的配置里面有两个IPV4 的地址
是相同的地址还是不同的地址?
Nico
2017 年 03 月 14 日 @ 19:44
多谢!就是因为内网 ip 的问题半天没搞定-_-
fedor
2017 年 04 月 09 日 @ 09:45
@Huang Chengda:
我也同样遇到此问题,请问解决没有?
我是在服务器上先执行:ping6 ipv6.baidu.com,通过之后再在http://ipv6-test.com/validate.php上测试我的域名,这时是通过的,但是过了几秒钟后,再次测试,就报错:web server is unreachable : Connection timed out。什么原因?
lunny
2017 年 04 月 13 日 @ 23:04
我用内网IP在http://ipv6-test.com/validate.php上只能过第一项,用外网IP能过前两项,第三项不通过是怎么解决?
lunny
2017 年 04 月 13 日 @ 23:06
我的阿里云上有两个网卡eth0是内网,eth1是外网。
Lazy Cat
2017 年 04 月 16 日 @ 18:49
@lunny:这个问题我没遇到。。。你再检查一下各个配置是否正确?
Lazy Cat
2017 年 04 月 16 日 @ 18:50
@fedor:一开始能通说明网络配置应该是没问题的。。。你看看其他地方是不是哪里有脚本之类的会重置网络配置?
sos
2017 年 04 月 27 日 @ 15:01
多亏了博主“ local 那里应该填的是 ECS 内网的 IP 地址,而不是公网的 IP 地址”这句话,确实如此!!谢谢了!!
小明
2017 年 05 月 07 日 @ 10:18
大佬, 是什么地址呢
小明
2017 年 05 月 07 日 @ 10:18
HE 的 Server IPv4 Address
小张
2017 年 05 月 09 日 @ 12:38
我在centos系统下 没找到/etc/network/interfaces这个文件,而且不能创建这个文件,楼主这里说的是ubuntu的还是centos的呀
Lazy Cat
2017 年 05 月 09 日 @ 12:41
@小张:文章里写的很清楚了
本文以 Ubuntu 为例
小张
2017 年 05 月 09 日 @ 12:43
@Lazy Cat:您配置过centos吗,或者文档链接,参考的东西,搞了一上午,还没搞好。。
Lazy Cat
2017 年 05 月 09 日 @ 12:48
@小张:并没有在 CentOS 上弄过
John
2017 年 05 月 10 日 @ 16:07
Shadowsocksmanyusers运行Python servers.py时,第一次成功了,后来重启Vps开放关闭防火墙都不行,提示 [Errno 98] Address already in use 怎么解决?搜了好多都找不不到
jeanim
2017 年 05 月 12 日 @ 11:30
谢谢楼主分享,阿里云的已经解决
不过为了实现所有节点都支持ipv6,我在google的gce的台湾节点上按照以上配置,没有成功呢,不知道是不是有其他需要配置的
Lazy Cat
2017 年 05 月 12 日 @ 11:35
@jeanim:GCE 我还没有用过。。。
你把安全组之类的端口全部打开试一下,也许是需要用的端口被防火墙禁止了。
顺便我记得 GCE 的 LoadBalancer 是自带 IPv6 支持的?你可以看一下。
jeanim
2017 年 05 月 12 日 @ 11:42
@Lazy Cat:
回复好及时啊
恩,我再研究研究哈,谢谢谢谢~~
Thinking Song
2017 年 06 月 03 日 @ 18:38
@Huang Chengda:
同样的问题,不知道可解决了?
ddms
2017 年 06 月 09 日 @ 15:59
@小张:centos中我配成功了,http://www.yaocheap.com/phptec/817.html分享是一种美德-_-
ddms
2017 年 06 月 09 日 @ 16:01
@Thinking Song:这个问题我也遇到了,解决方法是ping6 ipv6.baidu.com,审核的时候自己写个定时脚本ping就好了
Thinking Song
2017 年 06 月 10 日 @ 07:50
@ddms:
我也是这么解决的。不知道为啥需要这样啊。但是审核还是没有过,貌似是因为打开太慢了
camper
2017 年 09 月 18 日 @ 16:49
@Huang Chengda:
我也是这种情况,最后怎么解决了
Simon
2017 年 09 月 23 日 @ 18:30
请问楼主和各位 指的是啥?
Simon
2017 年 09 月 23 日 @ 18:31
请问楼主和各位 “HE 的 Server IPv4 Address” 指的是啥
7717
2017 年 12 月 07 日 @ 23:36
@fedor:
我也是这样的,第一项一直是绿色,第二项有时候红色,有时候绿色
张三
2018 年 02 月 08 日 @ 17:25
楼主 您知道如何配置安全组,让ipv6 可以在外网ping通吗,不放行全部协议
Arthur
2018 年 02 月 28 日 @ 23:59
大神,请问下面这种情况应该怎么解决呢?
/bin/sh: 1: cannot open 阿里云内网网址: No such file
Failed to bring up he-ipv6.
Lazy Cat
2018 年 04 月 03 日 @ 00:43
@张三: 放行 ICMPv6 就好啦
913
2018 年 11 月 28 日 @ 13:05
@ddms:定时器脚本怎么写。不太懂
林小帅
2019 年 11 月 28 日 @ 12:31
想请问下,现在阿里云的服务器还支持这样的自建隧道方式嘛?
我自己配置的,在服务器上是可以使用的,并且也可以 ping 通 ipv6。
但是有个问题,就是我用 ipv6-test.com 来进行验证的时候 ipv6 web server 这一项无法通过。
然后尝试了修改成你文章里的配置信息,也是无法通过 ipv6 web server