随身WiFi棒子
这些4G随身WiFi棒子大多是卖内置esim卡的流量赚钱,所以都卖的很便宜(大概10元,早期5元),但性能却不差,有的还自带卡槽可以插自己的卡,有骁龙210,410,还有中兴微三种,本文主要以刷了Linux后的骁龙410的随身WiFi棒子UFI003(UFI001C)展开,如果为了上网,而不是为了折腾着玩,请优先选择旧手机开热点而不是这种WiFi棒子
备份
常在河边走哪有不湿鞋,做一个完整的备份以便不时之需
视频教程:BV1sG4y1E7oG
顺便说一下,基带存在fsg modemst1 modemst2这三个分区里,所以其实备份了这三个分区相当于备份了基带,备份好这三个分区,再用星海备份基带擦除基带写入基带这一波操作,可能会全网通,也可能没信号
至于移动4g用不了,那是硬件只支持一个冷门的频段,用不了也不奇怪了,大多数应该都能很好的支持电信4G,联通可能要操作一下,我没有联通卡不知道,全网通的设备在cpu那面可以看到有一个1cm*0.5cm的长方形射频芯片,大部分是没有的,大部分都只能用电信卡(联通可能也行)
查看sim卡状态
mmcli -m 0
看Status
就可以知道当前卡的状态和信号强度
如果返回error: couldn't find modem
,可以把你全分区备份里的modem分区用7zip解压了放到/lib/firmware/大概可以解决4g用不了的问题
切换esim
切换需要至少几十秒的时间,不要着急,连上了自然有网,可以用上面的那条命令检查卡是否识别到
Debian
echo 0 > /sys/class/leds/sim\:sel/brightness
echo 1 > /sys/class/leds/sim\:sel2/brightness
systemctl restart rmtfs
systemctl restart ModemManager
切回内置将0和1换一下位置
Openwrt
echo 0 > /sys/class/leds/sim\:sel/brightness
echo 255 > /sys/class/leds/sim\:sel2/brightness
/etc/init.d/rmtfs restart
/etc/init.d/modemmanager restart
切回内置将0和255换一下位置
查看emmc(emcp)的寿命
cat /sys/class/mmc_host/mmc0/mmc0\:0001/life_time
返回0x00的话就是看不到,00这个位置的数字就是已用的寿命百分比
debian建新用户
毕竟 root敢死队 是一种很危险的行为,建议日常还是使用sudo而不是直接登录root用户
# 默认有个叫user的普通用户,把它删掉空出1000的uid和gid
userdel user
# 添加用户me 可以改成你喜欢的名字
adduser me
# 把用户me添加到sudu组
usermod -aG sudo me
# 登录测试一下 输入刚刚建的用户名和密码尝试登录吧
login
# 使用sudu切换到root试一下 确保sudu正常工作
sudo su
# 禁用root用户直接登录ssh
sudo sed -i 's/PermitRootLogin yes/# PermitRootLogin yes/g' /etc/ssh/sshd_config
安装zsh 促进体验
sudo apt update
sudo apt install git zsh
sh -c "$(curl -fsSL https://raw.githubusercontent.com/ohmyzsh/ohmyzsh/master/tools/install.sh)"
sed -i 's/ZSH_THEME="robbyrussell"/ZSH_THEME="ys"/g' .zshrc
echo 'export PATH=/usr/local/sbin:/usr/sbin:/sbin:$PATH' >> .zshrc
zsh
切换usb的otg模式
在切换为host模式时,插入小米的qc3.0充电头可能带来巨大发热(原因未知)
# 切换成usb主机模式(otg模式)
echo host > /sys/kernel/debug/usb/ci_hdrc.0/role
# 切换为默认的从机模式(接电脑的usb网络共享和adb)
echo gadget > /sys/kernel/debug/usb/ci_hdrc.0/role
开机自动切换,将下面的内容加到/etc/rc.local
的exit 0
上面
# usb auto otg
sleep 3
grep 0 /sys/kernel/debug/usb/ci_hdrc.0/device | grep speed
if [ $? -eq 0 ]
then
echo host > /sys/kernel/debug/usb/ci_hdrc.0/role
fi
开机等3秒检查是否连接到电脑,没有连接就切换成主机模式可以用公对公接usb设备
Openwrt开机自动联网,解决WiFi限速
本质上Openwrt开机是不会自动联网的,因为启动网络的时候moden还没启动,因此添加启动项来解决这个问题
# modem auto start time sync
sleep 20
/etc/init.d/network restart
sleep 10
date -s "`mmcli -m 0 --time|grep -E "Time " | awk -F " " '{print $5,$NF}'|awk -F "+" '{print $1,$3}'|awk -F "T" '{print $1,$2}'| awk '{gsub(/^\s+|\s+$/, "");print}'`"
注意了,如果重启网络服务,usb网络共享的mac地址是会变的,所以我们需要给他固定一个值
打开网络,接口,顶部的设备,找到usb0,配置,把它显示的mac地址抄一份填进去保存(注意是半角英文冒号)
修改ap设置,带宽20mhz,信道6,底部开启wmn,wifi可以稳定9mbps
另外有个玄学操作,有概率提升到19mbps:
在高级设置中,无线信号覆盖密度改为正常(默认是禁用)
启动项都删掉换成这个
# modem auto start time sync
sleep 20
/etc/init.d/network restart
uci set wireless.default_radio0.wmm=1
wifi up
sleep 10
date -s "`mmcli -m 0 --time|grep -E "Time " | awk -F " " '{print $5,$NF}'|awk -F "+" '{print $1,$3}'|awk -F "T" '{print $1,$2}'| awk '{gsub(/^\s+|\s+$/, "");print}'`"
uci set wireless.default_radio0.wmm=0
最后我选择手动将Debian配置成一个路由器,折腾了一天,完美的实现了op的所有功能,可以继续往下看
顺带提一下,可以通过开启ipv4转发(下面Ap配置时开了),并且安装v2◯◯◯a让开出来的热点实现透明◯◯,安装看官方文档,换iptable的那步不要做
Debian的Ap配置
adb shell上去nmtui
添加网桥br0
网桥里添加以太网,名称设备usb0
网桥里添加wi-fi,模式选成接入点,这就是ap的信息,名称设备wlan0
信道选择2.4G,旁边填写6或8
安全性选第二个wpa2,不要用wpa3,会一直提示密码错误
回到网桥配置中,ipv4配置改为手动,并添加ip地址,填入网关的地址,默认是192.168.68.1,下面会告诉你怎么改,也可以设置成你想要的网段,那个叫网关地址的必须空着
ipv6配置成忽略(不然下面的ipv6配置不会生效)
移到最下面,确定,返回,退出
如果需要修改网关和分配的ip范围,可以修改/etc/dnsmasq.conf
最后网关和分配ip范围,比如这样,改成192.168.250.1
domain=lan
local=/lan/
listen-address=192.168.250.1
dhcp-range=192.168.250.100,192.168.250.254,12h
上面加的两行可以使其可以解析局域网的主机名
另外还需要修改/etc/hosts
,在第一行加上192.168.250.1 你的主机名
保证解析的可以被其他设备访问,主机名在/etc/hostname
也是可以修改的
继续配置Ap,启用试试看,如果失败了,可以adb shell上去修改,以下命令请在adb shell下一行行运行(因为网会断)
echo "net.ipv4.ip_forward = 1" >> /etc/sysctl.conf
echo "net.ipv6.conf.all.forwarding=1" >> /etc/sysctl.conf
echo "net.ipv6.conf.all.proxy_ndp=1" >> /etc/sysctl.conf
echo "net.ipv6.conf.all.accept_ra=2" >> /etc/sysctl.conf
sysctl -p
nmcli connection up br0
systemctl enable dnsmasq.service
systemctl start dnsmasq.service
nmcli connection show
nmcli connection up usb0
nmcli connection up wlan0
systemctl enable dnsmasq.service
systemctl start dnsmasq.service
这样就配置好了ap,试一下能不能搜到ap,能的话那就完成了
如果重启后获取不到ip,可以多运行几次dnsmasq.service
那两行,后面就没有问题了
Debian在没连上WiFi的时候自动开Ap
首先按照上面配置Ap
编辑/root/autoap.sh
,写入下面的内容
#!/bin/sh
nmcli connection down wlan0
sleep 30
ip="`ifconfig | grep wlan0 -A 1 | grep inet | awk '{print $2}'`"
if [ ! -z "$ip" ]; then
echo $ip
else
nmcli connection up wlan0
fi
然后将sh /root/autoap.sh &
加到/etc/rc.local
的exit 0
上面就完成了
开机时会自动停用ap30秒去连接已保存wifi,如果没连上就会打开ap便于配置新的wifi连接
moden的ipv6给Ap共享
首先按照上面配置Ap,特别是ipv6
那几行一定要配置,不然有ip没网
安装依赖,可能会问你监听接口,回答br0
apt install ndppd radvd wide-dhcpv6-server
创建文件/etc/NetworkManager/dispatcher.d/dhcpv6
贴进去
#!/usr/bin/env bash
interface=$1
event=$2
if [ "$interface" == "wwan0" ]; then
prefix=$(ip -6 addr show dev wwan0| sed -e's/^.*inet6 \([^ ]*\)\/.*$/\1/;t;d'|head -n 1|cut -f'1-4' -d':')
# just assume prefix length /64 here
echo "get prefix $prefix::/64"|systemd-cat -t ipv6_conf
cp /etc/ndppd.conf.me /etc/ndppd.conf
sed -i "s/REPLACE_PREFIX_HERE/$prefix:2333::\/80/g" /etc/ndppd.conf
cp /etc/radvd.conf.me /etc/radvd.conf
sed -i "s/REPLACE_PREFIX_HERE/$prefix:2333::\/64/g" /etc/radvd.conf
cp /etc/wide-dhcpv6/dhcp6s.conf.me /etc/wide-dhcpv6/dhcp6s.conf
sed -i "s/PREFIX_MIN/$prefix:2333::2000/g" /etc/wide-dhcpv6/dhcp6s.conf
sed -i "s/PREFIX_MAX/$prefix:2333::3000/g" /etc/wide-dhcpv6/dhcp6s.conf
systemctl restart radvd
systemctl restart ndppd
systemctl stop wide-dhcpv6-server
systemctl start wide-dhcpv6-server
echo 1 > /proc/sys/net/ipv6/conf/all/forwarding
sleep 10
systemctl restart dnsmasq
sleep 10
echo "setting route" |systemd-cat -t ipv6_conf
ip -6 addr add $prefix:2333::1/80 dev br0
ip -6 route add $prefix::/65 dev br0
ip -6 route add $prefix:8000::/65 dev br0
ip -6 route |systemd-cat -t ipv6_conf
fi
然后chmod +x /etc/NetworkManager/dispatcher.d/dhcpv6
还需要创建几个配置文件模板/etc/ndppd.conf.me
proxy wwan0 {
router yes
timeout 500
ttl 30000
rule REPLACE_PREFIX_HERE {
auto
}
}
/etc/radvd.conf.me
interface br0 {
AdvSendAdvert on;
AdvOtherConfigFlag on;
AdvManagedFlag on;
MinRtrAdvInterval 3;
MaxRtrAdvInterval 10;
prefix REPLACE_PREFIX_HERE {
AdvOnLink on;
AdvAutonomous on;
AdvRouterAddr off;
};
};
/etc/wide-dhcpv6/dhcp6s.conf.me
interface br0 {
address-pool pool1 3600;
};
pool pool1 {
range PREFIX_MIN to PREFIX_MAX ;
};
降低发热 调节cpu频率
众所周知,骁龙的基带是真的烫,甚至可以比cpu都烫(比如iPhone12),只连WiFi不插卡的就没有这个问题
默认主频是四核998.4mhz,平时会一直跑在800mhz,但负载只有0.3,导致在插卡长时间工作的时候巨烫,因此将cpu频率减半,降到400mhz,温度就暖暖的一点也不烫了(四核400mhz的温度应该低于双核800mhz)
查看当前支持的频率,不同的内核不一样
cat /sys/devices/system/cpu/cpufreq/policy0/scaling_available_frequencies
将以下内容添加到开机启动项,限制最高频率为400mhz
echo 400000 > /sys/devices/system/cpu/cpufreq/policy0/scaling_max_freq
另外还有一种直白明了的办法,安装sudo apt-get install cpufrequtils
修改/etc/init.d/cpufrequtils
来实现设置频率最高频率为600mhz
MAX_SPEED="600"
MIN_SPEED="0"
修改Debian连上ssh时的提示
编辑/etc/update-motd.d/10-uname
即可修改
比如最后加一个modem信号显示
mmcli -m 0|grep signal|awk '{print $2" "$3" "$4"\n"}'
查看效果run-parts /etc/update-motd.d
Debian启动时从modem同步时间
因为Debian下moden的时间其实是不对的,他显示他是+8时区其实是utc时间,modem启动也巨慢,所以要这样操作一下
sleep 25
date -s "`mmcli -m 0 --time|grep -E "Time " | awk -F " " '{print $5,$NF}'|awk -F "+" '{print $1,$3}'|awk -F "T" '{print $1,$2}'| awk '{gsub(/^\s+|\s+$/, "");print}'`" && date -s "`date -d +8hour '+%Y-%m-%d %H:%M:%S'`"
systemctl start dnsmasq.service
加入/etc/rc.local
的exit 0
上面(最好写在你写的内容的最上面)
led灯控制
在/sys/class/leds/
有三个led,分别是blue,green,red,其他的是控制卡槽等设备的入口,可以修改led的触发器实现不同的功能
查看所有触发器cat /sys/class/leds/green\:internet/trigger
框起来那个就是当前的
比如把绿色灯改为usb网络指示灯echo usb-gadget >/sys/class/leds/green\:internet/trigger
需要永久修改需加入/etc/rc.local
的exit 0
上面
Debian远程桌面
# 远程桌面服务
sudo apt install xrdp
# lxde桌面最小安装
sudo apt install lxde-core
# 思源黑体中文字体 显示效果比文泉驿优秀
sudo apt install fonts-noto-cjk
# 可选 chromium浏览器 arm64没有chrome
sudo apt-get install chromium
# 可选 chromium浏览器界面的中文语言包 不装不影响中文网页浏览
sudo apt-get install chromium
然后用微软的远程桌面客户端连上去就可以用了
Debian Btrfs修改压缩率
使用更高的压缩率可以减少空间占用,但占用更多的cpu
本着emmc慢成狗cpu十分富裕,可以考虑采用更高的压缩率,默认3,可以设置1到15,不建议大于8
修改/etc/fstab
将其中zstd
改为zstd:6
即可将压缩等级改为6
为了避免修改错误,导致无法开机,可以先在下面这条命令上做修改,并运行进行挂载测试(比配置中的多了一个remount的选项)
sudo mount -o remount,defaults,noatime,compress=zstd:6,commit=120 /dev/mmcblk0p14 /
可以使用这条命令对根分区进行压缩,系统占用大约700m左右,压缩从3调成6可以把占用从2g降到1.4g
sudo btrfs filesystem defragment -r -v -czstd /
固件
咩咩按照上面配置好并备份了一份rootfs在这 咩咩云
可以先一键刷入其他必要的东西,再按键进9008刷这个rootfs会比较快(不用9008直接解压改成rootfs.img和一键放一起也能刷)
至于密码是什么嘛,自己adb shell
上去用passwd root
改吧
配置好了自动切换usb,自动切换连wifi还是开热点,以及透明◯◯服务在2017端口
贴一个咩咩的Debian的/etc/rc.local
#!/bin/sh
sleep 5
grep 0 /sys/kernel/debug/usb/ci_hdrc.0/device | grep speed
if [ $? -eq 0 ]
then
echo host > /sys/kernel/debug/usb/ci_hdrc.0/role
echo usb-host >/sys/class/leds/green\:internet/trigger
#echo timer > /sys/class/leds/green\:internet/trigger
#echo 1 > /sys/class/leds/green\:internet/delay_on
#echo 1999> /sys/class/leds/green\:internet/delay_off
else
echo usb-gadget >/sys/class/leds/green\:internet/trigger
fi
sleep 25
date -s "`mmcli -m 0 --time|grep -E "Time " | awk -F " " '{print $5,$NF}'|awk -F "+" '{print $1,$3}'|awk -F "T" '{print $1,$2}'| awk '{gsub(/^\s+|\s+$/, "");print}'`" && date -s "`date -d +8hour '+%Y-%m-%d %H:%M:%S'`"
bash /etc/NetworkManager/dispatcher.d/dhcpv6 wwan0 &
echo 600000 > /sys/devices/system/cpu/cpufreq/policy0/scaling_max_freq
exit 0
如果咩咩的文章对你有帮助,您可以 请我喝牛奶
装了apt install ndppd radvd wide-dhcpv6-server以后,dhcp就不分配ipv4地址了
通过adb进去配置好你的dhcp吧,ipv6的操作是建立在已经按照上面配置好ipv4的前提下
大佬请问刷入denian后没有网络,用命令无法查看sim卡状态,如何把全分区备份里的modem分区用解压放到/lib/firmware/呢?
用我传的firmware
大佬,在安卓下插卡测试有网后,备份了modem,同时已经替换了debian里的文件,可是还是没网,这个怎么弄,debian里有没有切卡的指令可以试一试
mmcli -m 0看输出
请问在debian下nmtui手动开启热点后可以搜到信号,但是重启后就没有了,只能插电脑连棒子,这个怎么搞
用root来设置nmtui,这样开机启动的时候才能解密开热点的密码
是用root账户来设置的nmtui,可以开启热点用流量卡,就是重启后又自动关了,是不是需要加个命令设置开机自启
那你可以严格安装教程走一遍,需要注意的是root运行而不是sudu,而且必须先用命令禁用其他连接的wifi并启用ap,如果用了自动切换的,看一下名字有没有错误
大佬我现在连接ssh已经显示是root用户组,但是执行查看内存寿命的命令又显示没有权限。然后刷的这个包已经自带了网桥,但是命名上不是br0但是ap的配置是一样的,那我要删除现在这个网桥重新建立?但是之前我试过如果删掉网桥就连不上棒子了,插usb也没反应只能重新刷机。抱歉字数有点多,请大佬指点!
建议直接换个包,这样要改太麻烦了
我一样的问题,重启后wlan0没起来,我检查是nmtui新建WiFi的时候WiFi密码没保存成功。解决方法,在/etc/NetworkManaget/systen-connections/你的WiFi配置名.nmconnection文件中,key-mgmt行下加入一行: psk=你的WiFi密码,保存后执行nmcli c reload即可立即生效。可以重启检查一下是否起作用。
直接指定明文密码确实也是一个好办法,不过使用root登录或是su切换成root(只要不是sudu的)都能正常保存WiFi密码
op放移动没信号,电信就有,能解决吗?up主
这玩意基带就用不了移动卡别想了
感谢博主分享的内容,遇到了非常多问题,很多全网到处都找不到解决方案,基本都在这里解决了,非常感谢
你确定真的能用吗?我按照你这配置了直接不分配网关,显示是有网就是网出不来
当然可以,已经这么配置过好几个棒子了,文章里没有一个字是多余的,也不要自作聪明做多余的动作,网桥填的是ip地址不是网关别填错了,不分配ip需要多执行几次dnsmasq那两行(必须网桥先启动dnsmasq才能启动),没分配ip很明显是dnsmasq没启动成功
博主这样配置后测试过插在路由器上,路由器可以获取ipv6?我测试不管是openwrt还是老毛子都不能获得ipv6
出v6需要点时间,电脑试过可以,路由没试过
是的,电脑可以,但路由不行,不知道为啥
op的话v6要另外配个接口(
补充一下nftables的转发规则
```
nft add table ip6 nat
nft flush table ip6 nat
nft add chain ip6 nat postrouting '{ type nat hook postrouting priority 100; }'
nft add rule ip6 nat postrouting ip6 saddr "$prefix::/64" ip6 daddr != "$prefix::/64" counter masquerade
```
我宽带有ipv6,但棒子获取不了(获取的是局域ipv6),但我执行(curl 6.ipw.cn )可以返回外网ipv6,执行ifconfig查看不到外网ipv6,请问大佬有办法解决吗?我不插卡,主要想用ipv6+ddns访问青龙等。
需要在你路由配置分发ipv6
大佬,我在切换和添加启动项的时候,显示failed和sim-missing,op系统,也换过modem文件了,用外置的就是好的,但是esim就不行,但是刷回原来的备份又可以了
这是基带问题
切成esim卡后,断掉wifi使用esim流量,可以使用一下就会自动重启
供电不足,4g是比wifi费电很多的
请教一下,这个前缀只能用脚本截取前64位来算吗?
我看OpenWRT用QMI协议就能获取IPv6的前缀,OpenWRT也是用这种方式计算出来的吗?【参考:https://blog.csdn.net/qq_31539875/article/details/127815923】
有基于PPPoE的Debian路由器是用dhcpcd和wide-dhcpv6-client通过发送路由请求向ISP获取的网络前缀【参考:https://post.smzdm.com/p/awzodmpp/?sort_tab=hot/】,QMI协议的也能这样做吗?我用dhcp6c测试了一下,好像确实不能获取前缀也可能是我的报文没有抓完整,网卡linkdown的时候没法抓包,dhcpcd提示wwan0: unsupported interface family 00 不支持qmi的modem网卡。
你可以试试,我尝试了各种方法似乎只能像目前这样工作
谢谢 学习了 怎么usb口插路由器 获取路由器网络
首先路由装好Android网络共享的驱动,然后插上,将那个接口分配到lan,再将随身wifi上把usb0设置成dhcp或者固定ip就行