最近元宇宙好像挺火,Facebook的老大扎克伯格提出了这个概念,看了下宣传视频,其实就是最初始的黑客帝国、头号玩家。曾经我也有过相关的幻想,比如坐在家里就可以在线办公,进入到一个虚拟空间中,一切肢体动作都能准确传达给别人,而且不需要头戴太重的设备,可以一直待在里面很久也不会感到不舒服。如果能够实现的话,那么将会很大程度上解决很多人的住房需求,扩展到其他行业的话,或许整个社会的生活方式都会产生巨变,我相信这一天会到来的,只是要看实现的成本什么时候能够降到足够的低。先扯了一些题外话,之前没怎么体验过VR设备,而目前的元宇宙概念就是建立在VR设备上的,让人不得不怀疑,Facebook是不是就是想要多卖Oculus了。VR设备,可以看做是移动设备亦或是物联网设备,对于从事移动安全的我来说,这是一个目前或者未来一定会研究到的领域,因此,我能说抱着学习研究的心态而买了Oculus Quest2么?就像在学生时代买iPad一样,我是为了学习!?
买,只能说拼多多真香,两千多即可,有几种选项,送游戏、帮激活等等。之前大概了解了激活需要外网,我想作为一个程序员,要是连这个都搞不定,我还搞什么小站,也顺便再复习一下翻墙的技术。所以就买了个送游戏的,毕竟我懒得去网上找各种各样的游戏,有店家送倒也省事。后面的实践证明,激活没有之前我想象的那么简单,虽然我一直具备科学上网的能力。
Oculus到货之后,先研究了下说明书,弄明白了各种配件的使用方式,这个就花了一小时吧。唉,每天下班只有一点点时间能搞这个,整个搞定前前后后搞了差不多两周。开机,先是一些初始操作教程,然后进入连接wifi的界面,选择了家里的路由器的wifi,能连接上但是有一个提示,网络受限,下面的继续按钮点不了。好了,这是一个坎,这个界面应该会卡住很多人很久。
作为一个买家,我先去问了客服,客服给我发了一个激活教程:OCULUS QUEST2激活教程。这个教程还算比较详细,我基本上也是按照这个教程进行操作的,但是其中有一点不一样,我没有Windows机器,只有一台Mac笔记本,这个很蛋疼。
首先,想到的是用Windows虚拟机,之前我的Mac上就安装了VMware Fusion,而且也安装过Windows10虚拟机,所以就在Windows10虚拟机中进行操作,安装87VR助手,运行该软件,进入设备激活页面,开始设置,尝试开启本地wifi,失败!一开始以为是Windows10里面没有无线网卡的问题,正好我以前有一个为了破解路由器专门买的什么87无线网卡,具体型号忘了。连接到Windows10虚拟机后,尝试开启本地wifi,依然失败!其中尝试过各种网络配置修改,都失败,无法建立本地wifi。好吧,此路不通!也就是卖家官方建议不通,而且也问了客服有没有Mac上激活的方法,客服说听说过有人会搞,但是不敢问……
代理配置尝试,Oculus失败,技术可参考
然后,我开始思考,如何利用之前具备的翻墙能力:代理配置。按照这个文档的配置之后,就能在本地监听localhost的8588端口,这个端口会映射到我在Amazon的东京EC2实例上的squid代理的8588端口,平常我只会在Chrome上用SwitchyOmega插件来科学上网。然而这次有所不同,需要Oculus设备也能够访问外网,很自然的想法就是,既然我的Mac和Oculus设备在同一个路由器的局域网下面,那么是可以通过设置Oculus上的wifi代理来指向Mac上的8588端口代理服务的。但是,想要让同一个局域网下的非Mac设备也能访问8588端口,那么就要让这个8588端口不仅监听localhost,而是要监听0.0.0.0。
以前的代理配置方案,是通过ssh隧道来进行端口转发的,但是相关资料极度缺乏,只记录了一行有效的转发命令。这次为了找到如何监听0.0.0.0,可谓是进行了大量的调研,可参考的资料如下:用autossh工具进行端口转发、ssh、ssh端口转发:远程和本地,其中介绍了ssh隧道的各个参数含义,而且最终在最后一篇文档中找到了方法,原始的端口转发命令只需要改动一点点,转发命令如下:autossh -M 5200 -N -f -L "*:8588:localhost:8588" Amazon
,只多了个*:,即可监听0.0.0.0,废了我好久时间。这样,同一个局域网中都可以把wifi代理设置为我的Mac的ip地址上的8588端口即可,经过测试,我自己的手机连上这个wifi是可以用浏览器访问谷歌啥的,而且Oculus在连接wifi时设置了这个wifi代理之后,也能够顺利解决之前提示的网络受限的问题,可以继续进行后续操作了。到这里,尽管废了一番功夫,不过感觉自己能搞定还是蛮不错的,然而,接下来遇到的问题直接把这套代理方案否决了!明天再接着写这个文档……
第二天了,继续写。之前说Oculus通过设置wifi代理,能够成功通过wifi选择界面。但是后面又引导了几步之后,进入了一个界面,固件更新!0%,等待,1分钟、3分钟、10分钟过去了,依然0%,半小时过去了,依然0%,然后我就知道了,这样不行!网上搜了下,也有很多人卡到这儿,据说是因为固件更新是走的Udp协议,我晕。一开始我想现在用的squid代理是个http代理,查了下也不支持udp代理,然后就不知道为啥脑子发热去尝试之前撘过的shadowsocks去了,Shadowsocks (简体中文)、shadowsocks-libev,搞完之后还是只能有一个shadowsocks的http/s代理,并不能代理udp。后来,脑子清醒了,想到了Oculus通过设置wifi代理的方式本身是不可能代理udp流量的,wifi代理里面写的很清楚,只能代理http/s代理,而且有些软件的http/s还可能不用这个wifi代理。到这里,就彻底否决了这个代理方案。
那么要怎么办呢,搜索吧,前辈总是有的,找到一篇很关键的参考文章:Mac系统激活Oculus Quest2,全网唯一,无需windows。整体方案是用的vpn,然后把vpn连接通过wifi分享出来为热点,这样就有了一个能访问外网的热点。其实也查到过别的方案,比如刷固件的方式:Oculus Quest2 激活时更新卡 0% 不动的解决方案,因为Oculus中的操作系统就是个Android系统,完全可以用adb刷机,但是经过仔细评估,刷机的方案存在较大的风险与不确定性,而且未来的系统更新都很麻烦,可能都要找刷机包,所以还是选择了vpn的方案。
VPN尝试,Oculus成功
依然,按照上面那个vpn方案的文章进行尝试。因为我Mac上的Chrome浏览器是一直能科学上网的,所以Oculus账号注册、打开开发者模式啥的都能搞定,只是网速比较慢,搞的时间稍微长了一点。
然后就是跟着教程去找vpn了,找支持L2TP的vpn。Cactusvpn试了,不行,提示我来自Amazon isp,不能试用。后面查资料:VPN Free Trial 2021,看起来Expressvpn比较靠谱,但是它是需要先付钱,然后再申请退钱,能保证无理由退款,参考:如何取消ExpressVPN订阅并获得全额退款(2021年测评)、如何取消订阅ExpressVPN并获得退款 – 经测试和验证有效。好麻烦!想了想,既然我有Amazon的EC2实例,何不自己搭一个VPN,很有道理,然后我就去搜索了:ubuntu搭建l2tp vpn,有一些vpn搭建的教程,先装什么库,再装什么,我跟着一个csdn上面的教程走了一遍,然而报错了,也查不出是什么原因,这个教程的链接我就不放了。继续搜索,终于,发现了一个超级靠谱的,通过搜索:ec2搭建vpn,得到的结果:IPsec VPN 服务器一键安装脚本。还是github靠谱,专业。
根据这个github上面的介绍,我先尝试了看能否把这个vpn自动集成到我的Amazon的Ec2上去,发现不行,可以修改用户数据,但是却不知道如何让修改后的用户数据生效,这块目前就先不自动加到Ec2上去了,等下一次迁移Ec2的时候要记着先搞这个:使用 CloudFormation 在 Amazon EC2 上部署(2022-6-7更新:教程没了;另外发现一个问题可能跟CloudFormation有关,这个我是21年12月份尝试的,从22年1月份开始每个月都会有差不多1人民币的账单费用,好像是由于跨区域数据传输导致的,查了查貌似CloudFormation可能有跨区域数据传输的功能,我先把之前写入的用户数据清了看看这个月还有没有跨区域数据传输的费用,也到迁移的时候了,新搞个EC2了要)(2023-9-22更新:每个月1人民币的账单费用估计不是它导致的,因为即使没用CloudFormation,现在每个月差不多要1美元的跨区域数据传输费用,找过AWS客服,说是正常数据跨区域传输的费用,其实我感觉就是变相收费了。。。)。还是使用的IPsec VPN 服务器一键安装脚本,主要参考其中的“安装说明-选项 2”,参考该教程基本很简单,可一键搭建Vpn。
需要注意的是,该一键脚本要搭建L2TP的vpn,而不能是IKEv2的,因为IKEv2的在Mac上不能共享vpn连接到wifi,终于明白了知乎那篇文章为什么说要找L2TP的vpn,而强调了说IKEv2的不行!搭好L2TP的vpn之后,就是链接了,记得如果是Ec2的话,要把安全组中的网络端口中udp的500和4500给打开(可通过如下链接验证udp端口是否开放:测试udp端口),Mac连接这个vpn的教程不论是之前那个知乎文章还是github上面都有。跟着教程走完之后,终于就有了一个可以访问外网的wifi热点,udp当然也走了该流量。这个最大的问题解决了,那么后面就没有坑了么?不不不,明天再写,太困了……
昨天写到搭建好了共享vpn的wifi热点,用手机或者Oculus都可以直接连接上去,也能够访问外网。在Oculus中,依然会先停在固件更新页面,不过等了一会儿,最多几分钟吧,从0%变到1%了,这时候我就知道,基本把路打通了。然而这个下载速度极慢,中间有时候还会自动断开,又变回0%,这差点让我吐血。在等待的过程中,我无意中看了会儿Facebook,然后再看固件的下载进度,貌似变快了?经过访问各种页面尝试,发现的确能够有助于固件的下载速度,后来我就打开了一个Facebook的视频页面,这个页面能自动顺序播放视频,一直有网络请求:Watch | Facebook。这样Oculus中的固件更新速度就还可以,一共有两个固件更新,没太久就都更新完了。更新完就真正进入到了Oculus的VR空间中了,真的还可以,挺牛的。
后续操作
接着就是回到了第一篇客服给我发的教程中去了,第6步,安装游戏。这个我还是利用了下Windows10虚拟机,把Oculus设备连接到Windows10虚拟机中,安装了87vr助手这个游戏大厅。然后就可以在Oculus设备里面用87vr助手来安装其他应用或者游戏了,就像一个应用商店一样,包含一些很火的游戏,比如光剑。
之前也说了,Oculus设备里的操作系统就是个Android,所以常用的adb命令都可以用,数据传输adb push/pull,安装软件adb install -g等等,-g参数表示自动赋予软件运行时需要的所有权限,还是挺实用的,详细看这个资料:adb install -r ,-d 等的解释。对了,有些游戏可能有obb文件夹,这个之前没怎么接触过,据说是把包名文件夹复制到/sdcard/Android/obb文件夹下面即可。
总结
稍微总结一下,这篇文章主要记录了Oculus设备的激活过程中遇到的坑以及解决方法,主要针对像我这种原料的情况:一台Mac笔记本,能够有线连接到路由器,一个Amazon上在国外的EC2实例(我的在东京)(或者其他海外VPS实例都行)。
就这样吧。