aniwoh的blog

手头上正好有一个闲鱼上入手的移动的电视盒子,已经刷好了armbian系统,所以用不了卡刷,只能线刷。

盒子的详细详细如下图,SOC是晶晨的S905l3a

本来打算通过短接法来刷机,但是在网上找了一圈没有找到短接点,在主板上也没有找到明显的短接点,所以用晶晨刷机神器来刷,在网上可以买到,大概一块钱,插到HDMI接口上就可以刷机,非常方便

我使用的是2.2版本的usb_burning_tool

固件包可以在恩山等论坛上获取,记得是线刷包,不要下成卡刷包,下载好后文件-导入烧录包,保持默认配置后点击开始

接下来是重点,将刷机神器和电源线插好,开机按钮处于关机状态,接下来按下开机按钮,然后用公对公usb线将靠近网口的usb接口与电脑的usb接口连接,等待进度条跑完就行了。电脑上的usb接口最好选择主板上的usb2接口,不要使用机箱前面板上的接口。

不插电源线的话,软件也可以识别到设备,这可能会误导你认为不用插电源线就可以刷机了,但是会在3%左右报Bl2_Boot阶段错误

如果出现其他错误的话,自行搜索

前言

由于国内的网络状况,连接tailscale官方的服务器不稳定,延迟很高,所以像zerotier一样,自建Moon服务器是比较好的。

但是Tailscale 的控制服务器是不开源的,而且对免费用户有诸多限制。好在目前有一款开源的实现叫 Headscale。

服务器端搭建

你需要:一台有公网IP的服务器

访问Github页面下载安装文件,我的服务器系统为Ubuntu20.04LTS,所以选择deb格式的安装包,当然,直接下载二进制文件自己配置也是一样的。

wget --output-document=headscale.deb \
  https://github.com/juanfont/headscale/releases/download/v0.22.3/headscale_0.22.3_linux_amd64.deb

安装headscale

sudo dpkg --install headscale.deb

出现这个页面就安装成功了

设置开机自启动

sudo systemctl enable headscale

编辑配置文件

vim /etc/headscale/config.yaml

按照你自己的需求更改,如果你不懂每一项的意思,先修改以下的选项

server_url: http://1.1.1.1:8080
listen_addr: 0.0.0.0:8080
grpc_listen_addr: 0.0.0.0:50443
ip_prefixes:
  - 192.168.100.0/24  

server_url改为你自己的服务器IP地址或者域名。

ip_prefixes在示例中的配置文件是分配ipv6的,但是我不需要,就删除了,同时,将100网段改为10或192网段,这是tailscale获取到的IP地址,在国内,100网段被运营商用来分配大内网IP了,所以不改的话会出现很多问题

headscale 启动!!!

sudo systemctl start headscale

查看运行状态

systemctl status headscale

运行成功

一些可能的问题:

推荐使用一台全新的服务器来安装headsscale,90%以上的问题是由于你的服务器本身安装的软件有冲突

headscale官方团队是不建议使用反向代理软件,如nginx、caddy等,但是实际上使用起来并不会有太大的问题,你可以参考这篇文章

补充

这里补充一下使用nginx反向代理时的配置方法:

nginx的配置文件

map $http_upgrade $connection_upgrade {
    default      keep-alive;
    'websocket'  upgrade;
    ''           close;
}

server {
    listen 80;
      listen [::]:80;
      listen 443      ssl http2;
      listen [::]:443 ssl http2;

    server_name example.com;

    ssl_certificate <PATH_TO_CERT>;
    ssl_certificate_key <PATH_CERT_KEY>;
    ssl_protocols TLSv1.2 TLSv1.3;

    location / {
        proxy_pass http://127.0.0.1:8080;
        proxy_http_version 1.1;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection $connection_upgrade;
        proxy_set_header Host $server_name;
        proxy_redirect http:// https://;
        proxy_buffering off;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto $http_x_forwarded_proto;
        add_header Strict-Transport-Security "max-age=15552000; includeSubDomains" always;
    }
}

