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界面添加所需网口, 并在选项中添加功能相
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
在里面添加tun
和ppp
设备映射, 功能项也加上 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的防火墙:
再添加拒绝所有的规则, 只保留需要的端口, 如下图所示:
其中34791为lucky穿透通道监听端口
注意顺序: 放行端口在拒绝所有之前