找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
广告投放联系QQ68610888
查看: 55698|回复: 845

[openwrt(x86)] PVE-LXC搭建Openwrt(同时解决5105重启)

 火... [复制链接]
发表于 2022-9-6 12:39 | 显示全部楼层 |阅读模式
本帖最后由 Trjchs748 于 2022-9-9 23:03 编辑

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

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

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



前期工作
1. 环境
  • 机器:5105v4 i226-v版本(这机器真的想吐槽,没有入手的别入了)
  • pve: 7.1.2,内核Linux 5.13.19-2-pve


2.已安装
  • 虚拟机Openwrt,并直通网卡


3.准备
  • 将网线连接到pve管理口,然后关闭原openwrt虚拟机,删除直通的网卡
  • 准备一份没有引导的openwrt固件包,可以是img也可以是tar.gz,但一定是没有引导的包,可以看文件名中包含rootfs字符,比如openwrt-x86-64-generic-ext4-rootfs.img或openwrt-21.02.0-x86-64-rootfs.tar.gz(前者是我自己编译的,重点在于rootfs)。


4.说明
  • 如果是从虚拟机切换,建议不删除直通后不要删除虚拟机,先跑一段时间测试一下稳定性和兼容性,目前来说我已经跑了7-8个小时左右了,没有出现5105机器之前遇见过的重启,同时该方式也在大流量下经过了测试,也没有遇见重启。
  • 除此之外,本人也是摸着石头过河,所以不是专业人士,很多地方只去说明了怎么设置。


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


2.img格式

上传固件:
  1. scp [固件路径.img] root@[pveIP地址]:/root
复制代码

这里需要注意,如果你的固件包是带squashfs字符,比如openwrt-x86-64-generic-squashfs-rootfs.img,你需要按照下面的方式进行解压。
安装解压包:
  1. apt install squashfs-tools
复制代码

解压镜像文件:
  1. unsquashfs [固件路径.img]
复制代码

解压完成后你在同级目录下会得到squashfs-root文件夹,然后进入该文件夹,跳至3步骤。
如果你是不带squashfs字符,比如openwrt-x86-64-generic-ext4-rootfs.img,则需要通过挂载镜像,得到内部文件,首先创建一个挂载点(下面操作在root目录中进行):
  1. mkdir op
复制代码

然后挂载镜像:
  1. mount -t ext4 -o loop [固件路径.img] /root/op
复制代码

然后进入/root/op,跳至3步骤(完成后,通过使用umount /root/op进行卸载镜像)。