headscale配置文件

server_url: https://example.com
listen_addr: 0.0.0.0:8080
grpc_listen_addr: 0.0.0.0:50443
ip_prefixes:
  - 192.168.100.0/24  

将上述的example.com换成你自己的域名就可以了,假设你的nginx listen的是8081端口,headscale配置文件中的server_url也要加上8081端口,不用ssl的话,server_url也要用http代替https,并且,下面所有的login_server应该与你的server_url一样。

客户端搭建

openwrt

由于openwrt涉及一个本地路由的问题,所以我们先配置openwrt。

安装软件

opkg update
opkg install libustream-openssl ca-bundle kmod-tun
opkg install tailscale

注册tailscale

tailscale up --login-server=https://example.com:8080 --accept-routes=true --accept-dns=false

这里的login-server后也可换成你的ip

初始化成功后会出现URL,复制nodekey后的密钥

登录安装headscale的服务器

headscale users create admin  # 创建一个用户
headscale --user admin nodes register --key nodekey:<YOUR_MACHINE_KEY> # <YOUR_MACHINE_KEY>换成你的密钥

注册成功,查看节点

headscale nodes list

设置 openwrt的tailscale 开机自启动

/etc/init.d/tailscale enable

接下来我们启用本地路由
先配置ipv4和ipv6的路由转发

echo 'net.ipv4.ip_forward = 1' | tee /etc/sysctl.d/ipforwarding.conf
echo 'net.ipv6.conf.all.forwarding = 1' | tee -a /etc/sysctl.d/ipforwarding.conf
sysctl -p /etc/sysctl.d/ipforwarding.conf
这里需要注意,一旦你对openwrt的接口进行过修改,包括但不限于多拨等操作,你需要重新运行以上代码,不然会出现节点列表显示在线,但是无法连上的情况

客户端修改注册节点的命令,在原来命令的基础上加上参数 –advertise-routes=192.168.1.0/24,告诉 Headscale 服务器 “我这个节点可以转发这些地址的路由”。

tailscale up --login-server=http://<HEADSCALE_PUB_IP>:8080 --accept-routes=true --accept-dns=false --advertise-routes=192.168.1.0/24 --reset

查看openwrt的路由

headscale nodes list
# 找到openwrt对应的id,查看它的路由
headscale routes list -i 1


可以看到enabled为False,改为True

headscale routes enable  -r 1

这样就开启成功了,其他节点启动时需要增加 --accept-routes=true 选项来声明 “我接受外部其他节点发布的路由”。现在你在任何一个 tailscale 客户端所在的节点都可以 ping 通 openwrt 路由器所在内网的机器了。

Windows

接下来我们在windows上安装tailscale

在tailscale官网上下载安装包,安装好后先退出tailscale。

以管理员权限启动终端,输入以下命令,记得改为你自己的服务器地址

New-ItemProperty -Path 'HKLM:\Software\Tailscale IPN' -Name UnattendedMode -PropertyType String -Value always
New-ItemProperty -Path 'HKLM:\Software\Tailscale IPN' -Name LoginURL -PropertyType String -Value https://YOUR-HEADSCALE-URL

然后启动tailscale,点击log in你应该就会被重定向到自己的服务器,但是我运行后并不成功,所以采用另一种方法

仿照Linux,打开终端,输入

tailscale up --login-server <YOUR_HEADSCALE_URL> --accept-routes=true

运行后会出现一条URL,复制nodekey,按照上述同样的方法注册,注册成功后再启动tailscale程序,就登录成功了

安卓

下载并安装安卓端的tailscale程序,打开后点击右上角的三个点,一开始只会有版本号和About,然后再点击空白处,重复上述步骤,直到出现了Change Server选项

点击Change Server,改为自己的服务器地址,点击Save,回到程序主页面,不要用Google登录,点击sign in with other,会打开一个浏览器页面,复制node key,然后在服务器上注册,注册完成后回到程序就可以了

