Home Data Center Series: Renovating Retired Small Hosts with X-WRT: An Alternative Choice for Main Routers

1 Introduction

我的家庭数据中心的主路由一直用的是爱快,其最主要的优势是支持多拨功能(多拨的详细概念参见文章:),因为我家电信宽带最多支持3拨,所以能同时获取3个公网 IPv4 地址,这对于我这种有多线接入需求的用户来说,非常实用。加上爱快在多链路负载均衡和流量管理上的成熟能力,确实让我多年都觉得很稳定和可靠。

不过,随着运营商政策日益收紧,多拨功能未来被取消或者公网 IP 地址被大幅收紧的可能性越来越大。届时,爱快在网络层面的核心优势将大打折扣。虽然它内置了不少高级功能,但对于最常用的 Docker 支持却显得相当尴尬——不仅安装插件需要绑定爱快云账号,插件功能又非常有限,远不能满足我灵活扩展和定制化的需求。简单说,爱快的 Docker功能只能说”不是没有”,实用性上来说就差得远了(虚拟机功能也类似)。

基于这些原因,我开始考虑有没有可能找到一套替代方案,能在未来IPv4公网地址被回收或者多重拨号被限制时,在保证稳定和开箱即用的基础上,能够同时拥有良好的 Docker 支持以及丰富的软件生态。恰巧前段时间入手了一台搭载 Intel N150 处理器、带 6 个千兆网口的迷你 x86 主机,用来升级现有的爱快主路由(毕竟原来的 J2900 四口机已经捉襟见肘,1 个 LAN 口和 3 个 WAN 口已经不够用了)。

那么换下来的J2900如何利旧呢?考虑到这台硬件的性能和接口优势,我想到了 X-WRT 这个项目,作为一个基于 OpenWrt 的定制系统,理论上在路由稳定性、插件丰富度和容器支持上都有潜力成为理想的替代方案。接下来我就基于这台换下来主机,深入探索 X-WRT 的安装与使用,看看能否真正实现“稳定+灵活+丰富”的主路由目标。

image.png

2 从 OpenWrt 到 X-WRT:更适合主路由的选择

关于给这台退役的 J2900 四口小主机刷什么系统,其实我并没有太多纠结,基本可以确定还是 OpenWrt 这一派,只不过在原版 OpenWrt 和它的魔改版 X-WRT 之间,我认真对比了一番,最后选了后者。

简单说一下这两者的关系:X-WRT 是基于 OpenWrt 做的深度二次开发版本,它继承了 OpenWrt 的底层架构和驱动兼容性,但在 Web 界面、默认功能、插件集成和用户体验上做了非常多的增强优化。你可以把原版 OpenWrt 看作是“极简基础版”——非常灵活、但什么都得靠你手动配置;而 X-WRT 更像是“增强开箱版”——常用功能都帮你配好了,上电就能用。

如果说 OpenWrt 是“留白给高手折腾”,那 X-WRT 更像是“替用户预设了八成场景”。它的目标用户非常明确:希望设备稳定运行、能直接通过网页后台完成配置、尽量少折腾命令行的主流家庭用户。所以它在稳定性和易用性上做了非常多的妥协与优化:界面美化、插件预装、驱动适配都相对成熟,尤其适合像主路由这样的“基础但关键”角色。

当然,这种设计理念也意味着它对某些高阶玩法有所取舍。比如:X-WRT 默认没有集成科学上网相关功能,也不再使用 opkg 包管理器。虽然新版已切换至 apk 系统,像 sing-box、v2ray等主流科学组件仍可进行安装,但总体来说可选软件范围比较有限,不以科学上网为主打功能。这也反映了它的使用思路:主路由注重稳定,科学服务更建议交由旁路由承担——毕竟一旦科学配置出错,很可能会影响整个内网的正常访问。

而对于我这台准备承担主路由职责的小主机来说,我真正看重的是三个关键词:稳定、功能完备、省心部署。我不希望一开机连网口都要手动调、软件源要自己填、Docker 环境得自己搭。X-WRT 给我的感觉就是“这些都帮你准备好了”。

