前言
OpenWrt 有许多魔改发行版本,既然选择 PVE 来构建 HomeLab 系统,我相信你有较强的折腾能力,建议所有镜像或包选择官方版本,因为:
- 魔改发行版其兼容性较差,很多版本安装后出现各种各样的问题,你不了解每个插件的机制而无法解决。
- 官方版本或许也有问题,但是在解决的时候你更容易从 Issue 或 Google 找到答案,理清故障原因,你才能获得更高的稳定性。
本文中除了手摸手安装,同时解决一下两个要点:
- 解决 LXC 容器中 OpenWrt 无法联网
- 解决 Tun 模式开启
或许你根据我的方法也会遇到一些问题,我建议你用英文在 Google 来获取答案,因为 PVE 的 LXC 在中文社区的资料偏少或过时。
版本信息
- CPU: i7 9700k (x86_64)
- PVE: 8.2.2
- OpenWrt: 23.05.4 X86_64
网络架构图
1. 安装 OpenWrt
这里我选择使用 LXC 容器 (即: CT 模板)的方式来安装,因为他有更好的性能,不像虚拟机一样强制扣取的宿主的硬件性能
1.1. 获取 OpenWrt 官方镜像
请自行选择处理器平台架构(我是 x86/64
)找到 rootfs.tar.gz
镜像压缩包
官方发布路径:archive.openwrt.org/releases/23...
- 复制你的包链接
-
进入 PVE 宿主节点 ![[Snipaste_2024-11-20_01-13-13.png]]
-
下载镜像压缩包到临时存放目录
sh
# 切换到 local CT模板 目录
cd /var/lib/vz/template/cache
# 下载镜像包,注意:https://xxx/xxx.gz 需要换成你的镜像包地址
wget https://archive.openwrt.org/releases/23.05.4/targets/x86/64/openwrt-23.05.4-x86-64-rootfs.tar.gz
1.2. 创建 OpenWrt LXC 容器
在 PVE 节点上创建 LXC 容器
Tips:这里只是方便看注释,要执行用下一段代码!!!
sh
# (按需修改)102是你创建的容器编号
pct create 102 \
# (按需修改)/openwrt-xx.xx.x-xxx-rootfs.tar.gz 你刚才下的包名
local:vztmpl/openwrt-23.05.4-x86-64-rootfs.tar.gz \
# :1 是虚拟磁盘大小,这里是1G
--rootfs local-lvm:1 \
# 表明容器没有特定的操作系统模板管理,可能是手动配置的操作系统。
--ostype unmanaged \
# 容器名称
--hostname OpenWrt \
# (按需修改)系统架构,amd64 | arm64 | armhf | i386 | riscv32 | riscv64
--arch amd64 \
# (按需修改)分配给容器的核心数量。默认情况下,容器可以使用所有可用的核心。
--cores 8 \
# (按需修改)容器内RAM的量(MB)。
--memory 1024 \
# 容器SWAP大小,单位为MB。除非你内存特别特别小不容没必要
--swap 0 \
# vmbr0 是你的虚拟网桥,eth0 是你的物理网口
-net0 bridge=vmbr0,name=eth0
这里是给你删除好注释可自行的~
sh
pct create 102 local:vztmpl/openwrt-23.05.4-x86-64-rootfs.tar.gz --rootfs local-lvm:1 --ostype unmanaged --hostname OpenWrt --arch amd64 --cores 8 --memory 1024 --swap 0 --net0 bridge=vmbr0,name=eth0
1.3. 配置容器 Tun 模式 (重要)
一定要配置 Tun 模式所需的容器权限,开启权限后才能联网和开启 Tun模式,因为 LXC 容器 OpenWrt 内置的 dnsmasq 插件的一些权限原因,导致你无法解析 DNS,OpenWrt 容器将无法联网
OpenWrt 容器控台中输入 vim /etc/pve/lxc/102.conf
,102 为容器编号(按需修改),追加下面的配置,并保存
conf
lxc.apparmor.profile: unconfined
lxc.cgroup.devices.allow: a
lxc.cap.drop:
lxc.cgroup2.devices.allow: c 10:200 rwm
lxc.mount.entry: /dev/net/tun dev/net/tun none bind,create=file
配置释义:
- 关闭 AppArmor 配置文件,允许容器无限制访问系统资源
lxc.apparmor.profile: unconfined
- 容器允许访问所有设备
lxc.cgroup.devices.allow: a
- 空值,表示没有从容器中移除任何特权能力
lxc.cap.drop:
- 容器允许访问字符设备 10:200(通常与 /dev/net/tun 相关),权限为读(r)、写(w)、创建(m)
lxc.cgroup2.devices.allow: c 10:200 rwm
- 将宿主机的 /dev/net/tun 映射到容器内的相同路径,允许使用 TUN 接口(通常用于 VPN)
lxc.mount.entry: /dev/net/tun dev/net/tun none bind,create=file
1.3. 启动 OpenWrt 容器
- 左侧数据中心 -> pve -> 选择刚创建的容器 ID,
- 点击控制台,
- 点击启动,
- 按回车即可进入容器终端
1.4. 配置 IP 和 DNS
容器控制台中输入 vim /etc/config/network
修改:
- 设置静态 IP 地址,注意你的主路由网段同网段,我这里网段是 192.168.50.x
- 设置网关,网关地址为你主路由的 IP 地址
- 设置 DNS,DNS也是你主路由的IP地址
vbnet
config interface 'lan'
option device 'br-lan'
option proto 'static'
# 1. 设置静态 IP 地址
option ipaddr '192.168.50.102'
option netmask '255.255.255.0'
option ip6assign '60'
# 2. 设置网关
option gateway '192.168.50.1'
# 3. 设置 DNS
list dns '192.168.50.1'
1.5 设置访问密码
容器控制台输入执行 passwd
,然后输入两次密码即可
1.5. 重启生效
容器控制台输入执行 reboot
1.6. 进入 OpenWrt 检查网络连通性
- 访问 http://192.168.50.102 即可进入 OpenWrt Web 界面, 注意根据你设置的 IP 地址来访问
- 进入 Network -> Diagnostics ,点击 IPv4 Ping,测试网络连通性。如果网络不通,请回到 1.2 和 1.3 步骤中检查的参数。若仍然无法连通,请在 OpenWrt UI界面中查看日志来排查问题,欢迎评论区交流 ~
参考资料
Proxmox VE 8.1.3 Unable to use TUN (/dev/net/tun) in Debian 12.2-1 container