初始化失败是一种app常见的初始化错误。
App响应用户请求后,需要把请求转发到对应的业务服务器,因此app初始化时必须首先和业务服务器建立网络连接,完成用户登录,授权认证等基础操作。如果在此过程中同业务服务器建立网络连接时失败,就会遇到初始化失败错误。
首先要确认vps支持tun/tap设备。运行cat /dev/net/tun
如果返回File descriptor in bad state,说明支持tun/tap。否则请发ticket联系客服。
下面要申请一个用于ipv6隧道的ipv6地址池。进入http://tunnelbroker.net/ ,点击左上角面板的Register按钮注册一个帐号。
注册完成后登录,点击左侧的Create Regular Tunnel,在IPv4 Endpoint (Your side):中填入vps的ipv4地址,然后在下面的Available Tunnel Servers里选择一个离你vps机房最近的地点。我是美国西海岸机房的vps,就选择North America ,Los Angeles, CA, US的隧道服务器。点击Create Tunnel创建隧道。
创建完成后进入刚申请的隧道的详情页面,记下以下信息:
Server IPv4 Address: 服务端的ipv4地址,假设为1.2.3.4
Client IPv4 Address: vps的ipv4地址,假设为5.6.7.8
Client IPv6 Address: 获得的ipv6地址,假设为2000:200:a:f00::2/64
点击中间的Example Configurations选项卡可以看见各种系统上建立隧道的配置方法,不过OpenVZ虚拟机都是用不了的。此时需要使用用户层的tb-tun隧道客户端。
装好gcc,下载并编译tb-tun:
wget http://tb-tun.googlecode.com/files/tb-tun_r18.tar.gz
tar xvf tb-tun_r18.tar.gzgcc tb_userspace.c -l pthread -o tb_userspace
顺便把编译出的程序移到$PATH里吧
mv tb_userspace /usr/local/sbin
用tb_userspace创建一个名为tb的虚拟接口并后台运行,第一个地址为服务端地址,第二个地址为vps的本地地址。
setsid tb_userspace tb 5.6.7.8 1.2.3.4 sit
启用虚拟接口:
ifconfig tb up
为虚拟接口分配前面申请到的ipv6地址:
ifconfig tb inet6 add 2000:200:a:f00::2/64
调整虚拟接口的最大传输单元:
ifconfig tb mtu 1480
添加ipv6路由
/sbin/route -A inet6 add ::/0 dev tb
/sbin/ip -6 route add default dev tb
可能还需要删除venet0上的默认ipv6路由,否则ping不通其他ipv6地址。我就是这种情况
ip -6 route del default dev venet0
设置无误的话尝试运行ping6 ipv6.google.com
PING ipv6.google.com(lax02s02-in-x08.1e100.net) 56 data bytes64 bytes from lax02s02-in-x08.1e100.net: icmp_seq=1 ttl=59 time=12.5 ms64 bytes from lax02s02-in-x08.1e100.net: icmp_seq=2 ttl=59 time=22.4 ms64 bytes from lax02s02-in-x08.1e100.net: icmp_seq=3 ttl=59 time=12.4 ms64 bytes from lax02s02-in-x08.1e100.net: icmp_seq=4 ttl=59 time=13.2 ms64 bytes from lax02s02-in-x08.1e100.net: icmp_seq=5 ttl=59 time=12.4 ms64 bytes from lax02s02-in-x08.1e100.net: icmp_seq=6 ttl=59 time=12.4 ms64 bytes from lax02s02-in-x08.1e100.net: icmp_seq=7 ttl=59 time=14.6 ms
^C--- ipv6.google.com ping statistics ---
7 packets transmitted, 7 received, 0% packet loss, time 6006ms
rtt min/avg/max/mdev = 12.441/14.326/22.446/3.396 ms
说明vps本机访问ipv6已经没问题了。然后可以试试从本地ping到vps的ipv6地址。也能ping通说明大功告成了
测试无误就把建立和设置隧道的命令写到/etc/rc.local里去吧
除了tunnel broker,tb_tun也支持isatap连接,不过我没试过,毕竟好用的isatap服务器不好找。
不过tb-tun似乎不是很稳定,有时会丢包或者出现Network is unreachable,不知道是程序的原因还是网络的原因。
类似这种,存成bash脚本,每次开机启动就行
ifconfig sit0 up
ifconfig sit0 inet6 tunnel ::64.62.134.130
ifconfig sit1 up
ifconfig sit1 inet6 add 2001:470:66:16e::2/64
route -A inet6 add ::/0 dev sit1
参考: https://www.xxorg.com/archives/4413
本文以Ubuntu系统的腾讯云VPS为测试机。ECS 里面的系统配置,由于腾讯云的网络不支持IPv6,所以他官方镜像里面相关的设置都是被禁用了的,想要使用 IPv6 就要做一些修改。首先修改 /etc/sysctl.conf ,将其中两条禁用IPv6的设置更改为0:
1、登录 https://www.tunnelbroker.net/register.php 注册,然后在邮件里认证。
2、Create Regular Tunnel
IPv4 Endpoint (Your side):填写你的IPV4。
一般服务器都有ping功能,路由器可能关闭了ICMP,需要开通。否则会报错:
IP is not ICMP pingable. Please make sure ICMP is not blocked. If you are blocking ICMP, please allow 66.220.2.74 through your firewall.
3、隧道服务器,默认选的是 Los Angeles, CA, US
4、点击Create Tunnel
可以看到自己刚才输入的IPV4,及IPV6。
5、点击Example Configurations,选择自己的OS。配置后重启!即可使用。测试如下:
欢迎分享,转载请注明来源:夏雨云
评论列表(0条)