无盘 mini PC 教程

本教程说明如何将小型 x86 mini PC 在不安装 OS 至内置磁盘的情况下配置为路由器。 从 routerd Live ISO 启动,将配置保存至 USB。 日志暂存于 RAM,每日一次以压缩归档的形式写出至 USB。
准备物品
- 具备两个以上网络接口的 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/latest/download/routerd-live.iso
curl -LO https://github.com/imksoo/routerd/releases/latest/download/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。

ISO 同时启用视频控制台与串行控制台。
在 Proxmox VE 中,交互式向导通常通过 qm terminal 比较容易阅读。
VGA 的画面截图作为启动轨迹使用,实际的输入与结果请通过下方的
串行控制台日志确认。
3. 执行向导
以 root 登录后,Live ISO 会启动初始配置向导。
串行控制台会显示如下的 Live ISO 说明与向导开始画面。
Welcome to Ubuntu
Kernel 6.8.0-xx-generic on x86_64 (/dev/ttyS0)
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 持久化
以下为实机验证时的串行控制台日志。
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
确认状态。
routerctl status
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 会执行以下步骤。
- 依已记录设备、
routerd.usb=、ROUTERD标签的顺序搜索 USB 设备。 - 将 USB 设备挂载至
/media/routerd-usb。 - 还原
/media/routerd-usb/routerd/router.yaml。 - 以 tmpfs 准备
/run/routerd/logs。 - 应用路由器配置。
- 启动 Live routerd 守护进程。
登录后确认。
routerctl 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 设备前,请先执行 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 status --json
ip addr
在 Proxmox VE 进行测试时,请确认客户端与 routerd 的 LAN NIC 连接至同一个隔离 bridge。