PVE 安装 OpenWrt
本文使用一台 OpenWrt 虚拟机和一个独立 LAN 网桥,完成镜像导入、网络配置与联网验证。示例采用 IPv4,WAN 从现有上级路由器获取地址。
1. 网络规划
| 项目 | 示例设置 |
|---|---|
| 虚拟机 ID | 120,创建前确认未占用 |
| CPU / 内存 | 2 核 / 1024 MB |
| BIOS | SeaBIOS |
| 网卡 net0 | VirtIO,连接现有 vmbr0,作为 WAN |
| 网卡 net1 | VirtIO,连接新建 vmbr1,作为 LAN |
| OpenWrt LAN 地址 | 192.168.50.1/24 |
| LAN 测试客户端 | 另一台连接 vmbr1 的虚拟机 |
数据流为:测试客户端 → vmbr1 → OpenWrt LAN → OpenWrt WAN → vmbr0 → 上级路由器。
vmbr0 保留现有 PVE 管理地址;vmbr1 不绑定物理网卡,也不设置宿主机 IP。LAN 网段应与上级网络不同。PVE 的 Linux Bridge 用于连接虚拟网卡与网络,具体机制见 官方网络配置文档。
2. 准备镜像
在 OpenWrt Firmware Selector 中选择稳定版、x86/64 和 Generic 设备,下载文件名以 generic-ext4-combined.img.gz 结尾的完整磁盘镜像。
本文使用 SeaBIOS,因此选择非 EFI 镜像。使用 OVMF / UEFI 时,应选择对应的 combined-efi.img.gz。镜像类型说明见 OpenWrt x86 文档。
把镜像上传到 PVE 宿主机的 /var/lib/vz/template/iso/,命名为 openwrt.img.gz,核对发布目录中的 SHA256 后解压。
以下命令在 PVE 宿主机 Shell 执行:
cd /var/lib/vz/template/iso
sha256sum openwrt.img.gz
gzip -dk openwrt.img.gz
sha256sum 输出应与所下载版本的官方校验值一致;解压后得到 openwrt.img。
3. 新建 LAN 网桥
在 PVE 网页中进入“节点 → 系统 → 网络”,新建 Linux Bridge:
- 名称填写
vmbr1,若已被占用则改用其他空闲名称,并同步修改后续命令。 - IPv4、网关和 Bridge ports 留空。
- 启用自动启动,保存并应用配置。
该网桥只连接本次测试的虚拟机与 OpenWrt LAN。现有管理网桥的地址、网关和物理网卡配置保持原样。
4. 创建虚拟机并导入磁盘
先查看虚拟机 ID 和存储名称:
qm list
pvesm status
确认 120 未被使用、local-lvm 支持虚拟机磁盘后执行;若环境不同,替换这两个值:
qm create 120 --name openwrt --memory 1024 --cores 2 \
--ostype l26 --bios seabios \
--net0 virtio,bridge=vmbr0 \
--net1 virtio,bridge=vmbr1
qm disk import 120 /var/lib/vz/template/iso/openwrt.img local-lvm
qm config 120
导入后,磁盘会显示为 unused0 或其他未使用磁盘。在虚拟机“硬件”页面选择这块磁盘,编辑并挂到 SATA 0;再在“选项 → 引导顺序”中启用该磁盘并排到第一位。
导入命令与未使用磁盘的处理方式可参考 Proxmox 官方磁盘导入说明。实际卷名以导入结果为准。
启动虚拟机并打开其控制台:
qm start 120
5. 配置 OpenWrt 接口
以下命令在 OpenWrt 虚拟机控制台 执行。先设置 root 密码,再查看网卡:
passwd
ip link
通过 MAC 地址与 PVE 硬件页比对,确认哪张网卡连接 vmbr0、哪张连接 vmbr1。下例假设 eth0 是 WAN、eth1 是 LAN;名称不同就替换配置中的设备名。
为新建虚拟机保存原配置,并写入最小网络配置:
cp -p /etc/config/network /root/network.before-openwrt-demo
cat > /etc/config/network <<'EOF'
config interface 'loopback'
option device 'lo'
option proto 'static'
list ipaddr '127.0.0.1/8'
config device
option name 'br-lan'
option type 'bridge'
list ports 'eth1'
config interface 'lan'
option device 'br-lan'
option proto 'static'
list ipaddr '192.168.50.1/24'
config interface 'wan'
option device 'eth0'
option proto 'dhcp'
EOF
/etc/init.d/network restart
这里把 eth1 放入 br-lan,LAN 地址配置在桥上;WAN 独立使用 eth0。配置格式见 OpenWrt 网络配置文档。
6. 核对 DHCP 与防火墙
官方镜像通常已有 dhcp.lan 配置。启用 LAN 地址分配:
uci set dhcp.lan.interface='lan'
uci set dhcp.lan.ignore='0'
uci set dhcp.lan.start='100'
uci set dhcp.lan.limit='100'
uci set dhcp.lan.leasetime='12h'
uci commit dhcp
/etc/init.d/dnsmasq restart
检查防火墙配置中的三项:
lanzone 包含lan网络。wanzone 包含wan网络,并启用 IPv4 Masquerading。- 存在从
lan到wan的 forwarding。
可在 LuCI 的防火墙页面核对,或在控制台运行 uci show firewall 查看。保留 WAN 侧的入站限制,管理操作从 LAN 侧进行。相关选项见 OpenWrt 防火墙配置文档。
7. 验证联网
在 OpenWrt 中检查 WAN 地址、默认路由和域名解析:
ifstatus wan
ip route
ping -c 4 1.1.1.1
nslookup openwrt.org
再把一台 Linux 测试虚拟机的网卡接入 vmbr1,使用 DHCP 获取地址。客户端应获得 192.168.50.x,默认网关为 192.168.50.1。
ip addr
ip route
ping -c 4 192.168.50.1
ping -c 4 1.1.1.1
nslookup openwrt.org
若镜像包含 LuCI,可在这台 LAN 客户端中访问 http://192.168.50.1。这里的公网测试 IP 可替换成环境中允许访问的目标。
8. 常见问题
| 现象 | 检查方向 |
|---|---|
| 虚拟机无法启动 | 镜像与 BIOS 是否匹配,导入磁盘是否已挂载并启用引导 |
| 客户端拿不到地址 | 客户端是否接入 vmbr1,LAN 网卡的 MAC 是否对应正确,DHCP 是否启用 |
| OpenWrt 能联网,客户端不能 | LAN 到 WAN 转发、WAN Masquerading、客户端默认网关 |
| 能访问 IP,不能访问域名 | WAN 下发的 DNS、dnsmasq 状态和客户端 DNS 设置 |
| 配置后访问不到 LAN | 从虚拟机控制台核对设备名和 IP,必要时恢复备份配置 |
配置确认后,再通过 PVE 为这台虚拟机做备份,保存可恢复的基础版本。