
从零开始打造一台全能软路由:Docker + 无线发射 + 双网口
折腾有风险,搞机需谨慎。
想看配置过程可以直接跳转到“系统安装与基础配置”小节。
📌 背景
原本宿舍里的路由器是一台运行 ImmortalWrt 的小米 AX3000T,我白天上课时会远程连接宿舍电脑,晚上在宿舍用电脑做软件开发或者打游戏。
然而,随着负载越来越高,这台 AX3000T 已经明显撑不住了:时不时死机、断网、甚至无法连接终端,只能重启路由器解决。最要命的是打游戏时候断网,还好都是和朋友组队,不然我得被祖安多少次了。
但是上哪儿找比 AX3000T 性能还好的路由器呢?有,但为什么不直接上软路由呢?x86 不仅拥有强大的性能,也拥有吓人的功耗和极高的自由度,不仅仅做软路由,还能顺便放一些工作任务。
既然上软路由了,那么就一步到位,我们要让这台软路由能够满足以下需求:
- ✅ 提供稳定高效的有线+无线网络服务
- ✅ 支持运行 Docker 容器
- ✅ WAN/LAN 网络隔离
- ✅ 在意外断网时自动重启路由器
- ✅ 功耗合理、长期稳定运行
等一下,为什么要无线网络服务?
学校虽然提供了统一的免费无线网络,但是限制每次最多接入 3 个设备。我询问学校的网络负责人,他们建议我们使用无线路由器。我手上的设备很多,同时我也需要局域网的文件互传,所以我的软路由也必须提供无线网络才能给我的手机平板上网。
本文将记录我的整个搭建过程,包括遇到的问题及解决方法,希望对同样想玩软路由的朋友有所帮助。
🛠️ 硬件清单
首先说明的是:这绝对不是最好的软路由硬件选择,想抄作业的需要注意一下。接下来解释我为什么这样配。
组件 | 型号/规格 |
---|---|
主机 | NEC8(联想 M720Q 日本版) |
CPU | Intel i3-8100(65W TDP) |
内存 | 16GB DDR4 SODIMM |
存储 | 西数 SN530 512GB NVMe SSD |
网卡 | 板载 Intel 千兆网卡 + PCIe 双口 Intel 82576NS 网卡 |
无线网卡 | 联发科 MT7921(支持 Wi-Fi 6E) |
电源 | 100W 联想 Type-C 适配器 + 转接头 |
系统 | ImmortalWrt |
为什么这样配?
我原本考虑使用 J / N 系列多网口主板作为主机,但是这个时候,一位朋友要出一些硬件:
- i3-8100
- 16GB DDR4 SODIMM
- 西数 SN530 512GB NVMe SSD
- 联发科 MT7921 无线网卡
- 100W 联想 Type-C 适配器
打包 320 元,比全部单买要便宜很多。于是我直接买了,顺便请他打了两把舞萌(唉舞萌痴)。
主机
i3-8100 只能配桌面级主板了,板载多网口的 H310 很少也很贵,H110 能刷 BIOS 上八代,但是价格也很高。ATX / mATX 的主板可以通过 PCIe 扩展网卡,但是尺寸太大,而且我已经购买了 DC 适配器,再加一个 DC 转 ATX 的模块又多此一举。
最后我选择了联想 M720Q:B360 芯片组直接上八代,联想方口直供电(当然我还得需要一个方口转 Type-C 转接头),有一个 PCIe 插槽(需要转接卡),还预留了无线接口,体积比 ITX 小,简直完美!
于是在闲鱼以 236 元拿下 M720Q 的日本版:NEC 8代小主机(NEC8)。别问我为什么选 NEC8,便宜 20 块,还是白色的,好看。
NEC8 和 M720Q 就是一个型号的两个马甲,只是换了个外壳,毕竟 NEC 的个人电脑业务早就被联想收购了。
有线网卡
我在宿舍只有笔记本电脑需要接有线网,主板自带一个千兆网口,按理来说我只需要再加一个网口就够,不过我还是选择了一个双网口的 Intel 82576NS 千兆网卡,闲鱼 44 元,便宜且尺寸合适。
选购 PCIe 扩展设备的时候需要注意,长度不能超过 16 cm,宽度不能超过 8cm,高度不能超过 2 cm。选择带散热片或者带风扇的设备最好确认高度,否则可能会超高。
我们还需要一个 M720Q 的 PCIe 转接卡,这是因为联想小主机的 PCIe 插槽不是标准型的。闲鱼蹲了好久蹲到一个 30 元包邮的,二话不说拿下。
前面说过,由于我购买的是 Type-C 接口的电源,我还需要额外购买一个 Type-C 转方口的转接头。拼多多 7 块拿下。
一共 636.92 元。钱包在滴血……
🔧 系统安装与基础配置
1. 安装系统
路由器系统有很多,提供 x86 固件的有 OpenWrt、ImmortalWrt、LEDE 等。
我应该选择什么系统?
OpenWrt (Open Wireless Router)诞生于 2004 年,是一个基于 Linux 的嵌入式开源发行版,最初为 Linksys WRT54G 路由器开发,也是公认的最正统的开源路由器系统。
ImmortalWrt 是基于 OpenWRT 和 LEDE 分叉而来的开源发行版,针对国内特殊的网络环境进行了调整和增强,我个人认为是这三个里面最好用的。
LEDE(Linux Embedded Development Environment)项目于 2016 年由部分 OpenWrt 开发者分叉创建,旨在解决当时 OpenWrt 项目管理和开发过程中的一些问题,如更新滞后、代码质量下降等。LEDE 强调透明的开发流程和高质量的代码。2018 年,LEDE 与 OpenWRT 项目重新合并,但 LEDE 的理念和改进被保留并融入了 OpenWRT。
我个人更倾向于使用 ImmortalWrt,它在 OpenWrt 的基础上补足了很多缺失功能,例如全锥 NAT 开关、上网工具等,而且也可以和 OpenWrt 直接互刷。
Lean’s LEDE 不完全开源,部分插件是专有的。
squashfs
与 ext4
,我该选哪个?
在固件选择页面中,我们可以看到 squashfs
和 ext4
两种格式的固件。下面介绍这两种格式的区别。
squashfs
是一种高度压缩且只读的文件系统,一般是给资源有限的设备使用,可以减少设备的读写开销,也可以在第三方软件故障时启动备用模式确保正常运行。但是由于只读特性,所有的更改都是在上层挂载 overlay
完成的,一些 Docker 镜像运行时需要额外配置。
ext4
就是 Linux 上常见的文件系统,可读可写,占用空间会略大。
我自己选择的是 squashfs
,毕竟路由器是重要的网络设备,安全第一。
下载镜像
建议仅从官方渠道下载镜像。
OpenWrt 官方固件选择器:https://downloads.openwrt.org/
ImmortalWrt 官方固件选择器:https://firmware-selector.immortalwrt.org/
然后选择 Generic x86/64
(64 位)或者 Generic x86
(32 位)。如果你的设备支持 64 位系统,请选择 64 位。
如果你的设备为 UEFI 启动,则下载 COMBINED-EFI
;如果你的设备为传统 BIOS 启动,则下载 COMBINED
。
后面的括号为文件系统格式,请根据需要自行选择。对于 ImmortalWrt,请下载后缀为 .IMG.GZ
的文件。
下载完成后请检查文件 SHA-256 值,确保完整性。路由器刷机不能有任何闪失。
写入镜像
对于 x86 设备,我们直接将镜像写入空硬盘即可。我选择的是 ImmortalWrt Generic x86/64 COMBINED-EFI
镜像。
请在 Linux 环境下使用 dd
命令写入镜像。
准备一个 Linux 启动盘。任何 Linux 发行版(Ubuntu、Debian、Arch Linux、Fedora 等)都可以。
将下载的
img.gz
压缩包移动到 U 盘(或其他外置存储)中。在 BIOS 中关闭安全启动,然后通过启动盘启动到 Linux 系统。
插入带有
img.gz
压缩包的存储设备。打开终端,输入
lsblk
查看目标磁盘。比如你要安装到的磁盘是/dev/sda
,那么目标磁盘为/dev/sda
。对于 NVMe 设备,目标磁盘应该是/dev/nvme0n*
这样的形式。输入以下命令:
1
2
3cd 压缩包所在目录
gzip -d 压缩包文件名.img.gz
dd if=解压出来的文件名.img of=目标磁盘 bs=1M
- 关机,移除启动盘,然后开机。
2. 系统初始配置
重启过后,软路由接入显示器就可以访问终端。
设置 root 密码
root
密码是登录网页管理界面的唯一凭据,请妥善设置和保管 root
密码。
在终端中输入 passwd
,然后输入两次新密码。
🌐 网络配置
以下为我自己的配置参考,实际情况根据你的设备而定。
1. 接口划分
软路由接入网线并启动之后,通过 ip a
可以查看到接口 eth 信息以及对应的 IP 地址。
通过 ethtool -i 接口编号
可以查询接口对应的网卡,网卡编号在 bus-info
中,然后我们使用 lspci | grep 网卡编号
就可以确定该接口对应的是哪一块网卡了。
我的设备的查询结果如下:
接口 | 类型 | 功能 |
---|---|---|
eth0 | PCIe 网卡 | LAN 口(桥接 br-lan) |
eth1 | PCIe 网卡 | LAN 口(桥接 br-lan) |
eth2 | 板载网卡 | WAN 口(DHCP 获取上游 IP) |
但是 OpenWrt 默认的路由配置中,eth0
被作为 WAN 接口,其他两个接口没有启用,这导致我插上网线后,什么事情也没有发生。为了能够正常使用,我需要将 WAN 口手动调整 到 eth2
上。
修改 /etc/config/network
文件:
1 | vi /etc/config/network |
编辑以下三个部分,将 eth2
添加到 wan
接口中,同时预先分配一个 LAN 接口以便调试:
1 | config interface 'wan' |
1 | config interface 'lan' |
1 | config device |
然后键入 :wq
保存并退出。然后执行 /etc/init.d/network restart
重启网络组件。
之后就能看到,WAN 接口和接入网线的 LAN 接口都亮灯,此时应该可以正常访问网页管理界面。
确认可以访问之后,登录到网页管理界面。
2. br-lan
网桥
在“网络”-“接口”中应该能看到系统默认创建的网桥 br-lan
。
如果上网有问题,需要检查 br-lan
是否配置正确。它应该是这样的:
参数 | 值 |
---|---|
协议 | 静态地址 |
设备 | br-lan |
开机自动运行 | 是 |
IPv4 地址 | 192.168.1.1 (如果上游网段也为 192.168.1.0/24 ,则此项应该设置为其他不冲突的值,比如 192.168.2.1 ) |
IPv4 网关 | 留空不填时,默认为 WAN 获取到的地址 |
IPv4 子网掩码 | 255.255.255.0 |
3. 设置 WAN 接口
如果你的路由器上游支持 DHCP,则添加一个“DHCP 客户端”接口,名称为 wan
,设备指定到你想作为 WAN 口的接口即可。
如果你需要 IPv6,你可以再添加一个“DHCPv6 客户端”接口,名称为 wan6
,设备指定到和 wan
同一个接口。
4. 设置 LAN 接口
进入“网络”-“设备”,选择 br-lan
,在“网桥”端口中勾选你想作为 LAN 口的接口。切记不要勾选 WAN 端口。
5. 应用
点击“保存并应用”之后,将网线接入 WAN 口,将需要的设备接入 LAN 口,然后通过 br-lan
上的 IPv4 地址
(默认是 192.168.1.1
)访问你的路由器。
📡 无线 AP 配置
转到“网络”-“无线”菜单,可以看到无线网卡 radio0
。如果你的无线网卡是 2.4/5GHz 双频的,那么可以看到两个设备 radio0
和 radio1
。
MT7921 就是双频 WiFi-6E 网卡,但是不支持同时开启 2.4GHz 和 5GHz。
对于部分型号网卡,需要安装驱动才能正常工作。以下为 MT7921 / MT7922 / RZ616 安装驱动的方法:
跳转到“软件包”章节(在下面),配置好镜像源。
安装以下软件包:
kmod-mt7921e
kmod-mt792x-common
kmod-mt7921-common
MT7921 需要额外安装以下软件包:
kmod-mt7921-firmware
mt7921bt-firmware
MT7922 / RZ616 需要额外安装以下软件包:
kmod-mt7922-firmware
mt7922bt-firmware
安装以下软件包以启用 Wi-Fi 6:
hostapd-common
hostapd
wpa-supplicant
安装完成后重启系统。
接下来创建一个无线网络。点击你想使用的 radio
设备右侧的“添加”按钮,在“设备配置”-“工作频率”中,根据情况选择“模式”和“带宽”,“信道”选择 auto
,通道宽度不动或者选择最大的。
以下为“模式”与 Wi-Fi 标准的对照表:
模式 | Wi-Fi 标准 |
---|---|
Legacy | 原始 Wi-Fi 标准,没必要用 |
N | Wi-Fi 4 |
AC | Wi-Fi 5 |
AX | Wi-Fi 6 / 6e |
BE | Wi-Fi 7 |
国家代码选择 CN - China
,其他保持不动。
有网络资料指出,改为其他国家的代码也可以正常使用,并可能会通过增大功率来提升信号强度,达到更高的无线网络质量效果。如果你了解相关内容,可以自行调整,如果你不了解,请勿随意修改。
在“接口配置”-“常规设置”中,“模式”选择“接入点 AP”,ESSID 为无线网的名称,根据需要自己设置。“网络”选择 lan
,其余不动。
如果需要设置密码,在“接口配置”-“无线安全”中,加密算法选择 WPA2-PSK
,“密钥”一栏填写你要设置的密码。
最后点击最下方的“保存”。
如果保存后没有启用,点击无线网络右边的“启用”按钮。如果还是没有启用,或启用后无线网无法连接、无法上网,请检查配置是否正确。
📦 软件包
软件包管理是 OpenWrt 的一大特色,也是几乎所有 Linux 发行版都支持的一个功能。
更换镜像源
更换国内镜像源可以更快地下载软件包。
切换镜像源后,命令执行 opkg-update
或者在网页的“系统”-“软件包”中点击“更新列表”按钮。
🐳 Docker
在网页管理界面中切换到“系统”-“软件包”,点击“更新列表”,等待完成后在“过滤器”中搜索 docker
。
然后安装 docker
、docker-compose
包。我推荐将以下包都安装,这样可以在网页端轻松配置容器。
然后执行以下命令让 Dockers 开机启动:
1 | /etc/init.d/dockerd start # 立即启动 |
然后就可以使用了。
如果你安装了推荐包,刷新网页后你可以看到“Docker”选项,这里可以直观地管理容器。
⚙️ 网络中断时自动重启
为了避免因校园网不稳定导致的服务中断,我编写了一个简单的 shell 脚本用于检测网络状态并在断网后自动重启路由器:
1 |
|
校园网每日 0:00-6:00 断网,所以只让其在 6:00-23:59 内检查即可,然后 0:00 准时关机。
至于定时开机,其实可以通过定时插座+来电自启实现,但是我自己没做。
在“系统”-“计划任务”中写入下列内容,然后保存:
1 | * 6-23 * * * /bin/sh /root/check_internet.sh |
💡 功耗与稳定性分析
我还没找到在系统内查看 CPU 实际功耗的方法,我也没有购买功率测量插座。但是从目前的运行情况来看,CPU负载大概在 20% 左右,频率高峰期满载,低谷期 1.0GHz 左右,自己估算每天的平均功耗应该在 25-35W 左右。
相比旧路由器(满载 6W),虽然略高,但换来的是更稳定的运行环境、更低的温度、更强的功能扩展性,是非常值得的投资。
反正电费都是宿舍所有人平摊,学校每个学期还送用不完的电,这不用白不用么?
📝 写在最后
这是我第一次写那么长的文章,写得很详细,一方面是能尽量保留搭建软路由的全部细节,另一方面是想把过程和结果分享给更多人,希望对同样想搭建 x86 软路由的你,有所帮助。
我在查找资料的时候发现,国内关于 x86 软路由的资料比较分散,已有的教程写得也有待完善。软路由并不是什么门槛很高的东西,当你真正上手去做,以及做成的那一刻,你会感觉到你所有的付出都是值得的。
如果对你有帮助的话,欢迎分享给更多人。如果有什么需要补充或者修正的地方,欢迎在评论区留言,感谢大家。
🤔 真的是“写在最后”吗……?
这一台软路由因为一些原因移动到了工作室,作为工作室的主路由使用。这样的话,宿舍就需要第二台软路由了。这次没有了任何约束,我打算从硬件选择开始,搭建第二台 x86 软路由。
- 标题: 从零开始打造一台全能软路由:Docker + 无线发射 + 双网口
- 作者: GT610
- 创建于 : 2025-07-12 17:40:18
- 更新于 : 2025-09-23 15:09:18
- 链接: https://gt-610.dpdns.org/2025/07/12/build-a-x86-router-from-scratch/
- 版权声明: 本文章采用 CC BY 4.0 进行许可。