Trjchs748 发表于 2022-9-6 12:39

PVE-LXC搭建Openwrt(同时解决5105重启)

本帖最后由 Trjchs748 于 2022-9-9 23:03 编辑

稳定性测试:
我会在1、3、7天的时间点内更新帖子,来测试稳定性,如果三个时间点都稳定,后期就不再更新。当然如果遇见重启或者不稳定的情况,也一定会在这里说明。

第一天:主要集中在之前出现的大流量下载的情况下导致不定时的重启,这次24小时内使用qbittorrent下载888G的电影,同时上传143G,目前没有异常和不稳定。

第二天:最后一次更新(后期可能非常久之后再更新一个截图),目前来说非常稳定了,关于5105重启的问题,可以说基本上解决了,对于是否有性能损耗我不太清楚,但通过测速来说和虚拟化没有什么区别,也不会在3、7更新了,因为目前准备将所有的服务全部迁移到lxc上,所以需要配置和重启pve。



前期工作1. 环境
[*]**** Hidden Message *****
[*]**** Hidden Message *****


2.已安装
[*]**** Hidden Message *****


3.准备
[*]**** Hidden Message *****
[*]**** Hidden Message *****

4.说明
[*]**** Hidden Message *****
[*]**** Hidden Message *****


创建基础环境文件包
1.tar.gz格式如果包后缀为tar.gz,则通过scp直接上传至pve,以下[]内的字符根据自己情况进行替换(包括[和]符号):scp [固件路径.tar.gz] root@:/var/lib/vz/template/cache

