路由升级:J3455 软路由
最近女朋友沉迷王者荣耀,经常抱怨家里的网络环境变得越来越差。说来也是,上次折腾路由器的时候,Koolshare 还在。已经过了那么久,也该升级一下家里的软路由了。
硬件
自从换上了 Synology920+ 之后,之前搭建 NAS 的 J3455 板子也开始吃灰了,虽然说这个板子的 U 有缺陷,但是跑了三年一点问题也没有,是时候让它继续「发光发热」,继续为这个家做贡献了。
扩展网口
因为主板上只有一个网口,所以买了一个M.2转千兆网卡的扩展卡,从主板的M.2接口转接出来,这样就变成了双网口,并且 8111E/F 也是免驱的,直接就可以用,不要太方便。

机箱
之前的软路由是用的 NAS 淘汰下来的机箱,不支持 PCIE 的扩展卡,也不支持 COM 口。为了能让机箱尽可能小一些,还是选择了一个工控小机箱,没有风扇位也没有电源位,只能靠被动散热。
毕竟弱电箱的位置太挤了,只能委屈一下主板了。
电源
电源用了 DC 转 ATX 的电源板,80W 绰绰有余。
编译OperWrt
既然都已经开始折腾了,也尝试一下自己动手编译 OpenWrt 好了。
Github 上开源的 OpenWrt 衍生项目有很多,最出名的应该还是 lean 大神的 LEDE,然而国内的环境确实太差,即使全局🪜后,在 ubuntu 上编译了好几遍,中间总是莫名其妙的 Error,于是放弃了。
然后找到了 OpenWrt_x86-r2s-r4s-r5s-N1 这个项目,可以支持 Github Action 编译,简直 nice。
Start,Fork,一气呵成。
因为是只编译 x86 的固件,所以把其他的 device 全部删掉了,在 .config中修改一下自己需要的 luci-app:
CONFIG_TARGET_x86=y
CONFIG_TARGET_x86_64=y
CONFIG_TARGET_ROOTFS_TARGZ=y
# 主题:
CONFIG_PACKAGE_luci-theme-argon=y
CONFIG_PACKAGE_luci-theme-bootstrap=y
CONFIG_PACKAGE_luci-theme-material=y
# EFI支持:
CONFIG_TARGET_ROOTFS_EXT4FS=y
CONFIG_GRUB_IMAGES=y
CONFIG_GRUB_EFI_IMAGES=y
CONFIG_VMDK_IMAGES=y
# 其他需要安装的软件包:
CONFIG_PACKAGE_luci-ssl=n # uhttpd服务
CONFIG_PACKAGE_luci-ssl-nginx=y # nginx
#CONFIG_PACKAGE_kmod-r8168=n
CONFIG_PACKAGE_luci-app-ddns=y # 域名解析
CONFIG_PACKAGE_luci-app-filebrowser=y # 文件浏览器
CONFIG_PACKAGE_luci-app-uugamebooster=y # UU加速器
CONFIG_PACKAGE_luci-app-adguardhome=y # AdguardHome
CONFIG_PACKAGE_luci-app-sqm=y # Qos流量控制
CONFIG_PACKAGE_luci-app-netdata=y # 性能检测
CONFIG_PACKAGE_luci-app-diskman=y # 磁盘管理
CONFIG_PACKAGE_luci-app-dockerman=y # Docker管理
CONFIG_PACKAGE_luci-app-ttyd=y # 网页命令行
CONFIG_PACKAGE_luci-app-accesscontrol=y # 访问控制
CONFIG_PACKAGE_luci-app-homebox=y # 内网测速
CONFIG_PACKAGE_luci-app-wolplus=y # 网络唤醒
CONFIG_PACKAGE_luci-app-ramfree=y # 释放内存
CONFIG_PACKAGE_luci-app-syncdial=y # 多拨
CONFIG_PACKAGE_luci-app-turboacc=y # 网络加速
CONFIG_PACKAGE_luci-app-smartdns=y # Smartdns
CONFIG_OPENSSL_PREFER_CHACHA_OVER_GCM=n
接下来就可以交给 Github 了!🎉
使用 Github Action 编译
利用Repo Dispatcher,可以直接从 Github Action 中编译,在 Action 中找到 Repo Dispatcher,点击 Run workflow,之后坐和放宽,也可以去睡一觉。
毕竟真的需要很长时间!😠

