zhangguanzhang's Blog

斐讯N1刷机和旁路由的设置

字数统计: 4.1k阅读时长: 17 min
2020/05/12

由来

之前一直是使用k2popenwrt或者pandora跑 xx 用,前几天看到了个 xx 的订阅地址给写到openwrt上了。结果运行了几天发现 web 上任何配置都无法更改,ssh 上去发现 touch 报错没有容量(而且重装后感觉还是有问题,github 访问也不稳定了),意识到 k2p 容量实在太小了,于是去恩山论坛逛了下准备买个 N1 盒子玩玩旁路由。

N1有8G的rom 2G的ram,cpu 是 armv8 的。询问了一番 pdd 上有卖的,132买的刷机版+刷机线套餐(部分固件说好些白色的稳定,如果店铺能选颜色可以选白色的试试?,刷机线是双公头的USB,后期也可以用来救砖)。到手是安卓电视盒子系统,如果不刷机则是天天链系统。推荐买刷机版本的,省去解锁boot分区啥的(但不是意味着就啥都不用做,毕竟还是要刷openwrt),如果没解锁可以去看 https://zhuanlan.zhihu.com/p/129414399 步骤跟着降级。下面步骤是我个人使用的,有些是需要键盘啥的,你没有键盘则应该思考我步骤的目的是干啥的。我步骤全部不带图,毕竟读者都懂Linux

刷机

  • 网线一根
  • 一个显示屏或者家里电视,一根HDMI线
  • 一个1G以上的USB刻录iso
  • 一个键盘和一个鼠标

我的环境是一个路由器(主路由),我笔记本和 N1 盒子网口都连路由器的 lan,CIDR 是192.168.2.1/24, 我盒子作为旁路由,后续准备用 192.168.2.2 静态 ip

adb

盒子插上电,然后接上网线和笔记本同一个局域网,盒子HDMI线接个显示屏或者电视。接上usb鼠标点两下设置的齿轮,最下面进去点击版本号多点几次开启开发者选项。鼠标随意右击返回,进开发者选项确认adb状态开启,进法律信息里看局域网的ip

笔记本windows如果没adb的话自行下载 adb下载连接 解压到目录,把目录加到环境变量 PATH

准备镜像文件

去恩山找个N1的openwrt镜像 我是使用的这个,下载了后准备一个大于 1G 的usb刻录,使用软件balenaEtcher刻录,下载地址 https://www.balena.io/etcher/ ,下载 Portable 免安装的。刻录后usb插到盒子上

刷机

笔记本git bash或者cmd里执行adb

1
adb connect <盒子局域网ip> 5555

连上之后确认下

1
adb shell ls

有安卓文件则继续走

1
adb shell reboot update

不出意外重启会进emcc系统,等待很久后把鼠标拔了换键盘。开机很久后按回车进入终端,下面是把系统写到emcc里,否则是u盘的系统.

1
2
3
cd /root
# 有些固件不一定是这个脚本名,可能是 install.sh 啥的,没有下面脚本就 ls -l 看看
./inst-to-emmc.sh

跟着交互走,不出意外看到成功就可以 pweroff 关机了,然后拔掉U盘。

后续u盘刷新系统固件后,插上开机,觉得好用想把u盘的系统刷到emcc里的话

1
2
cd /root
./update-to-emmc.sh

旁路由的配置

路由静态ip配置

开机后继续键盘。更改旁路由的网络配置文件

1
2
cp /etc/config/network /etc/config/network.bak
vi /etc/config/network

192.168.1.1 改为预期的配置,没网关的话就也加上预期的主路由的ip

1
2
3
option ipaddr '192.168.2.2'
option netmask '255.255.255.0'
option gateway '192.168.2.1'

重启网络

1
/etc/init.d/network restart

然后浏览器进192.168.2.2,默认密码admin password啥的试试

web配置

time

有些固件断电后 openwrt 的时间不对,可能会遇到旁路由设置好后无法上网,抓包发现 tcp 重传,最后发现旁路由断电后 ntp 没同步,如果断电后打开网页提示连接被重置就进系统-系统 点击同步浏览器时间.。有些固件在这样操作后还是会在访问网页的时候发生连接已重置,看后面的丢包的 iptables 命令处理下后再试试