尤其是在 LuCI 后台里,网络管理、DHCP 分配、防火墙规则、端口转发这些主路由的核心功能都有明确的 UI 页面,几乎不需要进终端敲命令;而诸如 Aria2、KSmbd、DDNS、UPnP、Docker 等常见插件,也都已经内置在全功能版镜像里,点一点就能用。

所以最终,我选择了 X-WRT 的完整版镜像。刷完后几乎全程都在 Web 后台完成配置,体验甚至比之前的 AC86U 还舒服。对我来说,X-WRT 不一定是“最轻的”,但绝对是目前“最适合直接拿来做主路由”的 OpenWrt 系列分支之一.

3 制作X-WRT引导存储

3.1 Overview

与我们平常使用 ISO 镜像制作启动盘、引导安装系统的方式有所不同,X-WRT是通过写盘软件(如Etcher、dd)将img写进引导存储,其实就是将X-WRT的系统完全克隆到引导存储上,之后只需要将引导存储插到目标设备的USB接口并设置为从引导存储启动即可正常运行X-WRT。

3.2 下载镜像

x-wrt官方镜像下载地址为:https://downloads.x-wrt.com/rom/。如果你要安装的目标设备主板是 传统 BIOS 启动(MBR)的则选择”x-wrt-25.04-b202506071033-x86-64-generic-ext4-combined.img.gz”;如果目标设备主板强制使用 UEFI 启动,或者你明确想用 GPT 分区表(包含 EFI 分区,适合较新的 UEFI 主板),则选择”x-wrt-25.04-b202506071033-x86-64-generic-ext4-combined-efi.img.gz”。而对于R2S Plus这种arm架构的,选择”x-wrt-25.04-b202506151427-armsr-armv8-generic-ext4-combined-efi.img.gz”:

image.png

注:X-WRT 根据系统体积和功能配置的不同,分为精简版和完整版。其中最显著的区别在于是否内置 Docker 支持。完整版预装 docker-ce 并集成 LuCI 界面操作面板,适合小型服务器、x86 主机等具备一定存储与运算能力的设备。而精简版则更适合 R2S、MT7621 等轻量设备,仅保留基本路由和管理功能,未包含 Docker。

由于我要安装的是j2900 cpu的机器,所以选择的是适合x86架构UEFI启动的完整版”x-wrt-docker-25.04-b202506151427-x86-64-generic-ext4-combined-efi.img.gz”。

3.3 解压镜像

CLI界面下使用如下命令解压缩镜像(GUI界面的解压缩工具也行):

gzip -d x-wrt-docker-25.04-b202506151427-x86-64-generic-ext4-combined-efi.img.gz

得到”x-wrt-docker-25.04-b202506151427-x86-64-generic-ext4-combined-efi.img”文件。

3.4 使用Etcher将img写入引导存储(TF卡或者U盘)

