找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

 火... [复制链接]
本帖最后由 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 收起 理由
viru*** + 2 让我们一起面朝大海、花开花落……
wlwp*** + 1 感谢你的分享,无论怎样,你都是最无私的人.
54sh*** + 1 感谢你的分享,无论怎样,你都是最无私的人.
xic*** + 1 感谢你的分享,无论怎样,你都是最无私的人.
iAv*** + 1 感谢你的分享,无论怎样,你都是最无私的人.
望月*** + 1 感谢你的分享,无论怎样,你都是最无私的人.
li*** + 1 昨天折腾没成功,今天就看到这帖子,先收藏.
极*** + 1 感谢你的分享,无论怎样,你都是最无私的人.

查看全部评分

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

使用道具 举报


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

使用道具 举报

谢谢分享
我的恩山、我的无线 The best wifi forum is right here.
回复

使用道具 举报

真是花钱买折腾
我的恩山、我的无线 The best wifi forum is right here.
回复

使用道具 举报

技术贴支持
我的恩山、我的无线 The best wifi forum is right here.
回复

使用道具 举报

支持楼主  重启问题太烦了
我的恩山、我的无线 The best wifi forum is right here.
回复

使用道具 举报

来自手机 | 显示全部楼层
谢谢分享.......
我的恩山、我的无线 The best wifi forum is right here.
回复

使用道具 举报

PVE-LXC搭建Openwrt
我的恩山、我的无线 The best wifi forum is right here.
回复

使用道具 举报

厉害了,我的哥。
我的恩山、我的无线 The best wifi forum is right here.
回复

使用道具 举报

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

使用道具 举报

感谢分享技术!
我的恩山、我的无线 The best wifi forum is right here.
回复

使用道具 举报

感谢分享                           
我的恩山、我的无线 The best wifi forum is right here.
回复

使用道具 举报

花钱买罪受

点评

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

使用道具 举报

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

使用道具 举报

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

本版积分规则

关闭

欢迎大家光临恩山无线论坛上一条 /1 下一条

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

GMT+8, 2024-4-28 21:45

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

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

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