N1盒子重装Openwrt

折腾了一天n1盒子,起因是看到一个新的代理协议"Hysteria"(安装视频:https://www.youtube.com/watch?v=CXj-ID33MhU),在成功地在windows和android上运行了Hysteria后,想在我的旧N1盒子上使用这个新协议,但奈何N1盒子的passwall版本太旧了,不支持Hysteria2,即使直接将Hysteria2的应用替换掉原应用,passwall对Hysteria2的支持也不够好。

于是,就尝试升级passwall,但由于N1盒子的系统版本太旧(21年的),使得直接升级passwall方案也失败。

于是乎……就开启了一系列的折磨,最终的方案是,重新安装24.01.26版本的openwrt系统,再在此系统中,使用Passwall2


如果要找N1重头开始盒子安装Openwrt,请查看:https://www.cnblogs.com/robotpaul/p/17127387.html

Openwrt版本选择

目前主流的openwrt系统有非常多的版本,而且分为“未编译”和“已编译成镜像”的,下面我只拿已经编译好镜像的举例

其中,官方版本的软件较少,而Flippy版本自带了各种常用的代理工具,Flippy版本也是买N1盒子时自带的版本,推荐使用Flippy版本

镜像下载

如果选择了Flippy版本,在 https://www.right.com.cn/forum/thread-4076037-1-1.html 中可以找到百度网盘下载地址,在网盘中找到不同硬件对应的文件夹

比如N1盒子的文件夹叫"S905D_Phicomm_N1",进入此文件夹后,选择openwrt_s905d_n1_R24.01.26_k5.15.148-flippy-87+o这个文件下载即可,文件不用解压

  • R24.01.26表示编译的版本
  • k5.15.86是内核版本,如果当前内核高或低于5.15也没关系,可以升级或降级内核版本
  • flippy是作者名

镜像安装

下载好镜像文件后,打开当前OpenWrt的网页界面,在"系统" -> “晶晨宝盒” -> “手动上传更新”,选择刚刚下载的.7z文件,等上传完成后,最下方会出现“升级Openwrt固件”的按钮,点击更新即可

“升级Openwrt固件”按钮旁边,有安装的进度提醒,等待几分钟,重新打开OpenWrt的网页界面,理论上就安装成功了。

使用Passwall2

可能是我配置的问题,如果用Passwall就会出现翻墙失败,这里于是使用Passwall2,配置基本与Passwall一致

在Passwall2中添加节点,选择Hysteria2,下面是Hysteria2的配置

Passwall2具体的配置:

Openwrt|Passwall| 【2024-1-1】Pass Wall2(完美配置教程)-OPENWRT专版-恩山无线论坛

Hysteria2的配置

随后,进行Hysteria2的配置,详细的配置参考官网:Full-Client-Config

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
**地址(支持域名):填写ip

**端口: 填写Hysteria2开放的端口

**端口跳跃额外端口: 20000-50000

混淆密码 : 可以空着不写

**认证密码: 填写Hysteria2服务端的密码

快速打开: 不选

**域名: 填写域名

允许不安全连接:不选

PinSHA256:不写

**最大上行(Mbps):100

**最大下行(Mbps):100

**端口跳跃时间:30

**QUIC 流接收窗口:26843545

**QUIC 连接接收窗口:67108864

空闲超时:不选

**禁用 MTU 检测 :打钩

延迟启动:不选

关于QUIC 流接收窗口的数值参考官网的设置

https://v2.hysteria.network/zh/docs/advanced/Performance/

系统缓冲区大小

Linux

1
2
3
# 将发送、接收两个缓冲区都设置为 16 MB
sysctl -w net.core.rmem_max=16777216
sysctl -w net.core.wmem_max=16777216

BSD/macOS

1
2
3
sysctl -w kern.ipc.maxsockbuf=20971520
sysctl -w net.inet.udp.recvspace=16777216
# BSD 上不存在 UDP 发送缓冲区,因此没有 "sendspace" 可设置

流控制接收窗口大小

Hysteria 在客户端和服务器配置中都有以下 QUIC 流控制接收窗口参数:

1
2
3
4
5
quic:
initStreamReceiveWindow: 26843545
maxStreamReceiveWindow: 26843545
initConnReceiveWindow: 67108864
maxConnReceiveWindow: 67108864

可以根据你的使用情景提高或者降低这些值。强烈建议保持接近 2/5 的流/连接接收窗口比例。 这样可以防止一个或两个阻塞的流卡死整个连接。

端口跳跃

具体查看:https://v2.hysteria.network/zh/docs/advanced/Port-Hopping/

中国用户有时报告运营商会阻断或限速 UDP 连接。不过,这些限制往往仅限单个端口。端口跳跃可用作此情况的解决方法。

客户端

Hysteria 客户端支持一种特殊的多端口地址格式:

1
2
3
example.com:1234,5678,9012 
example.com:20000-50000
example.com:1234,5000-6000,7044,8000-9000

可指定的端口数量没有限制。

客户端将随机选择一个端口进行初始连接,并定期随机跳跃到另一个端口。用于控制时间间隔的选项是 transport 部分中的 hopInterval

1
2
3
transport:
udp:
hopInterval: 30s

假设服务器确实在所有指定的端口上可达,跳跃过程对上层应用是透明的,不会导致数据丢失/连接断开。

服务器

Hysteria 服务端并不能同时监听多个端口,因此不能在服务器端使用上面的格式作为监听地址。建议配合 iptables 或 nftables 的 DNAT 将端口转发到服务器的监听端口。

iptablesnftables

1
2
3
4
# IPv4
iptables -t nat -A PREROUTING -i eth0 -p udp --dport 20000:50000 -j DNAT --to-destination :443
# IPv6
ip6tables -t nat -A PREROUTING -i eth0 -p udp --dport 20000:50000 -j DNAT --to-destination :443

在这个示例中,服务器监听 443 端口,但客户端可以通过 20000-50000 范围内的任何端口连接。


以下内容,被丢弃了,不要用,用最新Flippy版本的Openwrt系统,可以拥有最新的Passwall并且Hysteria也是比较新的版本

升级Passwall

确定CPU架构

在下载前,先确定自己机器的cpu架构

  1. (推荐)使用 lscpu 命令

    lscpu 命令显示 CPU 架构信息,包括架构类型、核心数等详细信息

    1
    lscpu
  2. 使用 uname 命令

    uname -m 可以显示机器的硬件名称。对于大多数 ARM 架构的设备,这个命令会返回类似 armv7l, aarch64 这样的结果,这表示了 CPU 的架构类型。

    1
    uname -m

这里使用lscpu后,输出了以下内容,其中aarch64Cortex-A53是要记住的名字

1
2
3
4
5
6
7
Architecture:            aarch64
CPU op-mode(s): 32-bit, 64-bit
Byte Order: Little Endian
CPU(s): 4
On-line CPU(s) list: 0-3
Vendor ID: ARM
Model name: Cortex-A53

下载新版Passwall

在软件包下载网站:https://op.dllkids.xyz/packages ,先进入对应的架构文件夹,再下载以下内容对应的版本

1
2
3
4
5
6
7
8
9
10
11
12
13
14
brook_20240404-28.ipk                          shadowsocksr-libev-ssr-local_2.5.6-13.ipk
chinadns-ng_2023.10.28-33.ipk shadowsocksr-libev-ssr-nat_2.5.6-13.ipk
dns2tcp_1.1.0-11.ipk shadowsocksr-libev-ssr-redir_2.5.6-13.ipk
hysteria_2.4.0-33.ipk shadowsocksr-libev-ssr-server_2.5.6-13.ipk
luci-app-passwall_git-25.079.46197-05caf0d_all.ipk simple-obfs_0.0.5-5.ipk
luci-i18n-passwall-zh-cn_git-23.289.45328-a953315_all.ipk tcping_0.3-9.ipk
luci-lua-runtime_git-23.233.52805-dae2684.ipk trojan-plus_10.0.3-6.ipk
microsocks_1.0.4-20.ipk tuic-client_1.0.0-7.ipk
naiveproxy_122.0.6261.43-2-49.ipk v2ray-geoip_202403210039-45_all.ipk
shadowsocks-rust-sslocal_1.18.1-18.ipk v2ray-geosite_20240324094850-45_all.ipk
shadowsocks-rust-ssmanager_1.18.1-18.ipk v2ray-plugin_5.13.0-44.ipk
shadowsocks-rust-ssserver_1.18.1-18.ipk xray-core_1.8.7-35.ipk
shadowsocks-rust-ssservice_1.18.1-18.ipk xray-plugin_1.8.7-32.ipk
shadowsocksr-libev-ssr-check_2.5.6-13.ipk

比如aarch64_cortex-A53的cpu架构,就要下载brook_20240404-28_aarch64_cortex-a53.ipk

另外,安装的Openwrt版本低于23.5的,需要安装luci-lua-runtime_git-23.233.52805-dae2684.ipk,否则后续安装Passwall可能会出错

将这些软件包下载好后,将文件夹压缩成zip格式,再用scp命令复制到Openwrt目录中,

1
scp passwall.zip root@192.168.6.155:/home/

随后执行命令重装Passwall

1
opkg install ./*.ipk --force-reinstall

为什么要下载这么多包,因为Passwall依赖于这些包,只安装luci-app-passwall_git-25.079.46197-05caf0d_all.ipk是不会安装成功的

重装后,刷新Openwrt网页,此时Passwall的Hysteria 版本应该是【 v2.4.0 】,如果不是,就再重新单独安装下hysteria_2.4.0-33.ipk

如果只想单独安装某个软件,可以在“系统”-> "文件传输"中,将文件上传后,会跳出“安装”的按钮