按照自己的环境在Etcher github主页下载对应的安装包进行安装(https://github.com/balena-io/etcher/releases):

image.png

安装后运行,按照如下步骤操作即可:
image.png

image.png

image.png

image.png

image.png

4 初始化x-wrt(x86设备采用引导存储运行)

使用引导存储正常启动X-WRT之后,将控制台终端网口直接连接x-wrt的eth0,eth0接口启用了dhcp服务,终端直接连上即可获得地址,然后直接访问http://192.168.15.1即可(直接连到eth0就可以通过DHCP自动获得地址,至于是不是192.168.15.1就不确定了,谁知道哪个版本又想改了,所以最终还是以获得地址的默认网关地址为准),web GUI的默认用户名及密码均是”admin”:

image.png

登录进入GUI之后,可以先修改界面语言:
image.png

image.png

然后修改管理员密码:
image.png

image.png

启用SSH访问:
image.png

启用了SSH服务,以后有需要就可以直接通过SSH进入CLI界面。

5 将X-WRT从U盘克隆进本地存储(X86 随便搞,ARM 慎重搞)


很多人一提到“把系统克隆进本地硬盘”,可能会下意识认为无非就是一个 dd 命令的事儿——但这其实只适用于 X86 设备,对于大多数 ARM 路由器或开发板来说,事情往往没有这么简单。

原因在于:X86 平台有统一的 BIOS/UEFI 启动规范、本地存储接口标准化,系统引导几乎没有适配问题,所以你甚至可以从一块 U 盘上直接克隆整个 X-WRT 系统到硬盘里,插电就能跑,非常“傻瓜”。

而 ARM 平台(尤其是像 NanoPi R2S Plus 这类设备)则不同:它们的启动机制往往依赖特定的 bootloader、设备树、分区布局,有时候还要求系统从 eMMC/TF 的特定偏移地址启动,哪怕你成功 dd 进去,也可能根本无法引导。甚至同一个系列设备之间(比如 R2S 和 R2S Plus),也可能因为硬件差异导致固件不通用,踩坑概率远高于 X86。

因此,这一节我主要以 X86 设备为例,说明如何从 U 盘启动的 X-WRT 克隆到本地硬盘,这是一种稳定、简单、推荐的做法;如果你用的是 ARM 设备,建议先参考厂商文档或社区经验,不要轻信“直接 dd 即可”这种说法,很可能你会和我一样,被无情地教做人。


对于已经使用引导存储运行了X-WRT的设备来说,如果本身有本地存储(比如闲置主机的本地硬盘),则可以使用”dd”命令将U盘中的X-WRT系统直接克隆到本地存储上,这样就可以摆脱”使用USB设备(或者TF卡)运行X-WRT”这种一听就不伦不类的使用场景了。

1、在使用U盘正常引导,并在web UI中开启了SSH服务之后,就可以使用SSH登录X-WRT,使用默认的账号密码”root/admin”即可登录:

image.png

2、确认本地磁盘的名称和路径:

lsblk

一般情况下,对于X-WRT来说,sda是本地磁盘,sdb是U盘,以我的x86主机为例:

image.png

3、然后运行dd命令克隆X-WRT的系统到本地存储

将U盘上的x-wrt系统克隆到本地存储(if指定输入源,of指定输出目标,bs指定读写速度,U盘好的可以设置为4M),在X-WRT中运行如下命令:

dd if=/dev/sdb of=/dev/sda bs=4M

image.png

克隆完成:
image.png

最后一步,最重要的是命令:

sync

该命令的作用是:将内存中的缓存数据强制写入磁盘(或其他存储设备).


为什么要运行这条命令呢?因为运行像 dd、cp、tar 等写入大量数据的命令时,Linux 内核通常不会立刻把数据写入硬盘,而是先放在内存的缓存中(为了提高性能),这些数据稍后会由内核异步地慢慢刷到硬盘上。但如果你马上重启、断电或拔出 U 盘,这些“还没写完”的数据可能就会丢失,造成:文件系统损坏、克隆失败、分区结构不完整、引导不了系统,开机黑屏等。加上 sync,系统会等数据全部刷入 /dev/sda 才返回终端提示,确保你写入的数据是完整的。


等待克隆完成,然后重启设备并拔掉U盘,从本地硬盘引导,已经可以正常进入x-wrt,再运行lsblk命令可以看到sda和之前的sdb的内容完全一致:

image.png

注1:如果是GUN dd的新版本,是支持进度条参数”status=progress”的,但是对于x-wrt来说,是采用BusyBox dd,不支持这个参数,所以只能硬着头皮等。

注2:如果有多余的U盘,其实可以找一个新的U盘(FAT 32格式最佳,NTFS格式也行),将之前的img文件:”x-wrt-docker-25.04-b202506151427-x86-64-generic-ext4-combined-efi.img”直接拷贝到U盘根目录,然后插上小主机后mount到”/mnt”目录下,比如”/mnt/d”,然后使用dd命令:

dd if=/mnt/d/x-wrt-docker-25.04-b202506151427-x86-64-generic-ext4-combined-efi.img of=/dev/sda bs=4M

这样就不需要把引导U盘”整盘克隆”到sda,而只是把镜像文件写入,这样只需要不到1分钟就行了。

6 网络配置

6.1 Overview

在 X-WRT 的“网络”标签下,用户可以集中管理与路由器相关的各类网络功能,包括接口分配、桥接设置、DHCP 服务、静态路由、防火墙区域划分、VLAN 配置等。这个界面基本涵盖了家庭或中小型网络环境中所需的大部分网络场景,既保留了 OpenWrt 的灵活性,又通过图形界面简化了配置过程。由于功能太多,很多的功能一般朋友也用不上,我就简单说几个我认为重要的功能。

6.2 接口

image.png

在默认配置下,X-WRT 系统通常会预置至少三个基础网络接口:lan、wan 和 wan6。

其中,lan 接口对应的是一个名为 br-lan 的网桥设备,它是一个二层桥接接口,用于将多个物理网口(如 eth0、eth2、eth3 等)聚合成一个统一的广播域,以实现局域网内部的互联互通。默认情况下,br-lan 通常只包含 eth0,即只有一个物理口处于 LAN 区域,用于提供管理访问(如 Web UI 或 SSH)。

而 wan 和 wan6 接口分别用于 IPv4 和 IPv6 的外网连接,默认绑定在 eth1 接口上,系统会将其配置为 DHCP 客户端,以自动获取公网地址。这种口分配策略在多数双口设备(如工控机、软路由等)上适用,eth0 用于内网,eth1 用于外网。

此外,对于某些带有 USB 网卡接口的设备,或使用了特定定制版镜像的情况,X-WRT 还可能预设额外的 usbwan 和 usbwan6 接口,用于兼容外接 USB 网卡、4G/5G 上网棒等场景。这些接口通常绑定在 usb0(或类似名称)上,即便用户未实际连接 USB 网卡,系统也可能保留这两个逻辑接口,作为设备适配的默认配置之一。

我x86主机上的默认接口如下:

image.png

点击上图中的编辑即可为各个接口配置协议、IP地址等内容。

6.3 DHCP/DNS

X-WRT 提供的 DHCP 和 DNS 服务器功能其实非常强大,支持自定义地址池、静态租约、DNS 转发规则、内网域名解析、广告过滤等一系列进阶特性,适合对网络有较高控制需求的用户深入配置。但对于大多数普通用户来说,系统默认设置已经足以应对日常使用,稳定可靠,几乎不需要额外调整。:

image.png

6.4 防火墙

这部分内容,其实是 iptables 规则的具象化结果,要讲清楚涉及底层的包处理逻辑和转发链条,确实比较复杂。不过幸运的是,对于绝大多数朋友而言,X-WRT 的默认防火墙配置已经覆盖了家庭或中小型网络的常见使用场景,无需额外改动就能实现基本的内网隔离、NAT 出口和一定程度的安全防护。只有在需要做旁路由透明代理、特殊端口映射或复杂 VLAN 管理时,才有必要深入研究这部分配置。

image.png

注:对于最常见的旁路由透明代理场景(即主路由负责拨号、旁路由仅作为一个流量中转设备)来说,**只勾选「区域设置」中 LAN → WAN 的”IP 动态伪装”通常就足够了。


IP 动态伪装(Masquerading),其实就是我们常说的 NAT(网络地址转换)功能在 iptables 中的具体实现方式:它的作用是在数据包从内网(如 LAN)转发到外网(如 WAN)时,将源 IP 地址伪装为路由器的出口 IP,从而实现多台设备共享一个公网地址访问互联网的能力。

而与 NAT 行为相关的,还有两个重要的系统级参数,它们位于 X-WRT 的“系统”-“高级选项”页面中:

  • 全锥形 NAT(Full Cone NAT):也被称为 NAT 类型 1,意味着只要一个内网主机对外发起过连接,之后任何来自该外部地址和端口的响应包都可以被成功转发回来。这种模式对 P2P、游戏、远程连接等应用非常友好,连接建立更容易,穿透性更强,但相对开放,安全性略低。
  • 启用转发加速(NAT Flow):这个功能基于内核的 fastpath/flowoffload 加速机制,可以在数据包首次匹配规则后,加快后续相同流量的转发处理效率,显著提升 NAT 性能,降低 CPU 占用,尤其适合大流量场景下的软路由使用。

简单来说:

  • Masquerading 是 NAT 的基本操作核心;
  • 全锥形 NAT 是一种“放宽策略”的 NAT 类型,对外更开放;
  • NAT Flow 是一种性能优化加速机制,对高负载更友好。

这三者结合使用,可以让你的旁路由或主路由在功能性和性能上达到一个更均衡的状态。如果只是普通家庭使用,可以选择开启全部,既提升体验,又保持良好的兼容性。

image.png

image.png


6.5 其他功能

剩下的”网站过滤”、”QoS”、”多拨”什么的,我就不说了,一般人也用不上,而且其实也不复杂,需要的朋友自己研究一下即可。

不过,关于多拨(严格上来说,应该是多链路管理功能),我多说一嘴,和爱快的多链路管理功能比起来,其他的方案真是一个能打的都没~,爱快免费版完全吊打所有,包括各种企业级产品的相关功能:

image.png

7 服务

在前言部分我提到过,相比原生 OpenWrt,X-WRT 的一大特色就是开箱即用的“增强型固件”理念。不仅系统默认启用 Web 界面 luci,还内置了大量经过打磨、适配良好的实用工具与服务组件,覆盖从下载、共享、打印与代理等多个典型家庭/中小网络需求场景:

image.png

下面简单罗列几个代表性组件:

1、Aria2 下载工具

被誉为“嵌入式神器”的多线程下载工具,支持 HTTP、FTP、BitTorrent、磁力链等主流协议。X-WRT 通常还会搭配 web-aria2-ui,提供可视化管理界面,让你在浏览器中便可轻松管理下载任务,构建轻量离线下载中心:

image.png

2、动态DNS

包括阿里云、腾讯云(Dnspod)、Cloudflare、Namecheap、DuckDNS 等主流动态 DNS 服务平台,全部通过 Web 页面可配置,无需繁琐手动安装或编写脚本,适合公网 IP 用户搭建远程访问能力:

image.png

image.png

3、p910nd 打印服务器

一款经典 USB 打印共享服务,尤其适用于老旧但仍可用的打印机,X-WRT 通过内建支持,让这些传统设备在现代网络中焕发“第二春”:

image.png

image.png

4、Docker CE 容器

在完整版 X-WRT 中预装的 Docker CE(Community Edition)容器引擎,为高级用户解锁了嵌入式系统的更多可能性。无论是部署内网服务(如 Home Assistant、AdGuard Home、Frp 等),还是运行特定工具镜像(如 Aria2、qBittorrent、OpenWrt 辅助插件等),都可通过熟悉的 Docker 命令快速启动。X-WRT 还集成了 luci-app-dockerman,提供可视化的容器管理界面,适合初学者尝试容器化部署,也满足进阶用户的自动化需求,让路由器成为真正意义上的轻量服务平台:

image.png

5、网络共享(轻量 Samba 实现)

由韩国三星贡献的 SMB 实现,性能优化明显,资源占用远低于传统 Samba,非常适合存储性能有限的路由器或嵌入式设备,常用于 U 盘/NAS 文件共享场景:

image.png

6、natcap 智能透明代理引擎

是近年来 X-WRT 中颇具特色的一个核心组件,它基于连接捕获(Connection Capture)机制,提供智能分流能力,能实现按协议、按目标域名/IP 的精准代理或直连操作,适用于旁路由等科学上网场景,且支持多种转发后端(如 Clash、Brook、Xray 等),配置灵活但对系统资源友好:

image.png

7、tinyproxy 轻量级正向代理服务

占用内存极小,仅用于 HTTP 正向代理用途,适合内网设备临时代理或做为本地透明网关转发模块:

image.png

8、UPnP IGD / PCP 协议支持

X-WRT 支持常见的自动端口映射协议,包括 UPnP IGD(Internet Gateway Device)和更现代的 PCP(Port Control Protocol),可以为内网设备(如 NAS、游戏主机、下载客户端等)动态开放公网端口,免去手动配置端口转发的麻烦。尤其在家庭网络环境中,这种“即插即用”的自动穿透能力显著提升了设备连通性与可用性。X-WRT 提供了 luci-app-upnp 页面,用户可实时查看当前哪些设备和应用正在使用端口映射,并支持自定义策略,避免滥用:

image.png

注:如果不需要”Docker CE 容器”功能,就不需要装完整版的X-WRT,只装精简版即可。

除了上述组件之外,X-WRT 通常还会根据固件类型内建:

  • 常用诊断工具(如 iperf3, tcpdump, ethtool 等);
  • 常用 Web 管理插件(如 流量统计、端口转发、ARP/邻居表展示);
  • 针对中国大陆网络环境的定制优化(如国内外自动分流、NAT 加速、旁路透明转发预设)等。

从“下载/共享”到“打印/远程访问”,再到“透明代理”,X-WRT 覆盖了多数家庭和中小型办公网络环境的核心需求。它不只是一个路由系统,更像是一个定制化的“小型网络操作系统”。

8 软件包

除了已经内置的这些服务,身为openwrt的魔改版,当然依然可以通过”系统”-“软件包”安装需要的软件:

image.png

image.png

常用的软件还是不缺的:
image.png

image.png

image.png

其他我就不一一介绍了,OpenWrt系的基本都是大同小异。

9. Afterword

其实,OpenWrt 的魔改版本非常多,X-WRT 只是其中相对主流、兼顾易用性与稳定性的一个代表。除此之外,还有很多同样优秀、但各有特色的分支版本,比如:

  • Lede:早期非常活跃的魔改版本,后来与 OpenWrt 合并,但仍有不少爱好者维护类似风格的定制固件;
  • ImmortalWrt:基于 OpenWrt 最新代码的衍生版本,社区活跃,默认集成了更多插件和架构支持,尤其在科学和多拨方面很受欢迎;
  • OpenWrt-Rockchip / R66S-Plus-OpenWrt 等社区固件:更偏向硬件适配和性能优化,常见于 R4S、R5S、x86 等设备;
  • 高集成科学固件(如 F大的固件、P3TERX 编译版):主打开箱即用的科学体验,常集成 sing-box、Clash、Xray 等,适合做旁路或科学中继设备。

总的来说,每一种 OpenWrt 魔改固件都有它自己的目标用户和设计理念:你没必要非得拘泥于 X-WRT,关键是看你想要在哪些设备上用、需要哪些功能、愿意花多少精力去配置和维护。就像我这次选择 X-WRT,是因为它能让我快速部署一个稳定的主路由系统,但如果你对科学、自动化、极致性能有更高追求,那可能其他定制固件才是你真正需要的答案。

建议大家在选型之前,先明确自己的实际需求,再有针对性地去找最适合自己的那一个版本——这个过程虽然可能要多花些时间,但会让你少走很多弯路。

Share this article
The content of the blog is original. Please indicate the source when reprinting! For more blog articles, you can go toSite MapUnderstand. The RSS address of the blog is:https://blog.tangwudi.com/feed, welcome to subscribe; if necessary, you can joinTelegram GroupDiscuss the problem together.

Comments

  1. Linux Chrome 135.0.0.0
    1 week ago
    2025-6-30 10:40:35

    我这边能多播但速度并不会叠加,IP也不给公网,属于“能多播,但多播了没意义”

    • Owner
      Autumn Wind on Weishui River
      Macintosh Chrome 138.0.0.0
      1 week ago
      2025-6-30 11:35:10

      没公网IP的多拨的确属于自娱自乐~。

Send Comment Edit Comment


				
|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠(ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ°Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
Emoticons
Emoji
Little Dinosaur
flower!
Previous
Next
       
en_US