PVE LXC 容器运行 OpenWRT 软路由
status
Published
type
Post
slug
openwrt-in-lxc-on-pve
date
Dec 29, 2023
tags
PVE
Linux
Config
OpenWRT
summary
在 PVE 的 LXC 容器中安装 OpenWRT 作为软路由,可以利用 PVE 的虚拟化技术运行 x86 架构的软路由系统。选择 LXC 容器是因为它具有更高的性能和效率,并且资源开销较少。安装 OpenWRT 的镜像可以选择第三方编译的镜像,也可以自行选择官方镜像。创建容器时需要指定一些参数,如容器 ID、根文件系统模板、主机名等。创建完成后,可以通过 Web 页面配置 OpenWRT,包括网络设置、插件安装等。通过将设备的 Wi-Fi 设置指向 OpenWRT 的 IP 地址,可以实现按需使用,方便维护和故障排除。另外,如果 PVE 运行在老旧电脑上,可以设置功耗墙来限制功耗。
以前自己折腾的都是
ARM
架构的硬路由,虽然也了解过软路由,但总归是纸上谈兵。现在有了 PVE ,可以好好体验一下 x86
架构的软路由了。软路由的系统首选的自然是开源的
OpenWRT
,毕竟刷硬路由时已经较为熟悉了,并且相关的固件资源、软件包等都十分丰富。虚拟化选择
PVE 支持
KVM
和LXC
两种虚拟化技术,各有优势。KVM ——(Kernel-based Virtual Machine),是完全基于硬件的虚拟化技术。多个 KVM 虚拟机各自运行着独立的操作系统内核,因此有着更高的隔离性和安全性。LXC —— (Linux Containers),顾名思义就是 Linux 系统下的容器,是操作系统级的虚拟化技术。共享宿主机内核,因此只能安装 Linux 系统,但也有着更高的性能和效率,以及更少的资源开销。
扩展:LXC 对比 Docker
- 虚拟化范围
- LXC提供操作系统级虚拟化,虚拟出来的是完整的Linux系统环境。
- Docker针对的是应用级虚拟化,每一个容器虚拟化的是某个应用所需的运行环境。
- 实现技术
- LXC通过内核的namespace和cgroups实现资源隔离。
- Docker在LXC之上构建了自己的容器格式和运行时。
- 镜像构建
- LXC类似虚拟机,需要安装操作系统和软件打包。
- Docker有联合文件系统,可以基于base镜像增量构建。
- 移植性
- LXC移植性较差,与操作系统内核耦合。
- Docker实现应用打包,可以跨操作系统环境运行。
总体来说,LXC 提供系统级虚拟化,Docker 实现应用级打包。LXC 相当于一个轻量级的 Linux 虚拟机,而 Docker 则是在其基础上构建的应用容器引擎。
结合软路由特性,在此我选用 LXC 来运行 OpenWRT。
因 PVE 宿主机仅有单网口,且身边也没有支持 VLAN 的交换机,故暂时只能将 OpenWRT 用作旁路由。
安装配置
- OpenWRT 镜像
- 创建 LXC 容器
登录到 PVE 宿主机 Shell
上面创建容器命令参数说明如下:pct create
:创建一个容器200
:容器的 ID,这里指定为 200openwrt-11.19.2023-x86-64-generic-rootfs.tar.gz
:容器使用的根文件系统模板
-rootfs local-lvm:0.5
:给容器分配 0.5G 的本地 LVM 存储
-ostype unmanaged
:标记该容器的类型为 unmanaged,即未托管
-hostname ct-openwrt
:容器的主机名为 ct-openwrt
-arch amd64
:容器架构为 amd64
-cores 2
:分配 2 个 CPU 核心给容器
-memory 512
:分配 512 MB 内存给容器
-swap 0
:不分配 swap
-net0 bridge=vmbr0,name=eth0
:分配 eth0 网卡,桥接 vmbr0 接口
--unprivileged 1
:创建一个无特权(unprivileged)的LXC容器
![notion image](https://www.notion.so/image/https%3A%2F%2Fprod-files-secure.s3.us-west-2.amazonaws.com%2F38eb7257-66ea-481f-b02f-6d5b3b01bb66%2Fa0671bc5-3c8a-4f15-858f-6ebbe5bcfa48%2FUntitled.png?table=block&id=c52c35af-b134-482c-ab04-16cf84feb62e&cache=v2)
容器创建完成,为了快速测试,就不做额外配置,直接启动容器。
此固件默认的用户名密码为root / root
![notion image](https://www.notion.so/image/https%3A%2F%2Fprod-files-secure.s3.us-west-2.amazonaws.com%2F38eb7257-66ea-481f-b02f-6d5b3b01bb66%2F8eb1e9aa-01e7-4f0a-b229-687102235305%2FUntitled.png?table=block&id=80932b1c-7c57-4569-a85f-b1561ab99a85&cache=v2)
![notion image](https://www.notion.so/image/https%3A%2F%2Fprod-files-secure.s3.us-west-2.amazonaws.com%2F38eb7257-66ea-481f-b02f-6d5b3b01bb66%2F29b53d95-99ad-4f8d-b022-a781c02706d8%2FUntitled.png?table=block&id=134e017e-c88f-496d-9830-ebcfd8571f32&cache=v2)
因为此固件默认 LAN 口静态地址为 10.0.0.1,现将其修改为同局域网段 IP 用于访问。
![notion image](https://www.notion.so/image/https%3A%2F%2Fprod-files-secure.s3.us-west-2.amazonaws.com%2F38eb7257-66ea-481f-b02f-6d5b3b01bb66%2Fd051753e-306c-485c-9778-c321aa090158%2FUntitled.png?table=block&id=0d652cf5-b55d-4c84-9466-51e800e0659b&cache=v2)
修改保存后重启 OpenWRT ,查看 IP :
![notion image](https://www.notion.so/image/https%3A%2F%2Fprod-files-secure.s3.us-west-2.amazonaws.com%2F38eb7257-66ea-481f-b02f-6d5b3b01bb66%2Ff3f7691a-3a20-499a-8124-3ef528bb9219%2FUntitled.png?table=block&id=54121b1f-6413-4862-97f6-e0b319299e1e&cache=v2)
访问 Web 页面开始配置,此固件提供了网络向导,可快速将其配置为旁路由模式。
![notion image](https://www.notion.so/image/https%3A%2F%2Fprod-files-secure.s3.us-west-2.amazonaws.com%2F38eb7257-66ea-481f-b02f-6d5b3b01bb66%2F1191f256-9108-4f83-a4fc-32889fd3b9a7%2FUntitled.png?table=block&id=cda1b2b9-41b0-4269-80f2-70b05027aa26&cache=v2)
![notion image](https://www.notion.so/image/https%3A%2F%2Fprod-files-secure.s3.us-west-2.amazonaws.com%2F38eb7257-66ea-481f-b02f-6d5b3b01bb66%2Faf6f3696-d714-4260-b62a-f32a83bc5373%2FUntitled.png?table=block&id=b2653870-a365-404e-a568-8cb015b703a0&cache=v2)
配置完成后,OpenWRT 即已经工作在旁路由模式。
OpenWRT 中安装去广告、DNS 分流、代理等插件及相应配置等此处暂时略去不表(后续有时间再行整理)。
OpenWRT 上配置完成后,同局域网下其他设备只需要将设备的 Wi-Fi 设置由 DHCP 改为静态 IP,同时将网关指向 OpenWRT 所对应的 IP 地址即可。这样可以实现按需使用,即使 OpenWRT 出现问题,再将 Wi-Fi 设置改回去就是,不会影响基本上网功能。
参考致谢
其他事项
若PVE是运行在老旧电脑上,一般功耗较大,运行软路由可考虑设置功耗墙
![notion image](https://www.notion.so/image/https%3A%2F%2Fprod-files-secure.s3.us-west-2.amazonaws.com%2F38eb7257-66ea-481f-b02f-6d5b3b01bb66%2F1f9e442a-1153-42f1-8b77-8dea78f46b1b%2FUntitled.png?table=block&id=83a01eea-a71c-419e-9d44-a489b89bc12d&cache=v2)