[openwrt(x86)]Proxmox(pve)中LXC容器搭建openwrt软路由不影响性能

2022-07-05
0评论
/
4915阅读
爱搜啊

经过实际测试发现,使用Proxmox(pve)中LXC容器基本不影响性能

带宽约350Mbps,下载BT的时候,路由器资源占用对比:

1、锐角云,方案: PVE -> vm方式安装openwrt,下载速度能达到300Mbps以上,宿主机cpu占用70%-80%,ping网关10ms左右

2、锐角云,方案: PVE -> lxc方式安装openwrt,下载速度能达到300Mbps以上,宿主机cpu占用25%-30%,ping网关1ms左右

Proxmox(pve)中LXC容器搭建openwrt软路由

4月5日摸索后所得

1、感觉pve的lxc对openwrt的支持会越来越完善,在lxc中运行openwrt后,该容器的概要备注栏会出现如下提示:

openwrt.common.conf是PVE自带的openwrt配置文件示例,内含一些基本设置 /dev/ppp pppoe拨号等功能需要用到 钩子脚本,用于添加 /dev/ppp等设备 将主机的网卡enp4s0分配给容器使用,根据自己的实际情况更改

同时观看了其自带的CT模板,基本上基于linux流行的开源软件都囊括了,openwrt我觉得应该很快会在官方的“CT模板”中出现,或者说会越来越完善。

2、就发帖提出群晖的lxc模板制作我觉得会很难出现,因为其结构变动太大了,且docker中也没有发现有群晖。

ProxmoxVE 7.0 LXC下搭建openwrt软路由

特点:

        1、安全,因为无需网卡直通,所以把pve弄塌的几率很小。

        2、按理应该不限制pve和openwrt的版本。        

        3、工具简单,只需要winscp即可,命令也很少

前言

1、硬件环境

        HP GEN8

        CPU更换为E3-1265L V2

        内存16G

        新添加X540-T2网卡

2、软件环境

        pve版本号:7.1-12

        openwrt用的l大截止2022年3月30日源码,

        OpenWrt R22.3.13

        内核:5.15.32

        因为主板上的两个网口分组一直不成功,所以没有开通直通功能

3、实现效果

        A、拨号正常,能获取IPV4、IPV6地址

        B、IPV4、IPV6动态域名正常

        C、AdGuard Home使用正常

        其他没测,我也不需要。但从成品效果来说,应该和实体机安装、虚拟机安装代入效果一样。

因为我的绝大多数功能都是使用黑裙实现的,所以我用的固件是用L大源码自己编译的,我只编译进去了“TTYD终端、AdGuard Home、socat、上网时间控制、动态DNS、网络唤醒(应该用不着)、KMS服务器、UPNP、IPV6“

一、模板取得

注意:以下***为具体的文件名,注意在命令里相应的替换为具体的文件名

要点、必须是***-rootfs.img、***-rootfs.img.gz或者***-rootfs.tar.gz的文件

        ***-rootfs.img、***-rootfs.img.gz需要解包后打包

        ***-rootfs.tar.gz可以直接使用

1、***-rootfs.tar.gz取的

        A、可以到官网或者别人直接索取

        官网地址:https://downloads.openwrt.org/releases/21.02.0/targets/x86/64/openwrt-21.02.0-x86-64-rootfs.tar.gz

        B、自己编译

        编译时选中Target Images --->*.tar.gz

2、用下载的***-rootfs.img、***-rootfs.img.gz文件解包、打包

        A、将***-rootfs.img、***-rootfs.img.gz文件用ssh登陆并上传到PVE根目录/root目录下

        B、ssh里解压(***-rootfs.img无需此步骤)

gzip -d ***-rootfs.img.gz

        C、安装解包软件

apt install squashfs-tools

        D、对得到的img进行解包

unsquashfs ***-rootfs.img

        E、进入目录,重新打包为pve的CT模板

