让你的光猫变成你的轻量NAS,打开telnet并教你将natmap打洞部署到光猫!

in 日常 with 0 comment

你可能觉得我很搞笑,别人都是光猫改桥接,路由器装OpenWRT然后才是natmap
但是这样光猫的高配置(这可不是开玩笑,256M NAND + 512M DDR2 A9双核)

/# cat /proc/meminfo

  • MemTotal 470944 kB (459.9MB)
  • MemFree 368528 kB (359.8MB)
  • MemAvailable 417992 kB (408.1MB)

/# df

Filesystem1K-blocksUsedAvailableUse%Mounted on
/dev/mtdblock24096424367210%/tagparam/usr/cpkTmp
/dev/mtdblock44096840325621%/important_bak
/dev/mtdblock581921404678817%/userconfig
/dev/mtdblock1230720144641625647%/usr/local/osgi
/dev/mtdblock111017601075291008
(88.8MB)
11%/usr/data
/dev/mtdblock132048812123640%/usr/local/upgrade_module
/dev/mtdblock1464042421666%/GN25L95_datas
/dev/mtdblock84096396370010%/wlan

多么阔绰的内存空间?
多么人性化的大块存储空间?(89M 使用空间)与其桥接当摆设,不用白不用,何不用起来呢
(不要和软路由去比,有本事和市面上一百元以上的硬路由来比啊,存储空间16M就已经相比较来很大了)

考虑:开telnet

这一步很关键,但是网上大多有教程。
不过我的光猫就不需要我折腾,直接暴露telnet设置

打开telnet

对于ZTE耍流氓新光猫,可以使用https://github.com/douniwan5788/zte_modem_tools这个脚本,一次成功
(没错,我就是telnet登进去后大肆修改,然后固件就废了,换了新光猫)
(注意,需要先重置光猫使其恢复默认超管密码)

考虑:拉取natmap程序

首先考虑指令集,cat /proc/cpuinfo

~ $ cat /proc/cpuinfo
processor       : 0
model name      : ARMv7 Processor rev 1 (v7l)
BogoMIPS        : 1594.16
Features        : half thumb fastmult edsp tls
CPU implementer : 0x41
CPU architecture: 7
CPU variant     : 0x4
CPU part        : 0xc09
CPU revision    : 1

processor       : 1
model name      : ARMv7 Processor rev 1 (v7l)
BogoMIPS        : 1594.16
Features        : half thumb fastmult edsp tls
CPU implementer : 0x41
CPU architecture: 7
CPU variant     : 0x4
CPU part        : 0xc09
CPU revision    : 1

Hardware        : ZTE ZX279128 (Device Tree)
Revision        : 0000
Serial          : 0000000000000000

双核的Armv7架构处理器,不错哦(常见的光猫都是单核心的)
ARMv7就是32位的ARM处理器,v8几乎不可能出现(aarch64)
那么就是 https://github.com/heiher/natmap/releases/download/20240126/natmap-linux-arm32

如果有curl

~ $ curl --version
curl 7.68.0 (arm-buildroot-linux-gnueabi) libcurl/7.68.0 OpenSSL/1.1.1i zlib/1.2.11
Release-Date: 2020-01-08
Protocols: http https tftp
Features: AsynchDNS HTTPS-proxy IPv6 Largefile libz NTLM NTLM_WB SSL TLS-SRP UnixSockets

太棒啦,有curl事半功倍
直接curl就行了,支持HTTPS

curl https://github.com/heiher/natmap/releases/download/20240126/natmap-linux-arm32 -o natmap
chmod +x natmap
/natmap

没有也不要急

但是 wget 只支持 http,所以务必准备自己的HTTP服务器
(其实tftp服务器也是可以的)
比如我使用nginx,将natmap放在网页根目录,下载

cd /tmp
wget http://192.168.1.10/natmap -O natmap
chmod +x natmap
./natmap

这个很重要,划重点

注意:根目录大多是有CRC校检的或者直接打包进内核的,bin这类文件夹大多放在根目录。所以想要重启后不消失或者不变砖,建议找/usr/data,空间也大

考虑:动态更新

在这么精简的系统内,如何处理 请求更新 呢?
那只有使用 curl 才行。如果没有请使用 wget

这是自动更新脚本的参数列表

argv[0]: Script path
argv[1]: Public address (IPv4/IPv6)
argv[2]: Public port
argv[3]: IP4P
argv[4]: Bind port (private port)
argv[5]: Protocol (TCP/UDP)
argv[6]: Private address (IPv4/IPv6)

所以脚本也很好写:

#!/bin/sh
# 换成自己的动态重定向服务,如我的是redirect.php
curl https://[你的服务地址]?addr=$1:$2
# wget也可以,但是不支https
wget http://[你的服务地址]?addr=$1:$2 -O - >> /dev/null

直接使用 cat > bin/update.sh,输完了 Ctrl+D 即可
(如果系统很好心提供了vi,那就更方便了)

#!/bin/sh
curl https://....?addr=$1:$2 ^D

这样就OK了

开机自启

参考了这篇文章,不仅干掉了java插件系统,大幅度优化之外还提供了自启动管理
但是还是不能照抄,因为我们的java挂载不是镜像,而是完整的磁盘分区

Filesystem1K-blocksUsedAvailableUse%Mounted on
/dev/mtdblock1230720144641625647%/usr/local/osgi

那就更好办了,直接find出手找到java文件

~ $ cd /usr/local/osgi/
/usr/local/osgi $ find ./ -name java
  ./local/j2re/bin/java

替换成以下内容就行了

#!/bin/sh

if [ ! -f /tmp/started ] && [ -f /usr/local/osgi/start.sh ]; then

        /usr/local/osgi/start.sh

        if [ -f /mnt/usb1_1/autorun.sh ]; then
           /mnt/usb1_1/autorun.sh
        fi

        touch /tmp/started
else
        echo "device already started"
fi
exit 1

由于natmap很小,我直接建文件夹bin,放在了bin文件夹里
然后start.sh这么写

bin/natmap -4 -k 8 -s stunserver.stunprotocol.org -h baidu.com -t 192.168.1.2 -p 80 -d -e bin/update.sh

OK!全文完。
接下来我会继续讲述我是如何一步一步使光猫变成NAS的,敬请期待!

Responses