安卓端会自动允许route,不需要而额外操作

ios

没有ios设备,跳过

linux

Linux设备直接使用以下命令安装

curl -fsSL https://tailscale.com/install.sh | sh

默认该脚本会检测相关的 Linux 系统发行版并使用对应的包管理器安装 Tailscale, 安装完成后使用以下命令启动

tailscale up --login-server https://your.domain.com --accept-routes=true --accept-dns=false

启动完成后复制node key注册

常见问题

1、ERR error getting routes error="sql: database is closed"

问题现象:在修改过配置文件后重启服务,会卡在重启页面,查看systemctl status headscale日志时出现下图的错误

解决方案:ps -ef|grep headscale找到对应的pid,直接kill就行了,后续建议通过先stop,再restart来重启服务就不会卡住了

2、卸载headscale

sudo apt-get purge headscale
sudo apt-get autoremove
sudo apt-get clean

补充

headscale常用命令

headscale namespace list # 查看所有的namespace
headscale namespace create default # 创建namespace
headscale namespace destroy default # 删除namespace
headscale namespace rename default  myspace # 重命名namespace

headscale node list # 列出所有的节点
headscale node ls -t # 列出所有的节点,同时显示出tag信息
headscale -n default node ls # 只查看namespace为default下的节点
headscale node delete -i<ID> # 根据id删除指定的节点,这里面的id是node list查询出来的id
headscale node tag -i=2 -t=tag:test # 给id为2的node设置tag为tag:test

headscale routes list -i=9    # 列出节点9的所有路由信息
headscale routes enable -i=9 -r=192.168.10.0/24  #将节点9的路由中信息为192.168.10.0/24的设置为true

# preauthkeys主要是方便客户端快速接入,创建了preauthkeys后客户端直接使用该key就可以直接加入namespace
headscale -n default preauthkeys list # 查看名称为default的namespace中已经生成的preauthkeys 
headscale preauthkeys create -e 24h -n default # 给名称为default的namespace创建preauthkeys 

# apikeys是为了客户端和headscale做http鉴权用的,http请求的时候需要设置头部authorization
# 值为固定的字符串"Bearer "加apikeys创建的key
headscale.exe apikeys create # 创建apikeys,在创建的时候需要记录下完整的值,后续查询出来的都是prefix
                             # 值类似于zs3NTt7G0w.pDWtOtaVx_mN9SzoM24Y02y6tfDzz5uysRHVxwJc1o4
headscale.exe apikeys list -o=json #查询headscale的apikeys,并将结果输出成json格式

玩客云配置

CPU采用的是晶晨的s805,单核主频1.5GHz,这个CPU的最大优点就是功耗低,发热量小。

内存采用的是海力士,512MB*2共1G DDR3内存。闪存是三星的8g。

网口芯片采用的是螃蟹的RTL6211F千兆网口。

准备工具

一台玩客云

一台电脑以及刷机软件

双公头的usb线

刷机步骤

1. 准备工具和刷机包

我这里采用的是恩山大佬提供的armbian刷机包,刷机包的获取https://www.right.com.cn/forum/thread-8279667-1-1.html

刷机工具就是Amlogic USB Burning Tool,但是我使用v3.1时会卡在97%左右报错,参考https://github.com/hzyitc/armbian-onecloud/issues/76 后问题解决。

2. 连接玩客云

拆机后取出主板,先确定你的主板版本,不同版本的主板短接的位置不同

玩客云先不要通电,先启动刷机软件,并使用公对公USB线连接电脑的USB2.0和玩客云靠近hdmi的USB口,这里尽量连接主板上的2.0接口,3.0接口可能会出现兼容性问题

导入刷机包,然后短接主板上的触点,保持短接状态下给玩客云通电,然后,工具上会出现连接成功,此时点击开始,当出现进度条时立刻松开短接口,等待烧录完成就可以了