cd squashfs-root
tar zcf ../***-rootfs.tar.gz ./*

        F、上传或复制到PVE的CT模板目录,/var/lib/vz/template/cache

二、新建LXC容器

1、通过SSH或者是网页端打开PVE终端,执行以下命令创建新容器

pct create *** \                        #“***”是容器编号
        local:vztmpl/***-rootfs.tar.gz \        #“***-rootfs.tar.gz”时CT模板
        --rootfs local-lvm:1 \                        #“1”为虚拟磁盘大小,这里是1G
        --ostype unmanaged \                        #系统类型,之后可在设置文件中修改
        --hostname OpenWrt \                        #容器名称,之后可在设置文件中修改
        --arch amd64 \                                #系统架构,amd64 | arm64 | armhf | i386
        --cores 8 \                                #分配给容器的核心数,我这里分配的是8个,我测试CT模版不需要对某一个容器分配多少,pve会自己调度,所以我通过CT模板建立的虚拟机都是把cpu资源全部分配的。
        --memory 1024 \                                #分配给容器的内存大小,这里是1G。
        --swap 0 \                                #分配给容器的交换区大小,这里是0
        -net0 bridge=vmbr0,name=eth0 -net1 bridge=vmbr1,name=eth1        #我这里分配了两个网卡,bridge=vmbr1对应的是pve网络您创建的虚拟网卡;name=eth1对应的是openwrt中的网卡。

要点:创建虚拟网卡不要使用您的wan端口,创建虚拟网卡不要使用您的wan端口、创建虚拟网卡不要使用您的wan端口。

三、修改容器设置

1、修改容器配置文件

vi /etc/pve/lxc/***.conf        #“***:是容器编号

添加以下内容(要点:倒数第二行“lxc.net.1.link: eno2”,“eno2”修改为您的wan端口,端口名称是pve---网络---名称栏物理网卡的名字,不要填成了创建的虚拟网卡名字)

        # openwrt.common.conf是PVE自带的openwrt配置文件示例,内含一些基本设置
        lxc.include: /usr/share/lxc/config/openwrt.common.conf
        # /dev/ppp  pppoe拨号等功能需要用到
        lxc.cgroup.devices.allow: c 108:0 rwm
        # 钩子脚本,用于添加 /dev/ppp等设备
        hookscript: local:snippets/hookscript.pl
        # 将主机的网卡enp4s0分配给容器使用,根据自己的实际情况更改
        lxc.net.1.type: phys
        lxc.net.1.link: eno2
        lxc.net.1.flags: up

2、创建钩子脚本

        A、这里在官方示例guest-example-hookscript.pl的基础上进行修改,大家可以根据需要自行修改

        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

        B、在第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防火墙设置

要点:1个端口的防火墙是由“in”和“out”两条规则组成的。

        A、规则“in”

        方向:in

        操作:ACCEPT

        接口:***                #在这里,openwrt中使用的wan口填物理网卡名称,lan口填写虚拟网卡的名称(端口名称在pve---网络---名称栏中查找)

        选中“启用”


        B、规则“out”

        方向:out

        操作:ACCEPT

        接口:***                #这个接口与上条规则的接口相同

        选中“启用”


        举例,如果您有两个端口,一个是“wan”,一个是“lan”,则就是4条规则,“wan”的接口是物理接口名称,“lan”接口是创建的虚拟网卡接口名称。以此类推。

四、启动容器(踩了最多的坑)

执行以下指令

apt install squashfs-tools0

我启动容器后没有发现任何不正常的现象和提示。

最大的坑就是我设置openwrt过程中(也有SSh进去备份的hosts、ddns、dhcp等配置文件)如果软启动,不是进不去网页界面就是拨号不成功,无意中用冷启动才解决问题,然后一切就变得好通畅了。

同时强烈呼吁大神研究做一个群晖的lxc模板出来。pve安装黑裙cpu必须选“KVM64”,效能损失比较大啊。我的群晖因为要异地文件同步、异地播放视频、迅雷下载等,使用频率很高,以前不觉得,现在感觉就是根刺。


本站附件分享,如果附件失效,可以去找找看

诚通网盘附件百度网盘附件


于2022-07-05发布