自定义构建
如果不想自己编译,大佬还提供了一个在线构建固件的工具:supes.top。
或者,也可以下载编译好的固件:08.12_x86_64
安装 OpenWrt
文件系统
将打包好的镜像下载解压后得到这些文件:
X86-64
├── 5.19.59\
├── packages\
├── config.buildinfo
├── feeds.buildinfo
├── openwrt-imagebuilder-x86-64.Linux-x86_64.tar.xz
├── openwrt-x86-64-generic-ext4-combined-efi.img.gz
├── openwrt-x86-64-generic-ext4-combined-efi.vmdk.zip
├── openwrt-x86-64-generic-ext4-combined.img.gz
├── openwrt-x86-64-generic-ext4-combined.vmdk.zip
├── openwrt-x86-64-generic-kernel.bin
├── openwrt-x86-64-generic-rootfs.tar.gz
├── openwrt-x86-64-generic-squashfs-combined-efi.img.gz
├── openwrt-x86-64-generic-squashfs-combined-efi.vmdk.zip
├── openwrt-x86-64-generic-squashfs-combined.img.gz
├── openwrt-x86-64-generic-squashfs-combined.vmdk.zip
├── openwrt-x86-64-generic.manifest
├── profiles.json.b
├── sha256sums
├── version.buildinfo
├── x86_64.config
└── x86_64_kernel.config
这么多文件是因为官方提供了多种格式的 Image Files[1]:
- combined-ext4.img.gz:包含引导信息、rootfs(ext4 格式)、内核以及相关分区信息的硬盘镜像。
- combined-squashfs.img.gz:包含引导信息、rootfs(squashfs 格式)、内核以及相关分区信息的硬盘镜像。
- generic-rootfs.tar.gz:rootfs 包含的所有文件。
- rootfs-ext4.img.gz:rootfs(ext4 格式) 分区镜像,可以 dd 到某个分区或者 mount -o 到某个目录。
- rootfs-squashfs.img.gz:rootfs(squashfs 格式) 分区镜像,可以 dd 写入某个分区或者 mount -o 挂载到目录。
- vmlinuz:内核
其中,带 EFI 后缀的即支持 UEFI 引导启动。
而 Ext4 和 Squashfs 格式的区别也很简单:
- Ext4 格式的 rootfs 可以扩展磁盘空间大小,而 Squashfs 不能。
- Squashfs 格式的 rootfs 可以使用重置功能(恢复出厂设置),而 Ext4 不能。
所以为了之后可以方便扩容,所以选择了 Ext4 文件系统。
利用 PE 将镜像写入到硬盘中
安装就很快了:利用 DiskGenius 把硬盘多余的分区删掉,使用 physdiskwrite 将镜像写入。
physdiskwrite.exe -u openwrt-x86-64-generic-ext4-combined.img.gz
其实也可以在 Mac 和 Linux 中利用 DD命令将镜像写入,因为要拆装硬盘就偷懒了。🤪
使用 GParted 扩容
编译后的镜像默认 overlay 分区为 2GB,强迫症表示太难受!为了使用 Docker 和把硬盘剩下的空间利用一下,需要对 overlay 分区扩容。
官方网页:GParted
⚠️ 需要注意的是,安装后需要立即扩容,因为一旦 OpenWrt 启动,overlay 分区也就确定了!
和 PE 一样,需要将 GParted 的镜像写入到 U 盘中,然后通过 U 盘启动就可以进入到 GParted 的 GUI 页面,选中后面的分区选择扩展分区,选择全部或者自定义新大小,点击确定大功告成!

插电,开机!设置完 PPPoE、DHCP、静态 IP 和端口转发之后熟悉的页面就回来了:

配置 SmartDNS
虽然 OpenWrt 自带了 Dnsmasq,但是还是习惯使用 SmartDNS 来处理 DNS。
SmartDNS 是一个运行在本地的 DNS 服务器,它接受来自本地客户端的 DNS 查询请求,然后从多个上游 DNS 服务器获取 DNS 查询结果,并将访问速度最快的结果返回给客户端,以此提高网络访问速度。
Github:SmartDNS
启动也很简单:关闭 Dnsmasq,重定向 53 端口到 SmartDNS。
执行:
$ nslookup -querytype=ptr smartdns
查看命令结果中的 name 是否为 smartdns 或你的主机名,如果是则表示生效:
$ nslookup -querytype=ptr smartdns
Server: 192.168.1.1
Address: 192.168.1.1#53
Non-authoritative answer:
smartdns name = smartdns.
新的导航页
这次换了路由,把内网的 IP 段也换掉了,除了要更改每个设备的 IP 后,原来的导航页也失效了,所以不如趁这次把 HomeStack 也重新做一下,于是发现了这个宝藏项目:

永久数据
nightTab does not collect, store or send your data anywhere. All your data is saved locally to your browser.
nightTab不会在任何地方收集、存储或发送您的数据。您的所有数据都会在本地保存到您的浏览器中。
尽管为了安全作者并没有加入 Remote Data 的功能,但是作为只运行在内网的 Tab 页来说,不同的设备之前需要每次导入导出反而更加麻烦了。
所以在当前的项目加入了 Remote Server:
// src/component/data/index.js
data.sync_load = () => {
const remote = state.get.current().sync.url;
const token = state.get.current().sync.token;
if (!remote) {
console.log('remote config empty');
return false;
}
const dataByRequest = request('GET', remote, {
qs: { token }
});
if (dataByRequest && dataByRequest.getBody()) {
console.log('use remote data');
let dataBody = JSON.parse(dataByRequest.getBody() || []);
let baseToData = JSON.parse(dataBody['data']);
baseToData['state']['sync']['token'] = token;
menu.close();
data.import.render(JSON.stringify(baseToData));
}
return false;
};
data.sync_save = () => {
const remote = state.get.current().sync.url;
const token = state.get.current().sync.token;
if (!remote) {
console.log('remote config empty');
return false;
}
let dataJson = {
[APP_NAME]: true,
version: version.number,
state: Object.assign({}, state.get.current()),
bookmark: bookmark.all
};
// delete sync token
dataJson.state.sync.token = '';
const dataSaveByRequest = request('POST', remote, {
qs: { token },
json: { data: dataJson }
});
dataJson.state.sync.token = token;
let dataByResponse = JSON.parse(dataSaveByRequest.getBody() || []);
if (dataByResponse['code'] !== 0) {
console.log('sync remote fail');
return false;
}
console.log('sync remote success');
return true;
};
测试
家里的公网带宽是 300M 的,跑满时候的负载也不到 30%,真的要比之前的 D2550 性能高太多。👍

接下来应该会考虑把一些常用的服务搬到 Docker 中,毕竟只做路由多少有点浪费了 J3455 的性能。
这下女朋友应该可以安心的去打王者荣耀了吧。 (逃
这里空荡荡的,一个人都没有