1849 字
9 分钟

N150小主机搭建小型数据中心:PVE虚拟化+单线多拨+容器NewAPI

系统目标达成:经过数天的调试与优化,从PVE虚拟化环境到IStoreOS网关的多拨配置,再到fnOS上NewAPI的稳定部署,整个系统最终实现了预期的功能与性能目标。

缘起:为什么要折腾这套系统?#

此前使用旧笔记本运行Docker服务,但设备老化导致风扇噪音明显,功耗较高。为获得更稳定的运行环境与更低的长期运行成本,在双12期间配置了一台基于Intel N150平台的小主机。

系统目标

  1. 基础服务:NAS + Docker容器(24小时运行)
  2. 主路由功能:替代运营商提供的默认网关
  3. 全局代理分流:基于OpenClash
  4. 多模型API聚合:部署NewAPI服务

核心架构:基于PVE的虚拟化部署,实现资源隔离与功能模块化


硬件篇#

CPU: Intel N150
核心: 4核4线程
TDP: 6W
内存: 8GB DDR4
通道: 单通道
备注: 计划升级至16GB
存储:
系统盘: 256GB NVMe
网络:
WAN口: enp2s0 (直通IStoreOS)
LAN口: enp3s0 (内部交换)
规格: 双2.5GbE

该配置在性能与功耗间取得了较好的平衡,能够满足当前及可预见未来的应用需求。


PVE虚拟化:从零开始#

安装PVE#

PVE的安装过程遵循标准流程:下载官方ISO镜像、制作启动介质、引导安装。关键配置在于存储分区,建议将系统盘全部划归PVE管理,数据磁盘可在后续阶段挂载,以保持配置的灵活性。

创建虚拟机#

IStoreOS (网关)

类型: Linux 6.x - 2.6内核
CPU: 2核
内存: 1GB
硬盘: 8GB (精简配置)
网络:
- vmbr0 (WAN): 网卡直通给IStoreOS
- vmbr1 (LAN): 连内部交换机

fnOS (NAS)

类型: Linux 6.x - 2.6内核
CPU: 3核 (给Docker预留)
内存: 4GB (balloon动态调节)
硬盘: 64GB + 额外挂载SATA硬盘
网络: vmbr1 (LAN)

两个系统

IStoreOS:单线多拨配置与解决方案#

配置周期:约三天时间,期间进行了多次配置迭代与调试。

基础网络配置#

完成常规PPPoE拨号设置,配置LAN口IP为192.168.1.1,确保基础路由功能正常。

多拨配置过程#

第一阶段:插件安装与虚拟网卡配置#

需要安装两个核心插件:

  • macvlan – 创建虚拟网卡
  • mwan3 – 实现流量负载均衡
# 在IStoreOS后台操作路径
系统 → 软件包 → 更新软件包列表
安装相应包

创建虚拟网卡命令:

Terminal window
ip link add link enp2s0 name macvlan0 type macvlan mode bridge
ip link set macvlan0 up

两个系统

第二阶段:配置问题诊断与解决#

问题一:macvlan接口无法正常工作

  • 原因分析:当前内核版本存在macvlan驱动兼容性问题
  • 解决方案:改用VLAN子接口替代
Terminal window
ip link add link enp2s0 name enp2s0.10 type vlan id 10

问题二:mwan3负载均衡配置复杂

# 关键配置 /etc/config/mwan3
config member 'wan_m1'
option interface 'wan'
option weight '1'
option reliability '2' # reliability参数设置为2时连接最为稳定

问题三:代理分流与DNS泄露

  • 现象:开启OpenClash后部分网络请求未能通过代理(参见之前博客文章)
  • 原因分析:多拨配置后mwan3接管了虚拟网卡流量,DNS解析请求绕过透明代理机制
  • 解决方案:配置iptables例外规则
Terminal window
# 在IStoreOS中执行
iptables -t mangle -A mwan3_hook -p tcp --dport 23456 -j RETURN
iptables -t mangle -A mwan3_hook -p udp --dport 53 -j RETURN

最终可用配置#

网络配置#

/etc/config/network
config interface 'wan'
option proto 'pppoe'
option ifname 'enp2s0'
option username '你的账号'
option password '你的密码'
option dns '119.29.29.29 223.5.5.5'
config interface 'wan2'
option proto 'pppoe'
option ifname 'macvlan0' # 或者是你用的vlan子接口
option username '你的账号'
option password '你的密码'

OpenClash配置(局域网代理)#

