本帖最后由 tm5880891 于 2021-8-28 23:19 编辑
0 Y! @! R* {5 M9 u1 u" V9 P% Q% `$ ~' V
光猫是中国移动PT939G的型号,全千兆网口,MTK的处理器,512M ddr,5G+2.4G双频,双USB口。 由于现行宽带都是子网IP,没有公网地址,有时候上班想连回家里取点资料非常不便,要么用teamviewer开无人值守,7*24小时开机待命,无奈teamviewer这玩意三天两头提示检测到商用要断开连接,非常恼火。 进入telnet之后,便想着将自家光猫使用frp透传到个人的云服务器上。拆开光猫看了眼芯片,是MTK套片MT7525,属于mips架构。上github找到frp最新版,下载了mips架构,用tftp上传上去,运行了一下,确实跑起来了,但是一关闭telnet终端,程序就结束了。 搞定后台运行 仔细检索了一下telnet里的命令行,busybox是阉割过的,不支持nohup之类的命令。 试图上传一个screen上去做会话隔离,找了openwrt,又找了screen的源码,各种编译环境搭建之后,编译完放上去,竟然提示各种终端不支持,为了移植screen废了不少事,移植完发现还是用不了,telnet和ssh的终端思路不一样,不是用的xtearm,后来又尝试了xtmux,也是用不了,同样依赖xtearm之类的组件,最终放弃,寻找其他路径。 又查了查资料,尝试了一下disown命令,发现也是不支持,光猫上没有disown命令。 最终结论:光猫里的busybox是阉割过的,没有nohup。不支持screen,我移植一个进去启动提示缺文件。remote_ctl确实可以作为入口,但是那个原本的rcS脚本写的有问题,这个程序会执行,但会随着脚本执行完而结束。可以删掉。 通过三晚的资料查询,找到了一个trap指令,使用trap "" HUP 指令完成了后台运行。 光猫frpc完美工作,java虚拟机正常运行,为了提升性能我还在脚本里杀掉了两个没啥用的进程,一个是bandwidth,一个是wangspeed_info。这俩进程从名字看应该是测网速的,占用资源还挺高,关掉后也不影响上网拨号。周末拆开加上散热片,完美! 搞定开机自启 在研究后台运行的过程中,有了一些自启思路,就是通过/etc/init.d/里加入自启脚本。无奈光猫中的该目录是只读的,只有/usr/osgi挂载点可写,要想写入只能改固件。改固件首先得备份固件,剩下的就是怎么解压、打包、刷新了。 dd if=/dev/mtd6 of=/tmp/mnt/usb1_1/PT939G/6.bin 使用Firmware-mod-kit检测,使用的lzma算法压缩。 Firmware-mod-kit里的squashfs版本太旧,无法解压出来,从github上找到最新的squashfs4.4安装gcc自行编译,输入命令 unsquashfs -s ../../yaffs2utils/img/mtd6.bin sudo unsquashfs -d /home/xyuu/yaffs2utils/img/rootfs -f /home/xyuu/yaffs2utils/img/mtdblock6.bin sudo mksquashfs /home/xyuu/yaffs2utils/img/rootfs/ /home/xyuu/yaffs2utils/img/mtd6.bin -comp lzma避归风险保守落地 虽然固件修改完生成了,我也有ttl线刷工具和编程器,我也深知光猫中有备份系统,即使其中一个固件损坏也不会变砖。但是决定步子不要迈的太大,毕竟光猫这种东西,坏了家里就断网了,而我仅仅只是为了自启一个程序罢了。 于是我决定暂时先不刷固件,从原本的rcS脚本入手,我先备份原始文件/usr/osgi/remote_ctl/remote_ctl_client,然后写一个remote_ctl_client同名的sh脚本,在脚本中用echo >输出一个文件日志,如果重启后我能看到这个日志,则证明这个脚本会在启动时自动运行。重启后事实证明了这一点推测是对的。我又从运行光猫中原有的remote_ctl_client程序后看到日志输出连接服务器失败,这个程序对我是没用的。 于是我这个remote_ctl_client可以作为自启的入口,后来事实证明了这一点,我成功实现了frpc自启的执行。 为了自启后杀掉不必要的进程,杀进程脚本: ps aux |grep wanspeed_info |grep -v grep |awk '{print $2}' |xargs kill -9但提示没有xargs这个命令,于是又琢磨了一个不使用xargs杀进程的方法。 kill `ps -aux | grep wanspeed_info | grep -v grep | awk '{print $1}'`使用wake on lan远程开机 通过对光猫的研究,我知道了MTK方案是使用的BOA实现的cgi,要实现wake on lan可以通过在cgi中执行shell脚本来做到。又回到上述问题,BOA目录在/boaroot下,同样是一个只读目录,要改就得刷固件,而我不想冒这个险。 思索之后,我忽然想到frp是开源的,我何不在frpc上加入wakeon lan的实现,然后实现远程唤醒呢? 三下五除二撸了十来行代码,配上3389内网透传,实现了。 召唤神龙 实现功能: #!/bin/sh 3 O) |/ a* |7 A- }
sleep 120 kill `ps -aux | grep bandwidth | grep -v grep | awk '{print $1}'` : D# b5 g+ F3 G: Y& c# }" _( K+ a
while [ 1 ] do /usr/osgi/frp/frpc -c /usr/osgi/frp/frpc.ini done 1. 使用shell脚本实现,frpc进程守护,当frpc遇到问题宕机时,shell脚本会自动拉起frpc进程。 2. 使用移动“和家亲”APP可以随时重启光猫,光猫启动时会自动启动frpc脚本,并杀掉两个占用资源高的测网速进程。 3. 平时我的电脑通着电源,插着网线,但未开机。当我需要用她时,我可以访问通过frp内网透传出来的光猫上的frp client的管理页面,输入用户名密码后,进入wake on lan页面,单击“wake on lan”。电脑开机启动,我可以通过家庭视频监控看到我的电脑硬盘灯亮起,一分钟后,我可以使用手机远程桌面连上我的电脑。 不用开机棒,不用企业宽带,作为垃圾佬的我,使用最低成本极其完美的实现了召唤神龙,这感觉,简直不要太酷!!
9 t1 S% Y5 T( T/ e" c- x. B0 C G& f |