安装 PvE

注:

创建模板

以下假设 PvE 机器地址为 10.0.0.254,假设 OpenWRT 固件名称为 openwrt-xxx

格式 *.tar.gz 固件

*.tar.gz 格式的固件可直接上传至 PvE 模板文件夹:

scp openwrt-xxx.tar.gz root@10.0.0.254:/var/lib/vz/template/cache

格式 *.img 固件

  1. *.img 镜像需要进行转格式

    寻找一台 Linux 机器,或者直接使用 PvE 机器进行下列操作

    如果固件带有 squashfs 字样,直接解压:

    apt install squashfs-tools
    unsquashfs openwrt-xxx.img

    如果固件不带有 squashfs 字样,需要挂载镜像:

    mkdir /root/op
    mount -t ext4 -o loop openwrt-xxx.img /root/op
    cd /root/op
  2. 打包模板文件,在上一步所在文件夹执行:

    tar zcf /var/lib/vz/template/cache/openwrt-xxx.tar.gz ./*
  3. 完成后可删除前几步产生的临时文件。

创建容器

pct create 101 local:vztmpl/openwrt-x86-64-generic-squashfs-rootfs.tar.gz \
  --rootfs local-lvm:1 \
  --ostype unmanaged \
  --hostname openwrt \
  --arch amd64 \
  --cores 2 \
  --memory 1024 \
  --swap 0 \
  -net0 name=eth0,bridge=vmbr999,firewall=1 \
  -net1 name=eth1,bridge=vmbr0 \
  -net2 name=eth2,bridge=vmbr900

修改容器配置

主要目的是通过映射宿主机 /dev 下的设备,向容器提供 PPPoE 拨号能力。

vim /etc/pve/lxc/101.conf

arch: amd64
cores: 2
hookscript: local:snippets/hookscript.pl
hostname: openwrt
memory: 1024
net0: name=eth0,bridge=vmbr999,firewall=1,type=veth
net1: name=eth1,bridge=vmbr0,type=veth
net2: name=eth2,bridge=vmbr900,type=veth
ostype: unmanaged
rootfs: local-lvm:vm-101-disk-0,size=1G
swap: 0
lxc.include: /usr/share/lxc/config/openwrt.common.conf
lxc.mount.entry: /dev/net/tun dev/net/tun none bind,create=file
lxc.mount.entry: /dev/ppp dev/ppp none bind,create=file
lxc.cgroup2.devices.allow: c 108:0 rwm
lxc.cgroup2.devices.allow: c 10:200 rwm

注:

  • 其中 cgroup 权限数据来自宿主机 ls -al /dev/net/tunls -al /dev/ppp 返回。
  • 其中 eth0WAN 口eth1LAN 口eth2VLAN01 WiFi 口

启动

正常启动容器,按照常规方式配置 OpenWRT 即可。

注:

  • 实测 OpenClash 有兼容性问题,ShellClash 正常使用。

测试

已连续运行21天,一切正常。

Snipaste_2022-10-08_18-21-26.png