DHCP

我的固件只有一个 LAN 接口,不确定其他的是不是这样(推荐此处到最后都先看一遍完后再跟着操作)
网络-接口,进入 LAN 修改,下面的 DHCP,开启动了。然后高级设置,动态 DHCP+强制,写上掩码,下面的 DHCP 选项两行

1
2
3,192.168.2.2                    # 配置dhcp的网关,指向旁路由自己
6,192.168.2.2,8.8.4.4,8.8.8.8 # 配置dhcp获取到的dns,如果稳定则旁路由自己的IP,建议只设置旁路由的ip

IPv6设置里前三个全部选禁用
保存应用

DNS

网络-DHCP/DNS-常规设置,有必要的话配置下 DNS 转发,屏蔽一些激活码请求域名啥的,丢弃 RFC1918 上行响应数据这个取消了,我这儿是不然某些上游dns的域名无法访问到
最下面的写 hosts 列表,例如单独的指定公网 ip 下载 jetbrains 家的插件和软件,绕过前面配置的屏蔽

网络-DHCP/DNS-高级设置-DNS 服务器端口写 0,不使用 dnsmasq 的dns功能,因为 dnsmasq 经常在加配置的时候卡死,而且解析不稳定,回到 web 上保存应用。ssh上去netstat -nlptu | grep ':53'看看是不是 dnsmasq 没有监听 53,有些固件 web 上端口写0还是会监听,此时得手动改配置文件echo port=0 >>/etc/dnsmasq.conf 然后 web dnsmasq 那重新保存应用

