跳到主要内容

无盘 mini PC 教程

从 live ISO boot、USB persistence、routerd wizard configuration 到 validation 的 diskless mini PC tutorial flow

本教程说明如何将小型 x86 mini PC 在不安装 OS 至内置磁盘的情况下配置为路由器。 从 routerd Live ISO 启动,将配置保存至 USB。 日志暂存于 RAM,每日一次以压缩归档的形式写出至 USB。

无盘 mini PC 流程

历史截图与控制台示例

当前 ISO 基于 Ubuntu,scripts/build-live-iso.sh 默认使用 noble。 以下截图和 v20260510.1811 日志保留自旧版 Alpine 教程,用于说明流程, 不是当前 Ubuntu 启动画面、内核或接口名的验证证据。请在实际镜像上运行 ip -br link,并依当前向导提示操作。当前安装流程见安装与升级。

准备物品​

  • 具备两个以上网络接口的 mini PC
  • 用于 routerd 持久化的 USB 随身盘
  • 最新的 routerd-live.iso
  • 控制台访问
  • 可使用 DHCPv4 或静态地址的 WAN
  • LAN 交换机或隔离的测试 bridge

1. 准备 USB 随身盘​

创建一个分区,并以 Live ISO 可挂载的文件系统格式化。 默认建议使用 ext4。 一般可移动介质也可使用 vfat 或 exfat。 请将标签设为 ROUTERD,以便 ISO 自动检测。 FAT32 通常在 blkid 中显示为 vfat。 若为 routerd 专用的 USB 随身盘,ext4 最易操作。

以下为在 Linux 终端的操作示例。

sudo mkfs.ext4 -L ROUTERD /dev/sdX1

请将 /dev/sdX1 替换为实际的 USB 分区。 请注意勿误格式化其他设备。

2. 启动至 Live ISO​

从固定 URL 获取 ISO。

curl -LO https://github.com/imksoo/routerd/releases/download/v20260914.0729/routerd-live.iso
curl -LO https://github.com/imksoo/routerd/releases/download/v20260914.0729/routerd-live.iso.sha256
sha256sum -c routerd-live.iso.sha256

从 ISO 启动 mini PC。 同一镜像文件支持视频控制台与串行控制台。

以下为在 Proxmox VE 的操作示例。

qm create 200 \
--name routerd-live-demo \
--memory 1536 \
--cores 2 \
--ostype l26 \
--serial0 socket \
--vga std \
--boot order=ide2 \
--ide2 local:iso/routerd-live.iso,media=cdrom \
--net0 virtio,bridge=vmbr0 \
--net1 virtio,bridge=vmbr490
qm start 200
qm terminal 200

DHCP 或 RA 的初期测试请使用隔离的 LAN bridge。

routerd live boot menu

ISO 同时启用视频控制台与串行控制台。 在 Proxmox VE 中,交互式向导通常通过 qm terminal 比较容易阅读。 VGA 的画面截图作为启动轨迹使用,实际的输入与结果请通过下方的 串行控制台日志确认。

旧版 Live ISO 启动截图

3. 执行向导​

以 root 登录后,Live ISO 会启动初始配置向导。

routerd live login and message of the day

以下为旧版 Alpine 教程保留的串行控制台示例。

localhost login: root
routerd live v20260510.1811

Run the setup wizard:
/usr/share/routerd/install.sh configure

Starting routerd setup wizard. Press Ctrl+C to skip.
routerd initial configuration wizard

Available interfaces:
- lo
- eth0
- eth1

向导会确认以下项目。

  • 路由器名称
  • WAN 接口
  • WAN IPv4 模式
  • LAN 接口
  • LAN 地址
  • DHCPv4、DNS、NTP、RA、防火墙、NAT44
  • 管理路径的放置位置
  • USB 持久化

WAN setup in the routerd live wizard

LAN setup in the routerd live wizard

以下为实机验证时的串行控制台日志。

Router name [routerd-router]: routerd-live-router-test
WAN interface: eth0
WAN IPv4 mode (dhcp/static) [dhcp]: dhcp
Default DNS upstreams when DHCP DNS is unavailable [1.1.1.1]: 1.1.1.1
LAN interface: eth1
LAN address/CIDR [192.168.10.1/24]: 192.168.99.1/24
LAN client CIDR [192.168.99.0/24]: 192.168.99.0/24
Enable DHCPv4 server? (yes/no) [yes]: yes
DHCPv4 pool start [192.168.99.100]:
DHCPv4 pool end [192.168.99.200]:
Enable DHCPv6 stateless service? (yes/no) [no]: no
Enable IPv6 RA? (yes/no) [no]: no
Enable DNS resolver? (yes/no) [yes]: yes
Enable NTP server? (yes/no) [yes]: yes
Enable 3-role firewall? (yes/no) [yes]: yes
Enable NAT44 from LAN to WAN? (yes/no) [yes]: yes
Management placement (separate/lan) [lan]: lan
Save config to USB for diskless persistence? (yes/no) [no]: no
generated candidate config: /usr/local/etc/routerd/router.yaml.configure
Install this config as router.yaml? (yes/no) [no]: yes

