最近有点想给阿里云的轻量服务器加上ipv6,测试完后可以实现,于是写一篇教程记录一下。
首先在服务商处把防火墙进行TCP/UDP端口全开,然后开启服务器的ipv6,vi /etc/sysctl.conf
,找到以下内容,如有注释注意去掉,如果网卡端口不是eth0,需要修改为自己相应的网卡端口,保存修改后,执行sysctl -p
使其生效。
在这里介绍两种办法获取IPv6,网卡绑定是公网IP自然可以成功,经过修改配置后也可以实现NAT网卡获取IPv6。
Hurricane Electric
注册好账号并登录后,点击User Functions下的Create Regular Tunnel,IPv4 Endpoint填写为欲开启ipv6的服务器IP,Available Tunnel Servers里面提供很多节点,可以ping测试看看每个节点的延迟再选择,最后点击Create Tunnel。
点击Account Menu下的Main Page,点击下方Configured Tunnels中Name的可选项,观察IPv6 Tunnel Endpoints的配置是否和添加时的一致。然后点击Example Configurations,Select Your OS中选择Linux-route2,拷贝生成的内容。Windows和MAC的配置也有,实现思路相似,现在只介绍Linux的详细配置。
创建一个脚本文件,如/root/he-ipv6.sh
,添加如下内容:
赋予文件执行权限chmod +x /root/he-ipv6.sh
,执行bash /root/he-ipv6.sh
,测试是否得到ipv6地址ping ipv6-test.com
,如果返回ipv6地址,代表成功。如果不想使用了,只需要删除相应的隧道,如ip tunnel del he-ipv6
。
不过6in4隧道协议是无状态的,如果没有流量从中通过的时候,不会建立和保持着一个去往Hurricane Electric服务器的IPv4连接,对于网卡端口为内网ip,即使用了NAT技术时,此刻NAT无法感知到这个连接仍然存在,超时后就把这个转换条目从NAT表里扔掉,当Hurricane Electric的请求主动发过来的时候就找不到转发路径了。整体效果就是,当服务器一段时间内不对外请求ipv6相关数据包时,外网不能访问服务器绑定的ipv6地址。目前的解决方法是采用间隔发送icmp数据包来保持活跃。
由于重启会导致配置重置,所以可以通过下面的方法进行开机自启。首先创建文件/etc/systemd/system/he-ipv6.service
,然后拷贝如下内容:
然后保存,再执行systemctl enable he-ipv6.service
即可。如果需要在Web服务器,如nginx下使用ipv6进行访问,只需要在相应的server下加入[::]:port
即可,port为需要访问的端口。如果需要使用域名访问,再在域名解析记录上添加AAAA记录,地址为本机ipv6地址。
ISATAP
如果网卡绑定了公网ip,还可以这样添加ipv6:
在Windows上的isatapd的做法如下:
如果网卡绑定的是内网IP,如阿里云的经典网络就是网卡eth0绑定内网IP,跟HE隧道的做法相似,只详细讲Linux情况下的使用方法,其他平台可以根据HE相应的配置进行更改:
如果是单内网IP直接映射单公网IP,可以直接成功获取ipv6,如果是Openwrt路由器等单公网IP多设备,可以使用iptables来进行转发,未测试过,仅提供方法。