2017-04-26 ios ipv6那些事(已完美解决)
2017-04-26 ios ipv6那些事(已完美解决)
工作单位性质属于外包公司,每天都有几十的app要提交上传至应用市场,于2017年3月份接到ios工程师反馈
Guideline 2.1 - Performance
We still discovered one or more bugs in your app when reviewed on iPad and iPhone running iOS 10.3.1 on Wi-Fi connected to an IPv6 network.
Specifically, the splash screen count down timer did not stop at zero and the app was unresponsive.
Please see attached screenshots for details.
从字面描述上看,苹果审核委员会的意思是应用使用WIFI网络在ios 10.3.1 系统下运行手机和ipad,均会出现网络异常。看过描述,结合以前的关于苹果ipv6的风声,第一反应是完了,支持ipv6的日子终于到来了。于是展开了一系列与苹果周旋的故事!
1.根据苹果审核委员会回复的邮件,自己在mac电脑搭建了ipv6 dns64/nat64 环境,用手机连接上共享WiFi运行了应用程序,发现没问题,遂立马重新提交应用程序,并回复审核委员会:"我们根据你提供的测试连接,搭建了环境,可以运行,给过吧!~~"~~~~,然后开开心心的等审核结果去了!
第二天下午忽然想起来了这个事,然后去看审核结果,果不其然,和你们想象的一样,结果很完美,审核失败,原因亦然!
2.网上查资料,百度搜索“ios ipv6”, 简短的两个词,出来了一大堆结果,粗略的看了下别人的帖子之后,发现除了要根据苹果提供的测试方法之外,应用的server服务器也要支持ipv6,因为在苹果的回复邮件里说的很清楚,而且苹果要的是ipv6only.在此时,我基本上确定了一点,是因为服务器不支持ipv6线路,所以被无辜的拒绝!因为我们公司的服务器是放在全国最牛逼的机房,牛逼到比你所知道所有国内vps云机房的价格都要贵很多的物理机房,无论从带宽,托管,电费等等各个方面,价格这块都是number one的。并且已经确认了没有ipv6线路提供。当时还在想,这么牛逼的机房,竟然没有ipv6,后来多方渠道打听后了解到,中国在运营的服务商都没有ipv6线路(除了教育网),至于为什么,我只能说,“我很幸福“!
言归正传,在服务器实在是不提供ipv6的情况下,怎么才能搭建ipv6only 的环境呢?这里不得不说,还是阿里云强大啊,虽然阿里云不提供ipv6,但是阿里云的论坛早已这个问题的讨论炸开了锅,甚至连阿里云的工程师都炸出来了,工程师给了一套解决方法,提供了一个解决思路,tunnelbroker,相信看到这篇文章的朋友对这个玩意不陌生吧,对,没错!就是它一步一步把我带到沟里去的。待我慢慢道来!
根据教程,服务器开启了ipv6的支持,然后4a解析tunnelbroker的ipv6地址,然后使用tunnelbroker开启了服务器对ipv6支持的隧道,实现的过程我就不多说了,也不专业,说也说不明白,交给运维来弄吧,网上也有详细的步骤,基本上属于体力活。然后找了一个网站测试app 的 server 地址支不支持ipv6 (http://ipv6-test.com 菜单选择Website,然后把网址填进去点击Validate),
根据验证的结果来看,很美丽,当时感觉太easy了,苹果就这点水平吗,轻轻松松就被我们解决了。然后就高高兴兴的测试了一下app ,没有任何问题,perfect! 重新提交了应用市场,等待苹果审核结果!
又是第二天下午,忽然想起来了这个事,去看审核结果,perfect!审核失败!
3.接下来网上各种找资料,ipv6已经测试可以了,并且ipv6only环境下也运行了app 没有任何问题(怎么测试ipv6only 环境下运行app? 去下载 6box ,这是一个代理软件,至于怎么用,只要能找到在哪里能下载,那肯定就知道怎么用!就这么神奇!)然后开始了无休无止的去苹果审核委员会申诉(吵架),大致内容大家可以理解为:我这可以啊,你咋不行呢,你审核用的网络这么差吗,充话费送的2M宽带吗?用不用我发布一个众筹帮你升级成10M的电信宽带,你看我用冠希牌摄像机给你录的视频,有网络问题吗?有网络问题吗?有网络问题吗?~~~ 然而申诉依然没有任何结果,苹果始终是那句话:boy,你去修修你的网络吧,我打不开你的app!
事件至此,已经半个月过去了,认准了是ipv6的问题之后,既然中国的机房不支持,那国外的vps 支持吗?答案是:只要是你听说过的国外vps(这里经过多方测试考证,使用的是linode),基本上都支持,我强调基本上啊,大家别给我较真!既然国外的vps支持,那怎么使用在自己的项目上呢?有两种方法,第一,把项目的server放在国外,what?为了苹果审核,牺牲国内用户的访问速度?疯了吧!第二,做转发。(别问我怎么知道的这两种方法,我蛮厉害的,拍过簧片(php),干过运维,干过ios,干过android,干过nodejs)转发?什么意思?
转发:原项目的server不用动,因为苹果的审核环境是ipv6only ,所以4A server 的域名解析到国外的vps,当检测到客户端访问的网络请求是ipv6的地址时,dns服务器根据解析的规则自动分配到解析的服务器,所以苹果ipv6审核的情况下,会自动把请求发送到国外的vps上,但是应用的实际生产服务器是在国内。那么问题来了,怎样才能把国外vps 的请求和国内的server 联系在一起呢?这里用到了nginx 的转发,也就是上面说的方法二的转发。nginx具体转发实现的过程我就不多说了,也不专业,说也说不明白,交给运维来弄吧,网上也有详细的步骤,基本上属于体力活。不过这里要注意一点 ,国外的nginx转发vps服务器一定要监听ipv6的端口。配置后,经过各种方法测试,均没有问题,重复了提交的步骤!(到这了这个阶段,说实话,不是特别开心!)
提交后,一直在祈祷,一晚上没睡好觉,时刻盯着国外vps 的ipv6访问日志,时刻盯着审核通知。
当接到审核结果的那一刻!泪奔了,崩溃了,彻底没脾气了。审核失败!
尼玛,为什么没有任何ipv6的访问日志就给我审核失败?到底是为什么?
接下来的几天一直重复提交,自认为没有任何问题,各种姿势都已被解锁,为什么苹果还是不爽,苹果爸爸,你好强壮(尼玛卖逼)哦!
接连几天的提交,没有任何好的消息,没有任何ipv6的访问日志,拒绝,拒绝,拒绝,拒绝,我开始怀疑人生!
昨天下午,针对苹果ipv6被拒的问题,公司的领导层开了一次别开生面的声讨会,并严肃通告了此问题的严重性,命令我一定在最短时间内解决,否则,领导不开心!
我在内心告诉自己,一定要坚持,一定要突破,一定要冲出自己的视线,一定要打破常规,一定要清醒!
会议结束后,我好好整理了这一个月来所做的一些尝试,认真回想到底哪里疏忽,再次去对比国外vps的ipv6访问日志,和查询国内生成服务器的转发日志,哎呦我操,就在我检查国内生产服务器的日志的时候,忽然发现一大波ipv4的ip正在访问我这个没上线的应用的server,我去,咋回事!我赶紧抓住一个ip去查询了这个ip是谁,这一查不要紧,显示 "Apple 公司",苹果此时在审核!得到了这个重要线路之后没来及的骂娘(为什么要骂娘?稍等片刻)我赶紧用国内生产服务器 ping 这个ip 地址,发现ping 不同,尼玛,苹果还挺谨慎!那就不管这个了,赶紧去分析日志,发现苹果过来的请求,加载完首页一共用了3分钟,沃日,再次验证了苹果的网络果然很垃圾。根据苹果的网络情况,赶紧做了一个国外线路的解析(国外的ip请求的时候自动发送到过外的服务器),然后在国外的vps添加了一个nginx转发,为什么要这样做?虽然网络是全球联通的,但是毕竟苹果到中国要经历的太多,会大大削弱网络的访问质量,苹果的审核团队在美国加州,我们的国外的vps 也在加州,这样访问起来就非常顺畅了,而我们的vps是专业做机房的,他们的带宽等等要比苹果优秀的多,从vps转发请求到国内的生产服务器,会比苹果直接访问快很多。所以就这么干了,一切就绪,等待审核结果!
此时已经晚上10点多,公司的大楼已经是静悄悄,除了自己还没放松下来噗通的心跳,再也没有任何声音,因为一切来的太突然,太诡异!漫长的一个月,仿佛经历了好几年,信誓旦旦说好的ipv6 only的支持,始终没有等到苹果的访问。此时已经没有力气再去骂娘,这一切都结束了,都明白了,也似乎知道了结局!这一切都是骗局,都是苹果的骗局!
凌晨1点23分,收到了审核结果,一切和预料的一样,审核成功!没有了惊喜,感觉很累,但是躺在床上睡不着。
晚安了
各位!