记一次在 R86S 机器上通过 LXC 容器的方式部署 OpenWRT 软路由的过程
安装 PvE 注： EMMC 存储器版本前往教程： https://www.yuque.com/taizhourenjia/r86s/kxvqlp 使用 VM 方式运行 OpenWRT 有玄学软重启问题：https://www.v2ex.com/t/879368 创建模板 以下假设 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 固件 *.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 打包模板文件，在上一步所在文件夹执行： tar zcf /var/lib/vz/template/cache/openwrt-xxx.tar.gz ./* 完成后可删除前几步产生的临时文件。 创建容器 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/tun、ls -al /dev/ppp 返回。 其中 eth0 为 WAN 口 、eth1 为 LAN 口、eth2 为 VLAN01 WiFi 口。 启动 正常启动容器，按照常规方式配置 OpenWRT 即可。 注： 实测 OpenClash 有兼容性问题，ShellClash 正常使用。 测试 已连续运行21天，一切正常。