询问 USB 持久化时,选择 yes 并指定 USB 分区。 分区若有 ROUTERD 标签,会自动显示为候选项目。

非短时间的测试时,请启用每日一次的 USB 写出任务。 默认日志缓冲为放置于 /run/routerd/logs 的 100 MiB。

Live 辅助程序使用 blkid 判断 ext4、vfat、exfat。 USB 持久化为减少对 USB 的写入,默认以 async,noatime 挂载。 仅在特定测试需要同步写入时,才在内核命令行加入 routerd.usb_mount=sync。

选定的 USB 分区挂载至 /media/routerd-usb。 保存的配置文件路径为 /media/routerd-usb/routerd/router.yaml, 而非 /mnt/routerd/router.yaml。

4. 确认初次应用​

确认完成后,向导会写出以下文件。

/usr/local/etc/routerd/router.yaml

之后执行以下命令。

routerctl validate -f /usr/local/etc/routerd/router.yaml --replace
routerctl plan -f /usr/local/etc/routerd/router.yaml --replace
routerctl apply -f /usr/local/etc/routerd/router.yaml --replace

Wizard summary and first apply

确认状态。

routerctl get status

routerctl get status after first apply

phase 变为 Healthy 即表示成功。 串行控制台日志中应出现如下状态。

{
"apiVersion": "control.routerd.net/v1alpha1",
"kind": "Status",
"status": {
"phase": "Healthy",
"generation": 1,
"resourceCount": 14
}
}

5. 测试 LAN 客户端​

将客户端连接至 LAN 接口或测试 bridge。

客户端应收到以下内容。

  • 来自 DHCPv4 pool 的 IPv4 地址
  • 指向 routerd 的默认路由
  • 指向 routerd 的 DNS 服务器
  • 若已启用,指向 routerd 的 NTP 服务器

基本确认如下。

dig @192.168.10.1 www.google.com A +short
curl -4 https://www.google.com/generate_204

若更改了 LAN prefix,请对应调整地址。

PVE 验证中,将临时的 network namespace 连接至隔离的 LAN bridge。 客户端从 routerd 获取租约,并通过 routerd 的 NAT44 与外部通信。

inet 192.168.99.186/24
default via 192.168.99.1 dev veth-rtest

dig @192.168.99.1 www.google.com A +short
142.251.156.119
142.251.150.119
142.251.151.119
...

curl -4 https://www.google.com/generate_204
http_code=204 remote_ip=142.251.156.119 time_total=0.024397

curl http://192.168.99.1:8080/
http_code=200 remote_ip=192.168.99.1 time_total=0.000537

6. 重新启动确认持久化​

保持 USB 随身盘连接,重新启动 mini PC。

启动时,Live ISO 会执行以下步骤。

  1. 依已记录设备、routerd.usb=、ROUTERD 标签的顺序搜索 USB 设备。
  2. 将 USB 设备挂载至 /media/routerd-usb。
  3. 还原 /media/routerd-usb/routerd/router.yaml。
  4. 以 tmpfs 准备 /run/routerd/logs。
  5. 应用路由器配置。
  6. 启动 Live routerd 守护进程。

登录后确认。

routerctl get status

不重新执行向导即可收敛则表示成功。 若配置未还原,且 /usr/local/etc/routerd/router.yaml 也不存在, 则会启动配置向导。

7. 日志持久化的机制​

日志首先写入 RAM。

/run/routerd/logs

每日写出任务会将以下内容复制至 USB。

  • 当前的 router.yaml
  • routerd 的状态快照
  • 压缩日志归档

这样可避免持续写入 USB 闪存。 超过 tmpfs 上限时,从最旧的文件开始删除。

手动写出时,执行以下命令。

/usr/share/routerd/live-persistence.sh flush

USB persistence flush

实际拔除 USB 设备前,请先执行 flush 与 unmount。

/usr/share/routerd/live-persistence.sh flush
/usr/share/routerd/live-persistence.sh umount

未 unmount 即拔除时,routerd 仍会继续在 RAM 上运行。 系统会输出警告,新的日志在 USB 恢复前暂存于 tmpfs。

故障排查​

USB 随身盘未出现在候选清单​

从 shell 确认分区。

blkid
lsblk -f

若有需要,通过内核参数明确指定。

routerd.usb=/dev/sdb1

重新启动后向导再次出现​

ISO 未能找到已保存的配置。 挂载 USB 设备后确认。

mount /dev/sdX1 /media/routerd-usb
ls -l /media/routerd-usb/routerd/router.yaml

重新启动后没有日志​

日志暂存于 RAM。 每日写出任务或手动 flush 执行后,才会保留于 USB。

LAN 客户端未获取地址​

确认向导中选择的 LAN 接口。

routerctl get status -o json
ip addr

在 Proxmox VE 进行测试时,请确认客户端与 routerd 的 LAN NIC 连接至同一个隔离 bridge。