2.img格式
上传固件:scp [固件路径.img] root@:/root
这里需要注意,如果你的固件包是带squashfs字符,比如openwrt-x86-64-generic-squashfs-rootfs.img,你需要按照下面的方式进行解压。安装解压包:apt install squashfs-tools
解压镜像文件:unsquashfs [固件路径.img]
解压完成后你在同级目录下会得到squashfs-root文件夹,然后进入该文件夹,跳至3步骤。如果你是不带squashfs字符,比如openwrt-x86-64-generic-ext4-rootfs.img,则需要通过挂载镜像,得到内部文件,首先创建一个挂载点(下面操作在root目录中进行):mkdir op
然后挂载镜像:mount -t ext4 -o loop [固件路径.img] /root/op
然后进入/root/op,跳至3步骤(完成后,通过使用umount /root/op进行卸载镜像)。
3.打包为pve的CT模板包:进入上述2步骤中得到的文件夹中,然后使用下列命令进行打包,得到的文件下文称为op-ct模版:tar zcf /var/lib/vz/template/cache/[固件名称].tar.gz ./*
创建容器准备工作做完后,就开始创建lxc容器,通过下列命令进行创建:pct create 110 local:vztmpl/openwrt-x86-64-generic-ext4-rootfs.tar.gz --rootfs local-lvm:2 --ostype unmanaged --hostname openwrt-ct --arch amd64 --cores 2 --memory 1024 --swap 0 -net0 bridge=vmbr0,name=eth0
这里详细说明一下每个参数的意思,使用的时候需要根据自己的情况进行更改:pct create:容器创建命令
110:容器ID,可根据自己情况设定
local:vztmpl/openwrt-x86-64-generic-ext4-rootfs.tar.gz: 为第三步骤所得到的固件包名称
--rootfs:模版为rootfs文件
local-lvm:2 :后面的数字代表分配的磁盘大小,比如我这里设置的为2,即为即将创建的容器分配2G的大小
--ostype unmanaged:操作系统类型,这里没有填写指定的操作系统(不会影响)
--hostname openwrt-ct:主机名,也就是虚拟机名称
--arch amd64:设置为64位
--cores 2:分配给容器的核心数(我不知道这里是不是和docker一样,为最大限制)
--memory 1024:分配给容器最大的内存数量
--swap 0:交换分区设置为0
-net0 bridge=vmbr0,name=eth0:网卡,这里一定要设置,不然你的op没有办法连接到pve的虚拟交换机。
按照上述命令执行完成后,应该会得到如下的内容:root@pve:/var/lib/vz/template/cache# pct create 110 local:vztmpl/openwrt-x86-64-generic-ext4-rootfs.tar.gz --rootfs local-lvm:2 --ostype unmanaged --hostname openwrt-ct --arch amd64 --cores 2 --memory 1024 --swap 0 -net0 bridge=vmbr0,name=eth0
Logical volume "vm-110-disk-0" created.
Creating filesystem with 524288 4k blocks and 131072 inodes
Filesystem UUID: 15d6753a-ceb2-45d3-9dca-903f97f0f197
Superblock backups stored on blocks:
      32768, 98304, 163840, 229376, 294912
extracting archive '/var/lib/vz/template/cache/openwrt-x86-64-generic-ext4-rootfs.tar.gz'
Total bytes read: 143063040 (137MiB, 86MiB/s)
网卡直通
[*]编辑lxc容器的配置文件,进行网卡直通:

vim /etc/pve/lxc/[容器ID].conf
在最下面添加以下内容:# openwrt.common.conf是PVE自带的openwrt配置文件示例,内含一些基本设置
lxc.include: /usr/share/lxc/config/openwrt.common.conf
# /dev/ppppppoe拨号等功能需要用到
lxc.cgroup.devices.allow: c 108:0 rwm
# 钩子脚本,用于添加 /dev/ppp等设备
hookscript: local:snippets/hookscript.pl
# 这里是网卡直通重要的部分。
lxc.net.1.type: phys
lxc.net.1.link: enp3s0
lxc.net.1.flags: up
lxc.net.2.type: phys
lxc.net.2.link: enp4s0
lxc.net.2.flags: up
lxc.net.3.type: phys
lxc.net.3.link: enp5s0
lxc.net.3.flags: up
需要注意,网卡直通部分里面的网卡名字,需要根据pve控制面板选择【pve】-【系统】-【网络】中查看,其中一定避免管理口,我这里是enp2s0为管理口,所以没有直通,而是在启动容器的时候,作为桥接接进来了。我的软路由为5105四口,所以这里排除了管理口,我直通了2-4网口。
除此之外,89楼的朋友提醒了一下,关于“lxc.cgroup.devices.allow: c 108:0 rwm”这配置,需要自行确认,你可以登陆pve ssh,然后通过"ls -al /dev/ppp"查看字符设备ppp,比如下面就是我的ppp设备的编号,主编号为108,次编号为0,所以这里就是108:0,使用前可以先行确认。

[*]创建拨号的文件链接。
mkdir /var/lib/vz/snippets
cp /usr/share/pve-docs/examples/guest-example-hookscript.pl /var/lib/vz/snippets/hookscript.pl
vim /var/lib/vz/snippets/hookscript.pl
然后修改内容:
      在第36行可以找到以下内容
      # Second phase 'post-start' will be executed after the guest
      # successfully started.

      print "$vmid started successfully.\n";

修改为
      # Second phase 'post-start' will be executed after the guest
      # successfully started.
      system("lxc-device add -n $vmid /dev/ppp");
      system("lxc-device add -n $vmid /dev/net/tun");
      print "$vmid started successfully.\n";
设置防火墙

[*]在pve管理界面,选择创建的容器,然后切换至防火墙页面,点击添加,然后添加两次,每次只需要改动方向in和out和勾选启用。按照下面的教程中,设置端口好像报错,但不设置设备接入后又无法联网,但这样添加后,即可联网。

重启

[*]重启整个pve,如果不重启直接启动容器,这个网卡会提示找不到,具体原因暂不知道。重启后,即可启动容器,按照正常的openwrt配置即可。


其他
[*]这里配置openwrt的时候需要注意,因为网卡是直通的,所以网卡名可能和虚拟机不一样,虚拟机中是eth0-3,而在容器里面,除了指定的eth0(管理口,也是网口1),剩余的网口名称为enp3s0、enp4s0、enp5s0,也就是对应的2、3、4口(我的环境下),所以根据自身情况选择对应的网口分配wan和lan口进行。
[*]在设置完wan口和防火墙后,openwrt拨号设置后,你需要重启pve,才能生效。我猜测这是因为拨号配置是挂载的pve的,所以pve将配置文件载入到内存中,即使重启容器也还是从pve内存中读,应该有其他方法在pve中重载入配置文件,但目前我没有找到。


参考
[*]https://www.right.com.cn/forum/thread-8218119-1-1.html
[*]https://blog.csdn.net/kangzeru/article/details/115373587
[*]https://4xu.net/posts/koolshare-2.html/
[*]https://pvecli.xuan2host.com/lxc-network-bypass/








RrFrank 发表于 2022-9-6 13:22

技术帖,回复解锁

oblueo` 发表于 2022-9-6 13:45


技术帖,回复解锁,帮顶

hitomr 发表于 2022-9-6 13:45

谢谢分享

lauren12133 发表于 2022-9-6 13:45

真是花钱买折腾

zixiang5288 发表于 2022-9-6 13:47

技术贴支持

shldol 发表于 2022-9-6 13:51

支持楼主重启问题太烦了

黑色宝石 发表于 2022-9-6 13:58

谢谢分享.......

wjl61901 发表于 2022-9-6 14:01

PVE-LXC搭建Openwrt

zns311 发表于 2022-9-6 14:19

厉害了,我的哥。

w2521223 发表于 2022-9-6 14:25

学习一下看有什么不同的方法

snm 发表于 2022-9-6 14:39

感谢分享技术!

cajoy 发表于 2022-9-6 14:45

感谢分享                           

蒸风习习 发表于 2022-9-6 14:46

花钱买罪受https://www.right.com.cn/forum//mobcent//app/data/phiz/default/09.png

simymo 发表于 2022-9-6 14:54

技术帖,回复解锁,帮顶
页: [1] 2 3 4 5 6 7 8 9 10
查看完整版本: PVE-LXC搭建Openwrt(同时解决5105重启)