# 单网口 PVE 搭建 5G 软路由:实现双网络并行隔离
> 在只有单网口的 PVE 宿主机上,通过 OpenWrt 单臂路由 + B310 5G CPE,搭建一套与家庭宽带完全隔离的 5G 实验网络。
---
## 一、项目背景
作为一名通信相关专业的学生,我一直想搭建一个独立的网络实验环境来测试 5G 网络下的各种应用场景。但家里只有一台**单网口的 PVE 主机**,而且不能影响家里原有的宽带网络(NAS、博客、家人的设备都要正常运行)。
这就引出了两个核心问题:
1. **单网口怎么做软路由?** 传统软路由至少需要两个物理网口(WAN + LAN)。
2. **如何做到双网络隔离?** 原有宽带和新增 5G 网络不能互相干扰。
最终,我选择了 **OpenWrt 单臂路由** 方案,成功在 PVE 上部署了一套基于 5G CPE 的独立网络。
---
## 二、网络环境
| 设备 | 型号/系统 | 说明 |
|------|-----------|------|
| PVE 宿主机 | 单网口物理机 | 运行所有虚拟机 |
| 5G CPE | B310 | 5G 信号转有线,桥接模式 |
| 软路由 VM | OpenWrt | VMID 103,单臂路由 |
| NAS VM | 飞牛 fnOS | 原有业务,不能受影响 |
| 博客 VM | Halo | 原有业务,不能受影响 |
| 测试 VM | Ubuntu | 用于验证 5G 网络连通性 |
---
## 三、核心思路:单臂路由 + 双网段隔离
### 3.1 单臂路由(Router-on-a-Stick)
传统路由需要两张网卡:一张接外网(WAN),一张接内网(LAN)。但在 PVE 单网口环境下,我让所有流量都走**同一块虚拟网卡 eth0**,在 OpenWrt 内部通过 **IP 地址 + 路由表** 区分 WAN 和 LAN 流量。
### 3.2 网段隔离
| 网络 | 网段 | 网关 | 用途 |
|------|------|------|------|
| 原有宽带 | `192.168.1.0/24` | `192.168.1.1`(光猫)| 家里现有设备 |
| 5G WAN | `192.168.8.0/24` | `192.168.8.1`(B310)| OpenWrt 接 5G |
| 5G LAN | `192.168.3.0/24` | `192.168.3.1`(OpenWrt)| 项目实验设备 |
两套网络网段不同,天然隔离。即使接在同一个物理交换机上,只要网关设置正确,流量就不会走错路。
---
## 四、物理拓扑
```
[5G 基站]
│
║ 无线
▼
[B310]
│
│ 网线
▼
[光猫] ───────────► [交换机] ◄──────┐
│ │
│ │
网线│ │
▼ │
[PVE 主机] │
│ │
┌──┴──┐ │
│vmbr0│─────────┘
└──┬──┘
│
┌──────────────┼──────────────┐
│ │ │
▼ ▼ ▼
┌─────────┐ ┌─────────┐ ┌─────────┐
│OpenWrt │ │ NAS │ │ 博客 │
│ VM │ │ VM │ │ VM │
│WAN:8.2 │ │(光猫网) │ │(光猫网) │
│LAN:3.1 │ │1.x │ │1.x │
└────┬────┘ └─────────┘ └─────────┘
│
▼
[项目/测试 VM]
(192.168.3.x)
(走 B310 5G 出口)
```
**线路说明**:
- 光猫和 B310 各出一条网线进交换机
- PVE 主机只出**一根网线**接交换机
- 交换机完成二层汇聚,所有流量通过这一根网线进入 PVE
---
## 五、OpenWrt 配置
### 5.1 网络接口配置
```bash
# /etc/config/network
config interface 'wan'
option device 'eth0'
option proto 'static'
option ipaddr '192.168.8.2'
option netmask '255.255.255.0'
option gateway '192.168.8.1'
option dns '223.5.5.5 114.114.114.114'
config interface 'lan'
option device 'eth0'
option proto 'static'
option ipaddr '192.168.3.1'
option netmask '255.255.255.0'
```
**关键点**:WAN 和 LAN 共用 `eth0`,这就是单臂路由的核心。
### 5.2 DHCP 配置
```bash
# /etc/config/dhcp
config dhcp 'lan'
option interface 'lan'
option start '100'
option limit '100'
option leasetime '12h'
option ignore '0'
```
项目设备接入后,自动分配 `192.168.3.100 ~ 199` 的 IP。
### 5.3 开机自动修复脚本
OpenWrt 重启后,eth0 有时会被自动桥接到 LAN,导致单臂路由失效。我写了一个自启动脚本来修复:
```bash
#!/bin/sh /etc/rc.common
START=99
start() {
logger "Network fix: Starting..."
# 删除 eth0 的桥接配置
uci del network.@device[0].ports 2>/dev/null
uci commit network
/etc/init.d/network restart
sleep 5
logger "Network fix: Done"
}
stop() {
logger "Network fix: Stopped"
}
```
启用命令:
```bash
chmod +x /etc/init.d/network-fix
/etc/init.d/network-fix enable
/etc/init.d/network-fix start
```
---
## 六、B310 CPE 配置
B310 需要设置为**桥接模式**(部分厂商叫透明模式):
1. 关闭 B310 自带的 DHCP 服务器
2. 保持 LAN 口 IP 为 `192.168.8.1`
3. 不做 NAT,不做路由,只做 5G 到有线信号的转发
**为什么要关闭 DHCP?** 如果 B310 和 OpenWrt 同时发 DHCP,项目设备会随机获取到 `192.168.8.x` 或 `192.168.3.x` 的 IP,导致网关混乱、无法上网。
---
## 七、项目设备配置
以测试 VM 为例,配置静态 IP 指向 OpenWrt 网关:
```yaml
# /etc/netplan/50-cloud-init.yaml
network:
version: 2
ethernets:
ens18:
dhcp4: no
addresses:
- 192.168.3.100/24
routes:
- to: default
via: 192.168.3.1
nameservers:
addresses:
- 192.168.3.1
```
---
## 八、效果验证
在测试 VM 上执行:
```bash
curl -s ip.sb
# 返回 5G 运营商分配的公网 IP,说明流量确实走了 B310
ping 192.168.1.1
# 无法 ping 通,说明和原有网络隔离成功
ping 192.168.3.1
# 正常,说明和 OpenWrt 网关通信正常
```
---
## 九、总结
这个项目实现了一个**低成本、零改动、可复现**的 5G 实验网络方案:
- **低成本**:利用现有单网口 PVE 主机,无需添加网卡
- **零改动**:原有 NAS、博客、家庭设备完全不受影响
- **可复现**:所有配置脚本化,重启后自动恢复
对于只有单网口服务器、又想搭建独立网络环境的同学来说,单臂路由是一个非常实用的技巧。
---
## 十、参考配置
- OpenWrt 版本:官方稳定版 x86_64
- B310 固件:原厂固件,桥接模式
- PVE 版本:7.x / 8.x 均兼容
---
> 如果在配置过程中遇到问题,欢迎评论区交流。