因为这个是直刷包,所以烧录完后重启就可以了,具体查看刷机包的恩山页面

所需工具

京东云无线宝一代(RE-SP-01B)、minpro编程器、SOP16转DIP8夹具

步骤

拆机

撕开底部的胶圈,胶圈底下有三颗螺丝,拧开后,使用翘片打开底壳

安装驱动

minpro驱动下载

下载的文件夹里包含了驱动程序和软件,先安装驱动,一般情况下电脑是无法直接安装minpro驱动的,我们需要关闭数字签名,以win10系统为例,在设置里找到高级启动,重启后选择疑难解答-高级选项-启动设置-重启,在出现的页面中按F7选择禁用驱动程序强制签名,重启后就可以安装驱动了

将minpro插入电脑的usb2.0接口,其它接口可能会出现识别失败的问题,台式机最好插在主板上的usb2.0接口,此时打开设备管理器,会有一个新出现的未安装驱动的设备,右键-更新驱动程序-浏览我的电脑查找驱动程序,选择刚才下载的文件夹中的Driver文件夹,安装驱动,安装好后就可以识别到minpro了,文件夹中的exe文件为刷机要用的软件

连接设备

将无线宝断电,然后将夹具和minpro以及无线宝按照以下的方式连接

夹好后以管理员身份运行刷机的软件,并将minpro插入usb2.0接口,点击检测识别芯片型号,显示W25Q256即为连接成功

开始刷机

我们需要先准备好京东云一代的breed文件,在https://breed.hackpascal.net/上下载,名称为 breed-mt7621-jd-cloud-1.bin,在软件上先选择读出,等待进度条走完后点击保存,这个就是你的京东云一代的固件,该固件中包含了你的京东云设备的sn、mac以及所有的配置,不建议分享。保存好,以后如果想要刷回去需要用到。
点击擦除,等待进度条走完后,打开下载的breed文件,点击写入,写入的速度通常比较快,然后点校验,完成后就可以断开minpro了。

配置breed

用卡针按住reset按钮后通电,指示灯闪烁后就可以了,用网线连接京东云的lan口,在电脑上输入ip:192.168.1.1,就可以进入breed页面。

为防止刷机后breed被覆盖,选择环境变量设置,启用环境变量,位置为breed内部,点击设置后重启。重启后选择breed保护设置,开启,点击保存后重启就可以了

刷入openwrt

在固件更新页面,常规固件,选择需要刷入的openwrt固件,点击上传,就可以刷入openwrt了,如果后续需要重新刷入固件,进入breed页面刷入,进入方法参考上一步。

刷回官方

如果想要刷回官方系统,参考刷入breed的方法,只是打开的是你之前备份的固件。

Frp介绍

frp 是一个开源、简洁易用、高性能的内网穿透和反向代理软件,支持 tcp, udp, http, https等协议。frp 项目官网是 https://github.com/fatedier/frp

frp工作原理

服务端运行,监听一个主端口,等待客户端的连接,即后文配置文件中的bind_port;客户端连接到服务端的bind_port,同时告诉服务端要监听的端口和转发类型;
服务端fork新的进程监听客户端指定的端口;
外网用户连接到客户端指定的端口,服务端通过和客户端的连接将数据转发到客户端;
客户端进程再将数据转发到本地服务,从而实现内网对外暴露服务的能力。

frp配置教程

使用frp你需要有一台有公网IP的服务器,配置教程分为两部分,我们先进行服务端的配置

服务端配置

先去GitHub上下载符合你设备版本的包,也可以直接通过git来下载,下载后上传到服务器端,可以使用xftp等软件,解压缩后进入frp的文件夹


在服务端我们需要配置的是frps.ini

将该文件修改为

[common]
# frp监听的端口,默认是7000,可以改成其他的
bind_port = 7000
token = 52010  
# 这个token可以看成连接时的密码,改为你需要的,在后面配置客户端时需要