3.打包为pve的CT模板包:
进入上述2步骤中得到的文件夹中,然后使用下列命令进行打包,得到的文件下文称为op-ct模版:
  1. tar zcf /var/lib/vz/template/cache/[固件名称].tar.gz ./*
复制代码

创建容器
准备工作做完后,就开始创建lxc容器,通过下列命令进行创建:
  1. 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
复制代码

这里详细说明一下每个参数的意思,使用的时候需要根据自己的情况进行更改:
  1. pct create:容器创建命令
  2. 110:容器ID,可根据自己情况设定
  3. local:vztmpl/openwrt-x86-64-generic-ext4-rootfs.tar.gz: 为第三步骤所得到的固件包名称
  4. --rootfs:模版为rootfs文件
  5. local-lvm:2 :后面的数字代表分配的磁盘大小,比如我这里设置的为2,即为即将创建的容器分配2G的大小
  6. --ostype unmanaged:操作系统类型,这里没有填写指定的操作系统(不会影响)
  7. --hostname openwrt-ct:主机名,也就是虚拟机名称
  8. --arch amd64:设置为64位
  9. --cores 2:分配给容器的核心数(我不知道这里是不是和docker一样,为最大限制)
  10. --memory 1024:分配给容器最大的内存数量
  11. --swap 0:交换分区设置为0
  12. -net0 bridge=vmbr0,name=eth0:网卡,这里一定要设置,不然你的op没有办法连接到pve的虚拟交换机。
复制代码

按照上述命令执行完成后,应该会得到如下的内容:
  1. 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
  2.   Logical volume "vm-110-disk-0" created.
  3. Creating filesystem with 524288 4k blocks and 131072 inodes
  4. Filesystem UUID: 15d6753a-ceb2-45d3-9dca-903f97f0f197
  5. Superblock backups stored on blocks:
  6.         32768, 98304, 163840, 229376, 294912
  7. extracting archive '/var/lib/vz/template/cache/openwrt-x86-64-generic-ext4-rootfs.tar.gz'
  8. Total bytes read: 143063040 (137MiB, 86MiB/s)
复制代码

网卡直通
  • 编辑lxc容器的配置文件,进行网卡直通:

  1. vim /etc/pve/lxc/[容器ID].conf
复制代码

在最下面添加以下内容:
  1. # openwrt.common.conf是PVE自带的openwrt配置文件示例,内含一些基本设置
  2. lxc.include: /usr/share/lxc/config/openwrt.common.conf
  3. # /dev/ppp  pppoe拨号等功能需要用到
  4. lxc.cgroup.devices.allow: c 108:0 rwm
  5. # 钩子脚本,用于添加 /dev/ppp等设备
  6. hookscript: local:snippets/hookscript.pl
  7. # 这里是网卡直通重要的部分。
  8. lxc.net.1.type: phys
  9. lxc.net.1.link: enp3s0
  10. lxc.net.1.flags: up
  11. lxc.net.2.type: phys
  12. lxc.net.2.link: enp4s0
  13. lxc.net.2.flags: up
  14. lxc.net.3.type: phys
  15. lxc.net.3.link: enp5s0
  16. 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,使用前可以先行确认。

  • 创建拨号的文件链接。
  1. mkdir /var/lib/vz/snippets
  2. cp /usr/share/pve-docs/examples/guest-example-hookscript.pl /var/lib/vz/snippets/hookscript.pl
  3. vim /var/lib/vz/snippets/hookscript.pl
复制代码

然后修改内容:

  1.         在第36行可以找到以下内容
  2.         # Second phase 'post-start' will be executed after the guest
  3.         # successfully started.

  4.         print "$vmid started successfully.\n";

  5. 修改为
  6.         # Second phase 'post-start' will be executed after the guest
  7.         # successfully started.
  8.         system("lxc-device add -n $vmid /dev/ppp");
  9.         system("lxc-device add -n $vmid /dev/net/tun");
  10.         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中重载入配置文件,但目前我没有找到。



参考






本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

×

评分

参与人数 8恩山币 +9 收起 理由
virus1999 + 2 让我们一起面朝大海、花开花落……
wlwp1314 + 1 感谢你的分享,无论怎样,你都是最无私的人.
54shagua + 1 感谢你的分享,无论怎样,你都是最无私的人.
xicole + 1 感谢你的分享,无论怎样,你都是最无私的人.
iAvalon + 1 感谢你的分享,无论怎样,你都是最无私的人.
望月星刀 + 1 感谢你的分享,无论怎样,你都是最无私的人.
lisl + 1 昨天折腾没成功,今天就看到这帖子,先收藏.
极品斌 + 1 感谢你的分享,无论怎样,你都是最无私的人.

查看全部评分

我的恩山、我的无线 The best wifi forum is right here.
发表于 2022-9-6 13:22 | 显示全部楼层
技术帖,回复解锁
我的恩山、我的无线 The best wifi forum is right here.
回复

使用道具 举报

发表于 2022-9-6 13:45 | 显示全部楼层

技术帖,回复解锁,帮顶
我的恩山、我的无线 The best wifi forum is right here.
回复

使用道具 举报

发表于 2022-9-6 13:45 | 显示全部楼层
谢谢分享
我的恩山、我的无线 The best wifi forum is right here.
回复

使用道具 举报

发表于 2022-9-6 13:45 | 显示全部楼层
真是花钱买折腾
我的恩山、我的无线 The best wifi forum is right here.
回复

使用道具 举报

发表于 2022-9-6 13:47 | 显示全部楼层
技术贴支持
我的恩山、我的无线 The best wifi forum is right here.
回复

使用道具 举报

发表于 2022-9-6 13:51 | 显示全部楼层
支持楼主  重启问题太烦了
我的恩山、我的无线 The best wifi forum is right here.
回复

使用道具 举报

发表于 2022-9-6 13:58 来自手机 | 显示全部楼层
谢谢分享.......
我的恩山、我的无线 The best wifi forum is right here.
回复

使用道具 举报

发表于 2022-9-6 14:01 | 显示全部楼层
PVE-LXC搭建Openwrt
我的恩山、我的无线 The best wifi forum is right here.
回复

使用道具 举报

发表于 2022-9-6 14:19 | 显示全部楼层
厉害了,我的哥。
我的恩山、我的无线 The best wifi forum is right here.
回复

使用道具 举报

发表于 2022-9-6 14:25 来自手机 | 显示全部楼层
学习一下看有什么不同的方法
我的恩山、我的无线 The best wifi forum is right here.
回复

使用道具 举报

发表于 2022-9-6 14:39 | 显示全部楼层
感谢分享技术!
我的恩山、我的无线 The best wifi forum is right here.
回复

使用道具 举报

发表于 2022-9-6 14:45 | 显示全部楼层
感谢分享                           
我的恩山、我的无线 The best wifi forum is right here.
回复

使用道具 举报

发表于 2022-9-6 14:46 | 显示全部楼层
花钱买罪受

点评

懂的都懂就行了  详情 回复 发表于 2023-1-16 09:13
我的恩山、我的无线 The best wifi forum is right here.
回复

使用道具 举报

发表于 2022-9-6 14:54 | 显示全部楼层
技术帖,回复解锁,帮顶
我的恩山、我的无线 The best wifi forum is right here.
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

有疑问请添加管理员QQ86788181|手机版|小黑屋|Archiver|恩山无线论坛(常州市恩山计算机开发有限公司版权所有) ( 苏ICP备05084872号 )

GMT+8, 2024-4-25 06:44

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

| 江苏省互联网有害信息举报中心 举报信箱:js12377 | @jischina.com.cn 举报电话:025-88802724 本站不良内容举报信箱:68610888@qq.com 举报电话:0519-86695797

快速回复 返回顶部 返回列表