# 给局域网设备开放代理
config rule
option dest_port '23456'
option src_ip '192.168.1.0/24'
option target 'REJECT'
# DNS防泄露
dns:
enable: true
nameserver:
- 119.29.29.29
fallback:
- tls://8.8.8.8:853
fallback-filter:
geoip: true

最终效果:物理带宽从100M提升至300M以上,视频流媒体与API调用响应时间显著改善。


fnOS:轻舟NAS部署#

网络正确配置后,fnOS部署过程相对顺利,主要包含以下步骤:

1. 网络配置确认#

确保fnOS虚拟机正确配置:

  • IP地址: 192.168.1.200 (静态)
  • 网关: 192.168.1.1 (指向IStoreOS)
  • DNS: 192.168.1.1 (IStoreOS处理DNS解析)

2. Docker环境配置#

由于fnOS自带Docker服务,无需额外配置镜像加速器。通过fnOS后台即可管理容器:

# 操作路径
fnOS后台 → 容器 → 设置
# 备注:由于OpenClash已配置代理,无需设置国内镜像加速

3. 目录结构准备#

Terminal window
# 创建基础目录结构
mkdir -p /volume1/docker/{newapi,postgres,backup}

整体配置流程较为简单,fnOS自带的Docker管理界面足够满足基础需求。


代理闭环的思考#

设计目标不仅是实现NewAPI的正常访问,更需要在安全性与性能之间建立平衡:

NewAPI的请求路径:
容器 → fnOS网卡 → vmbr1交换 → IStoreOS的Clash → 根据规则:
- OpenAI/Anthropic → 代理 → 国外
- 文心/千问 → 直连 → 国内
- 域名解析: 全走Clash的DNS

网络架构遵循功能分离原则,网关专注于路由与代理分流,NAS负责存储与容器服务,各组件职责明确。


备份策略#

系统部署完成后,需要建立灾难恢复机制,确保在故障情况下能够快速恢复。

# 在PVE Shell添加crontab,每周日凌晨执行
#!/bin/bash
/root/backup-pve.sh
DATE=$(date +%Y%m%d)
STORAGE="/mnt/backups/pve"
# 备份VM
qm backup 100 $STORAGE/istoreos-$DATE.vma.zst --mode snapshot
qm backup 101 $STORAGE/fnos-$DATE.vma.zst --mode snapshot
# 清理老备份(只保留最近3份)
find $STORAGE -name "*.vma.zst" -mtime +21 -delete

NAS上的重要数据,则通过rsync同步到外接硬盘。


监控与扩展#

系统稳定后,我发现还需要监控能力,又在fnOS上装了几个容器:

# 监控全家桶(可选)
services:
netdata:
image: netdata/netdata
ports: ["19999:19999"]
privileged: true
portainer:
image: portainer/portainer-ce
ports: ["9000:9000"]
volumes: ["/var/run/docker.sock:/var/run/docker.sock"]

避坑清单#

问题原因解决方案
PVE虚拟机卡启动网卡配置错误检查vmbr桥接配置
多拨掉线DNS污染导致连接不稳定清理DNS缓存,修改mwan3配置
Docker连不上DB容器网络与数据库不在同一subnet确认使用相同bridge network
OpenClash日志为空代理模式设置不当改为”规则模式”而非”全局模式”
NAS磁盘写入权限Docker映射目录权限问题指定用户ID或调整目录owner权限

最终成果#

  • N150小主机:功耗平均8W,全年不到60元电费
  • IStoreOS网关:稳定多拨6个会话,带宽翻倍
  • fnOS NAS:Docker服务稳定运行,NewAPI调用响应及时
  • 代理分流:国内应用不受影响,国外服务稳定加速

Next steps

  1. 接入媒体服务(Jellyfin)
  2. 加WireGuard异地访问
  3. 完善监控告警

如果你也在用N150或者PVE虚拟化,欢迎交流经验

该系统实现了预期的功能整合,在单台硬件设备上运行多项服务,在成本控制与功能完备性间取得了良好平衡。


: 本文涉及的命令与配置均在生产环境实际测试,使用相关命令与配置时,请结合自身网络环境进行调整与验证。

支持与分享

如果这篇文章对你有帮助,欢迎分享给更多人或赞助支持!

赞助
N150小主机搭建小型数据中心:PVE虚拟化+单线多拨+容器NewAPI
https://jielumoon.top/posts/my-system-setup/
作者
Jielumoon
发布于
2025-12-18
许可协议
CC BY-NC-SA 4.0
最后更新于 2025-12-18,距今已过 39 天

部分内容可能已过时

评论区

目录