1. 将openwrt镜像转换为CT模版

这里以immortalwrt为例

下载ROOTFS (EXT4)格式的镜像

wget https://downloads.staging.immortalwrt.org/releases/23.05.2/targets/x86/64/immortalwrt-23.05.2-x86-64-generic-ext4-rootfs.img.gz

解压镜像

解压 .gz 文件: 使用 gunzip 或类似工具解压 .gz 文件得到 .img 文件。

gunzip -k immortalwrt-23.05.2-x86-64-generic-ext4-rootfs.img.gz

挂载 .img 镜像

创建挂载点: 为了访问镜像内容,需要创建一个挂载点。

mkdir /mnt/img

挂载 .img 文件: 使用 mount 命令挂载 .img 文件到挂载点。

mount -o loop immortalwrt-23.05.2-x86-64-generic-ext4-rootfs.img /mnt/img

将文件系统打包为CT模版

打包文件系统: 在挂载点中打包文件系统,确保在挂载点目录(/mnt/img)中操作。

cd /mnt/img
tar -czvf /mnt/pve/backup/template/cache/immortalwrt-23.05.2.rootfs.tar.gz *

清理

卸载镜像并删除挂载点: 完成打包和压缩后,需要卸载挂载点并可以删除它。

cd ~
umount /mnt/img
rmdir /mnt/img

2. 创建LXC容器

这里的关键在于--ostype unmanaged 使用ui无法添加这参数, 所以只能使用命令创建容器

pct create 250 /mnt/pve/backup/template/cache/immortalwrt-23.05.2.rootfs.tar.gz --arch amd64 --hostname openwrt --rootfs zfs:32 --memory 2048 --swap 0 --cores 2 --ostype unmanaged -net0 name=eth0,bridge=vmbr0

创建完后可在ui界面添加所需网口, 并在选项中添加功能相 20240504截屏2024050422.52.51.png

3. 修改LXC配置文件

vim /etc/pve/lxc/250.conf

这里可以修改磁盘大小

arch: amd64
cores: 2
features: fuse=1,mount=nfs;cifs,nesting=1
hostname: openwrt
memory: 2048
net0: name=eth0,bridge=vmbr0,hwaddr=BC:24:11:FF:8E:6E,type=veth
net1: name=eth1,bridge=vmbr1,hwaddr=BC:24:11:62:FF:0F,type=veth
onboot: 1
ostype: unmanaged
rootfs: zfs:subvol-250-disk-0,size=32G
swap: 0
lxc.cgroup2.devices.allow: c 108:0 rwm
lxc.cgroup2.devices.allow: c 10:200 rwm
lxc.mount.entry: /dev/ppp dev/ppp none bind,create=file
lxc.mount.entry: /dev/net/tun dev/net/tun none bind,create=file

在里面添加tunppp设备映射, 功能项也加上 fuse=1,mount=nfs;cifs,nesting=1, 以免出现各种问题

4. 启动lxc容器

修改lan ip地址

关掉LAN口DHCP, 并设置拨号上网

vim /etc/config/network
config interface 'loopback'
        option device 'lo'
        option proto 'static'
        option ipaddr '127.0.0.1'
        option netmask '255.0.0.0'

config globals 'globals'
        option ula_prefix 'fd9e:b4ec:7ca1::/48'
        option packet_steering '1'

config device
        option name 'br-lan'
        option type 'bridge'
        list ports 'eth0'

config interface 'lan'
        option device 'br-lan'
        option proto 'static'
        option ipaddr '192.168.0.250'
        option netmask '255.255.255.0'
        option ip6assign '60'

config interface 'wan'
        option device 'eth1'
        option proto 'pppoe'
        option username 'xxx'
        option password 'xxx'
        option ipv6 'auto'

5.安装插件

安装luci-theme-argon

安装ttyd

安装Lucky

打开 https://github.com/gdy666/luci-app-lucky/releases 页面

先安装CPU架构相应Lucky核心IPK包

再安装最新的luci-app-lucky_XXX_all.ipk 和 luci-i18n-lucky-zh-cn_XXX_all.ipk

wget http://192.168.0.192:7070/api/file/jmal/share/luci-i18n-lucky-zh-cn_2.1.1-1_all.ipk
wget http://192.168.0.192:7070/api/file/jmal/share/luci-app-lucky_2.1.1-1_all.ipk
wget http://192.168.0.192:7070/api/file/jmal/share/lucky_2.8.3_Openwrt_x86_64.ipk

安装完后在openwrt ui中启动lucky

进入lucky, 恢复配置

为了STUN穿透能够被正常访问需要配置openwrt的防火墙:

20240505截屏2024050511.51.34.png

再添加拒绝所有的规则, 只保留需要的端口, 如下图所示:

其中34791为lucky穿透通道监听端口

注意顺序: 放行端口在拒绝所有之前

20240505截屏2024050512.05.27.png