因为这里关闭了dnsmasq 的 dns 解析,我们打算使用 adguardhome 来做路由器的 dns 服务。我们需要在自己 pc 上下载 adguardhome 的二进制文件上传到路由器的/usr/bin/AdGuardHome/路径下,权限为755,或者去 github 下载 stable 版本的 arm64 的 release,或者下载下面的解压后 scp 或者web-系统-文件传输传上去,(下载网页)[https://github.com/AdguardTeam/AdGuardHome/wiki/Getting-Started]

1
https://static.adguard.com/adguardhome/release/AdGuardHome_linux_arm64.tar.gz
1
2
3
cd /usr/bin/AdGuardHome
cp -a /tmp/upload/AdGuardHome .
chmod 755 AdGuardHome

服务-AdGuard Home-手动设置,下面是我用的配置文件,web登录的密码是root

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
bind_host: 0.0.0.0
bind_port: 3000
users:
- name: root
password: $2y$05$8h.LpbIR7U50.qbV7ynCtOvS9szcqu2lFk6J86Oabnz1J5BtLpVni
http_proxy: ""
language: ""
rlimit_nofile: 0
debug_pprof: false
web_session_ttl: 720
dns:
bind_host: 0.0.0.0
port: 53
statistics_interval: 1
querylog_enabled: false
querylog_interval: 1
querylog_size_memory: 1000
anonymize_client_ip: false
protection_enabled: true
blocking_mode: nxdomain
blocking_ipv4: ""
blocking_ipv6: ""
blocked_response_ttl: 10
parental_block_host: family-block.dns.adguard.com
safebrowsing_block_host: standard-block.dns.adguard.com
ratelimit: 0
ratelimit_whitelist: []
refuse_any: false
upstream_dns:
- https://dns.pub/dns-query
- https://223.5.5.5/dns-query
- https://doh.pub/dns-query
bootstrap_dns:
- 223.5.5.5
- 223.6.6.6
- 8.8.4.4
- 9.9.9.10
- 149.112.112.10
all_servers: true
fastest_addr: false
allowed_clients: []
disallowed_clients: []
blocked_hosts: []
cache_size: 4194304
cache_ttl_min: 0
cache_ttl_max: 0
bogus_nxdomain: []
aaaa_disabled: true
enable_dnssec: false
edns_client_subnet: false
filtering_enabled: true
filters_update_interval: 24
parental_enabled: false
safesearch_enabled: false
safebrowsing_enabled: false
safebrowsing_cache_size: 1048576
safesearch_cache_size: 1048576
parental_cache_size: 1048576
cache_time: 30
rewrites:
- domain: plugins.jetbrains.com
answer: 13.32.53.109
- domain: download.jetbrains.com
answer: 52.30.174.243
- domain: www.jetbrains.com
answer: 127.0.0.1
- domain: jetbrains.com
answer: 0.0.0.0
blocked_services: []
tls:
enabled: false
server_name: ""
force_https: false
port_https: 443
port_dns_over_tls: 853
allow_unencrypted_doh: false
strict_sni_check: false
certificate_chain: ""
private_key: ""
certificate_path: ""
private_key_path: ""
filters:
- enabled: true
url: https://adguardteam.github.io/AdGuardSDNSFilter/Filters/filter.txt
name: AdGuard Simplified Domain Names filter
id: 1
- enabled: true
url: https://adaway.org/hosts.txt
name: AdAway
id: 2
- enabled: false
url: https://hosts-file.net/ad_servers.txt
name: hpHosts - Ad and Tracking servers only
id: 3
- enabled: true
url: https://www.malwaredomainlist.com/hostslist/hosts.txt
name: MalwareDomainList.com Hosts List
id: 4
- enabled: false
url: https://raw.githubusercontent.com/vokins/yhosts/master/data/tvbox.txt
name: tvbox
id: 1575018007
- enabled: true
url: https://hosts.nfz.moe/full/hosts
name: neoHosts full
id: 1575618240
- enabled: false
url: https://hosts.nfz.moe/basic/hosts
name: neoHosts basic
id: 1575618241
- enabled: false
url: http://sbc.io/hosts/hosts
name: StevenBlack host basic
id: 1575618242
- enabled: false
url: http://sbc.io/hosts/alternates/fakenews-gambling-porn-social/hosts
name: StevenBlack host+fakenews + gambling + porn + social
id: 1575618243
- enabled: false
url: https://cdn.jsdelivr.net/gh/privacy-protection-tools/anti-AD/anti-ad-easylist.txt
name: anti-AD(Adblock+neohosts+yhosts+cjxlist+adhlist)
id: 1577113202
- enabled: true
url: https://zhangguanzhang.github.io/adguard/hosts
name: hosts
id: 1608901996
whitelist_filters:
- enabled: true
url: https://zhangguanzhang.github.io/adguard/whitelist.txt
name: white
id: 1599614146
user_rules: []
dhcp:
enabled: false
interface_name: ""
gateway_ip: ""
subnet_mask: ""
range_start: ""
range_end: ""
lease_duration: 86400
icmp_timeout_msec: 1000
clients: []
log_file: ""
verbose: false
schema_version: 6

保存应用后打开 web:3000 就可以看到了,默认 root/root ,默认配置文件的话就是 admin/admin
设置-常规设置里保留时间之类的不要设置成30天90天之类的,特别是你接入设备多,日志记录了可能把路由器容量撑满,配置成24小时就够了

主路由的lan配置

关闭DHCP即可,因为有人的旁路由丢包说关闭主路由的 DHCP 然后重启主路由。如果你不能动主路由,可以旁路由上关闭 dhcp,就是接入的设备需要设置下不适用 dhcp 的 ip,使用静态ip配置网关和 DNS 成旁路有的ip。有些主路由现在的 wan 口默认是智能选择,可能需要改成固定 wan 口模式后重启下

后续的一些问题和解决办法

N1盒子旁路由丢包

有人说缺少下面 iptables 命令,但是我前面加了后面配置完无法上网,我最后把它删除了就能上网了。也看家庭网络条件,我不加这个 nat 的话,接在家里路由器下就无法上网了。

1
2
3
4
注:固件做旁路由的话不要忘了加自定义防火墙规则(网络->防火墙->自定义规则):
iptables -t nat -I POSTROUTING -o eth0 -j MASQUERADE
也可以尝试(有桥接存在的情况下)
iptables -t nat -I POSTROUTING -o br-lan -j MASQUERADE

https://koolshare.cn/thread-178371-1-1.html 帖子下面有两个人说关闭主路由的DHCP并重启主路由后才行。
https://www.right.com.cn/forum/forum.php?mod=viewthread&tid=3592744&page=1#pid8444520 帖子下说主路由关闭硬件加速
https://www.right.com.cn/forum/forum.php?mod=viewthread&tid=3592744&page=1#pid8444520 网络-接口-LAN桥接关掉 不要自定义 直接单选那个eth0

网络-接口-LAN-物理设置-桥接接口关掉 不要自定义 直接单选那个 eth0。我试了这个后,br-lan 桥接的网卡没了,eth0 静态 ip,qq 邮箱打开都更快了。观察了好几天都没丢包了。如果取消桥接后断网,可以接屏幕和键盘到盒子 ssh,看文件 /etc/config/network.bak 里的桥接那些行给加到 /etc/config/network 里重启网络

docker容器无法访问外网

容器无法访问外网,查看了下 nat 表里缺少masquerade网络-防火墙-自定义规则,添加下面内容,CIDR 是容器的 CIDR 段,然后网络-防火墙-常规设置-转发拒绝切到接受,然后点击重启防火墙

1
iptables -t nat -I POSTROUTING -s 172.31.0.0/24 ! -o docker0 -j MASQUERADE

猫儿 与 adh

https://www.foxzc.com/archives/2020/06/01/13

无论如何解析都要过猫儿,然后猫儿上游是自己喜欢的就行,这里我是 adh。但是猫儿无法 dns 的解析端口 bind 0.0.0.0 所以目前 dns 链路是 dnsmasq 53 —> 127.0.0.1:7874 —> 0.0.0.0:5300 的 adh

dnsmasq
命令设置
1
2
3
4
5
# 获取信息 uci show dhcp
uci -q set dhcp.@dnsmasq[0].server='127.0.0.1#7874'
uci -q set dhcp.@dnsmasq[0].nonwildcard='0'
uci -q set dhcp.@dnsmasq[0].noresolv=1
uci -q set dhcp.@dnsmasq[0].port='53'
界面

要在 网络 - DHCP/DNS 界面配置

基本配置

  • 上游 DNS转发 配置为 127.0.0.1#7874 的猫儿
  • 重绑定保护(丢弃 RFC1918 上行响应数据) 取消了

HOSTS 和解析文件:

  • 忽略解析文件 选中

高级设置:

  • DNS 服务器端口 53
猫儿

如果用了 wg ,不走代理的 wan 那里添加下

上游 127.0.0.1:5300 udp 一个就行。然后:

  • 本地DNS劫持
  • 自定义上游DNS服务器
  • 禁止Dnsmasq缓存DNS

更改它的 dns 端口,不过没必要

1
2
3
OP_NAME=o-p-e-n-c-l-a-s-h
OP_NAME=${OP_NAME//-/}
uci set ${OP_NAME}.config.dns_port='7874'
adh

adh 端口 5300,然后 5300 重定向无

此时是 dnsmasq,然后它的上游 DNS转发 配置为 127.0.0.1#7874 的猫儿,再上游是 adh。要在 网络 - DHCP/DNS - 重绑定保护(丢弃 RFC1918 上行响应数据) 取消了。

猫儿的 dns bind

2021/09/02 不推荐改猫儿直接 bind 53,去看下它的启动和停止脚本就知道了,下面是给人参考

改 bind 0.0.0.0

1
2
3
4
5
6
7
8
9
10
11
12
13
14
OP_NAME=o-p-e-n-c-l-a-s-h
OP_NAME=${OP_NAME//-/}
/etc/init.d/${OP_NAME} 里的 `start()` 里的 `/usr/share/${OP_NAME//-/}/yml_change.sh` 的第 17 个参数有注入 dns 的端口

`/usr/share/${OP_NAME//-/}/yml_change.sh`里有下面逻辑
if $8 != 1 then
Value['dns']['listen']='127.0.0.1:${17}'
else
Value['dns']['listen']='0.0.0.0:${17}'
end;

第 8 个参数 `$ipv6_enable` 测试了下开 ipv6 就会 bind 0.0.0.0 了,不想开 ipv6 的话就改文件

uci set ${OP_NAME}.config.ipv6_enable=1

安装tcpdump

1
2
3
https://archive.openwrt.org/releases/packages-18.06/aarch64_generic/base/
# 其他包
https://mirrors.cloud.tencent.com/lede/snapshots/packages/aarch64_cortex-a53/packages/

救砖(免拆机)

2020/09/21 我把新固件写到U盘里后插上盒子上重启,结果还是老系统。搜到官方文档说用 dd 写,上传到目录后改名。

1
dd if=op.img of=/dev/sda

结果重启还是老系统。然后 dd的of=/dev/mmcblk1 后开机一直不断重启。后面搜了下救砖姿势

救砖开始

需要一根 USB 双公头的线,好些之前买的时候刷机线就是,USB 线接电脑和 N1,N1 的电源插头插上插座,N1 这头电源接口不插。

链接: https://pan.baidu.com/s/1y0IM3J46KTXr071jDUwidQ 提取码: s2an, 下载 刷机软件N1_mod_by_webpad_v2.2_20180920.rar

电脑解开刷机软件安装USB Burning tool(好些很多电视盒子刷机都可以用它)并安装,然后打开,点击左上角文件,选择解压后的webpad_v2.2_20180920,然后取消右侧的擦除bootloader,点击开始后迅速插上 N1 的电源。会开始烧录,等待烧录完成后,点击停止关闭软件。盒子会自动重启进入webpad的系统,网线接到路由器的lan口下,会默认 dhcp 获取ip。或者你接显示屏和鼠标键盘配置 ip。

然后盒子 USB 插上烧录固件的u盘,电脑 ADB connect 上后和 shell reboot update,然后笔记本配置和固件同一个二层的ip ssh 上去后执行脚本写入emcc,或者接显示器和键盘把固件写入emcc

刷回安卓盒子系统

来源 https://www.right.com.cn/forum/thread-2866816-1-1.html

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
1. U盘刷入M大的9.2.0 CoreELEC系统

2. U盘插N1远离HDMI的那个USB口,对,是远离的那个口,然后加电开机

3. 路由器看该系统IP,然后Xshell进入,用户名root ,密码 coreelec

4. 电脑端刷机工具加载IMG文件,我用的是R大的6.2.3,勾选“擦除flash”,然后点开始

5. 双公头线连接电脑和N1近HDMI线的那个口,是的,此时就可以直接连上双公头线。

6. Xshell端命令行处输入: reboot update

7. 此时会重启,然后耐心等待刷入安卓系统即可,整个过程U盘也不用拔。

8. 耐心等待刷完,点停止,然后拔出所有的U盘,网线啥的,再上电就可以了。
------------------------------------------------------------------------------------------------------------

附:查看N1安卓系统有线和无线 MAC 办法,前提是如R大的盒子已有busybox

1. 路由器查看N1安卓盒子IP

2. Xshell进入,注意此时端口是:2223,用户名:rush,密码rush

3. 进入后 ifconfig 即可查看有线和无线的MAC了

测试结果,

1. 有线的MAC重启后不会变,IP不会变

2. 同一个安卓IMG刷入别的盒子后,别的盒子有线MAC地址和前一盒子不同,不用担心有线MAC重合问题

3. 无线MAC固定就是00:90:4C:C5:12:38,刷2个盒子都一样,重合

4. 蓝牙MAC不重合,刷了2个盒子做了测试。
5. 干掉安卓,把armbian 5.77重新写入EMMC后,发现在armbian里每次重启有线MAC都会变,但IP不变,无线的MAC也不变。
CATALOG
  1. 1. 由来
    1. 1.1. 刷机
      1. 1.1.1. adb
      2. 1.1.2. 准备镜像文件
      3. 1.1.3. 刷机
    2. 1.2. 旁路由的配置
      1. 1.2.1. 路由静态ip配置
      2. 1.2.2. web配置
        1. 1.2.2.1. time
        2. 1.2.2.2. DHCP
        3. 1.2.2.3. DNS
      3. 1.2.3. 主路由的lan配置
    3. 1.3. 后续的一些问题和解决办法
      1. 1.3.1. N1盒子旁路由丢包
      2. 1.3.2. docker容器无法访问外网
      3. 1.3.3. 猫儿 与 adh
        1. 1.3.3.1. dnsmasq
          1. 1.3.3.1.1. 命令设置
          2. 1.3.3.1.2. 界面
        2. 1.3.3.2. 猫儿
        3. 1.3.3.3. adh
        4. 1.3.3.4. 猫儿的 dns bind
      4. 1.3.4. 安装tcpdump
    4. 1.4. 救砖(免拆机)
      1. 1.4.1. 救砖开始
    5. 1.5. 刷回安卓盒子系统