使阿里云服务器支持ipv6

App Store的游戏上线需要支持ipv6。我这里使用的是阿里云学生服务器,便宜好用,怎么折腾都不心疼,服务器OS为Ubuntu16.04LTS。顺带一提阿里云有直接支持IPV6并分配了公网IP的服务器,不过价格嘛……

ipv4地址:47.95.210.48

ipv6地址:2001:470:35:81a::2

1.开启ipv6

阿里云的ipv6默认关闭,首先打开linux服务器的ipv6功能

vim /etc/sysctl.conf

修改以下三行

1
2
3
net.ipv6.conf.all.disable_ipv6 = 0
net.ipv6.conf.default.disable_ipv6 = 0
net.ipv6.conf.lo.disable_ipv6 = 0

重启网络,这时执行ifconfig就能看到网卡的ipv6的IP了。

测试的话,可以自己ping6一下自己,或者ping6一下 ipv6.baidu.com 或者 he.net(或者用桌面版浏览器访问)。如果自己能ping通,v6的域名ping6不通,多半是dns有问题,试着直接ping地址。

我们可以写一下DNS

vim /etc/resolv.conf

阿里:

1
2
nameserver 2400:3200::1
nameserver 2400:3200:baba::1

谷歌:

1
2
nameserver 2001:4860:4860::8888
nameserver 2001:4860:4860::8844

github上好用的ipv6 host表
https://github.com/lennylxx/ipv6-hosts

2.搭建隧道

咱普通人还是搞不到IPV6的固定公网IP的(蹭学校的IP除外)。但为了能从外网访问,我们需要一个IPV6的公网IP,这里我选择了he.net旗下的 tunnelbroker,架设免费的6in4隧道。

下面是wiki上关于he的介绍

Hurricane Electric是一家位于美国的全球互联网服务提供商。该公司提供IPv4和IPv6接入以及位于美国圣荷西(公司总部地址)的数据中心服务。该公司运营了世界上以对等数目计算的最大IPv6网络。其中大多数是原生IPv6对等会话。该公司也提供免费IPv6隧穿服务,为IPv4用户或无法接入IPv6网络的用户通过隧道提供IPv6服务。该公司提供了针对IPv6教育及培训的证书。

tunnel

这里我ping了一下,选择了新加坡的节点,可以看到he.net的server v4 与 v6 地址,我们试着从服务器ping一下

可以看到连接稳定

然后我们新建网卡用于我们的6in4隧道

/etc/network/interfaces

加入以下内容,注册网卡,<>内的内容根据你的实际情况变化

1
2
3
4
5
6
7
8
9
10
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
down ip -6 route flush dev he-ipv6

重启网络后,可以亲切的看到我们的新网卡:

3.搭建nginx服务器

我从nginx官网下载的当时为最新版的nginx1.19.3的tar.gz文件。然后tar -zxvf unzip一下。之后就是配置参数和编译了。我们需要和ipv6和https模块。

1
2
 ./configure --prefix=/usr/local/nginx --with-http_ssl_module --with-ipv6
make && make install

它提示我新版nginx自带v6模块,不用再--with-ipv6了。

然后我们配置一下nginx.conf, 监听一下ipv6的80端口。

1
vim /usr/local/nginx/conf/nginx.conf

修改如下

1
2
3
4
5
6
server {
listen 80;
listen [::]:80 ipv6only=on;
server_name localhost;

......

最后记得去阿里云安全组(类似端口防火墙)里面,把80和443(之后要用)出入站规则打开

4.从任意支持v6的设备使用ipv6地址访问

我把自己博客的域名拆过来,临时绑个AAAA,绑上了he.net分配给我server的ipv6地址

测试 http://ipv6-test.com/validate.php

直接通过http://[IPV6 HOST]的方式访问或使用域名访问

一个小问题:

后来我发现时不时的从外网ping主机v6ping不通,ping he的server却能ping通,即:

1
2
3
4
from a remote host

ping 2001:470:35:81a::1 ok
ping 2001:470:35:81a::2 timeover

即he.net与我的阿里服务器的连接断了,我尝试从阿里云的服务器ping

1
2
3
4
from my server

ping6 2001:470:35:81a::1 ok
ping6 2001:470:35:81a::2 ok 当然ok,这是在ping自己

而且一旦尝试从服务器去ping he的v6 server后,从外网又能ping通了。说明 2001:470:35:81a::1 到我的服务器的线路又通了。我猜测一段时间我服务器没有往he发包的话,隧道会处于不活跃状态而关闭,于是暴力解之:隔1分钟ping一下

1
2
3
crontab -e

*/1 * * * * ping6 2001:470:35:81a::1 -c 1 >>/ping.log

现在连接就稳定多了。(不过服务器毕竟在海外,还是偶尔会抽风ORZ)

使阿里云服务器支持ipv6

https://matrix4f.com/Network/aliyun-ipv6/

Author

oxine

Posted on

2020-11-06

Updated on

2021-06-11

Licensed under

Comments

昵称处填入QQ号,自动同步QQ头像与ID