# frp管理后台端口,请按自己需求更改
dashboard_port = 7500
# frp管理后台用户名和密码,请改成自己的
dashboard_user = admin
dashboard_pwd = admin
enable_prometheus = true

# frp日志配置
log_file = /var/log/frps.log
log_level = info
log_max_days = 3

这样服务器端就基本配置好了,但是为了更好的使用frp,推荐配置一下systemctl来控制frp的启动,可以跳转到文章最后的优化中先进行配置

配置好systemctl后启动frp并打开自启动,然后访问“服务器IP:后台管理端口”,并输入用户名密码


出现上述页面,则代表服务器端配置好了

客户端配置

与服务器端一样,下载好文件后,打开frpc.ini
将文件内容修改为

# 客户端配置
[common]
server_addr = 服务器ip
server_port = 7000 # 与frps.ini的bind_port一致
token = 52010  # 与frps.ini的token一致

#下面的每一段都代表一个服务,想要多少个,自己配置就行
[tcp]
type = tcp #这里填你的服务类型,一般用tcp就行,可以换成udp、http等
local_ip = 127.0.0.1
local_port = 1234  #这里填写客户端上需要代理到服务器的端口
remote_port = 4321 #这里填写映射到服务器端的端口

上述配置代表将客户端上的1234端口映射到服务器端的4321端口

注意:上述[tcp]中的名称必须全局唯一,同时要注意开放相关端口

配置好systemctl后,启动客户端,这样就配置好了

常见问题

如果配置好后还是无法访问,可以按照以下步骤检查:

1.先检查你的防火墙是否开放相关端口,检查好后记得重启一下服务器

2.查看你的frp状态,可以通过sudo systemctl status frps来查看

3.查看相关文件权限,授予frp文件可执行权力

优化

使用域名来访问

通过IP加端口的方式来访问内网的服务有点不方便,绑定域名会方便一点

由于我使用的宝塔面板,会方便一点,添加一个新的站点

在新的站点中添加一个反向代理,目标url中填写你的IP+端口

这样添加好后就可以通过test.aniwoh.top来访问1.1.1.1:1234

这里需要注意的是,如果你的服务器在国内,需要备案后才可以访问,同时如果你不想特地为了反向代理下载一个宝塔,可以直接通过改nginx配置文件来实现

转载)">使用systemctl来控制frp的启动(转载

服务器端:

sudo vi /lib/systemd/system/frps.service

[Unit]
Description=fraps service
After=network.target syslog.target
Wants=network.target

[Service]
Type=simple
#启动服务的命令(此处写你的frps的实际安装目录)
ExecStart=/opt/soft/frp/frp_0.33.0_linux_amd64/frps -c /opt/soft/frp/frp_0.33.0_linux_amd64/frps.ini 

[Install]
WantedBy=multi-user.target

客户端:

sudo vi /lib/systemd/system/frpc.service

[Unit]
Description=frpc service
After=network.target syslog.target
Wants=network.target

[Service]
Type=simple
#启动服务的命令(此处写你的frpc的实际安装目录)
ExecStart=/opt/soft/frp/frp_0.33.0_linux_amd64/frpc -c /opt/soft/frp/frp_0.33.0_linux_amd64/frpc.ini

[Install]
WantedBy=multi-user.target

服务端frps的启动与停止

# 启动frps 
sudo systemctl start frps 

# 打开自启动
sudo systemctl enable frps

# 重启应用
sudo systemctl restart frps

# 停止应用
sudo systemctl stop frps

# 查看应用的日志
sudo systemctl status frps

# 停止开机自启动
systemctl disable frps

客户端frpc的启动与停止

# 启动frps 
sudo systemctl start frpc 

# 打开自启动
sudo systemctl enable frpc

# 重启应用
sudo systemctl restart frpc

# 停止应用
sudo systemctl stop frpc

# 查看应用的日志
sudo systemctl status frpc

# 停止开机自启动
systemctl disable frpc