Proxmox ve 中lxc容器开启tun虚拟网卡
本教程已测试支持 PVE 6.x-8.x。ZeroTier 等虚拟组网工具是通过绑定 /dev/net/tun 的 tun 接口来进行组网的,然而 PROXMOX 中用 ct 创建的 lxc 小鸡都默认不存在这个接口,因此需要一些小技巧来给这台 lxc 机器装上这个接口。特别是Proxmox ve版本不同,有没有开启特权容器,设置不一样。
解决方案:
请注意下文中的 XXX 都应使用你的容器 id 替代
无特权容器
在宿主机(母鸡)中修改文件 /etc/pve/lxc/XXX.conf
vim /etc/pve/lxc/【NNN】.conf
在末尾添加如下代码
XML/HTML代码
- lxc.hook.autodev = sh -c "modprobe tun"
- lxc.mount.entry=/dev/net/tun /var/lib/lxc/XXX/rootfs/dev/net/tun none bind,create=file
重启 lxc 容器,就可以正常安装使用 ZeroTier 啦。
特权容器
在宿主机(母鸡)中修改文件 /etc/pve/lxc/XXX.conf
XML/HTML代码
- vim /etc/pve/lxc/XXX.conf
根据 PVE 版本在末尾添加如下代码
PVE 7+
XML/HTML代码
- lxc.cgroup2.devices.allow: c 10:200 rwm
- lxc.hook.autodev = sh -c "modprobe tun; cd ${LXC_ROOTFS_MOUNT}/dev; mkdir net; mknod net/tun c 10 200; chmod 0666 net/tun"
PVE 6.x
XML/HTML代码
- lxc.cgroup.devices.allow: c 10:200 rwm
- lxc.hook.autodev = sh -c "modprobe tun; cd ${LXC_ROOTFS_MOUNT}/dev; mkdir net; mknod net/tun c 10 200; chmod 0666 net/tun"
重启 lxc 容器,就可以正常安装使用 ZeroTier 啦
常见问题:
1、我改如何分辨我的小鸡是否是特权容器
如果在 /etc/pve/lxc/.conf 中有 unprivileged: 1 的字段,该容器是无特权容器。
2、开不了机
请检查是否使用了错误的命令,如为无特权容器使用了特权容器的指令等。
3、无特权容器,可以正常开机,却还是无法使用
在容器中自查 ls -lh /dev/net,是否存在 /dev/net/tun ,如不存在,请认真读题,并自查是否将所有的 xxx 改为了容器 id。
注意:在Proxmox ve 8.2 或者更新版本中,通过在LXC容器--资源--添加--Device Passthrough--Device Path 写入 /dev/net/tun 添加,就可以实现快速直通宿主机tun虚拟网卡。特别注意需要设置成特权容器,建立容器时候给无特权容器前面勾取消了。特殊情况就是命令模式创建的Openwrt系统,直接添加不行,需要用上面的修改配置参数,参考 PVE 7+ 的修改方法即可。详细操作参考之前 PVE安装以及简单设置教程 的文章。
PVE工具箱+ LXC容器OpenWrt安装、更新
Github:https://github.com/roacn/pve
OpenWrt:https://github.com/roacn/OpenWrt
1、安装curl、wget、squashfs-tools工具
以下请在PVE命令行中操作
使用root用户登录,执行以下命令
XML/HTML代码
- apt update && apt install -y curl wget squashfs-tools
方式一:PVE中输入以下命令安装pve.sh,然后在PVE命令行中直接输入 pve 运行 推荐
XML/HTML代码
- wget https://mirror.ghproxy.com/https://raw.githubusercontent.com/roacn/pve/main/pve.sh -O /usr/bin/pve && chmod +x /usr/bin/pve
XML/HTML代码
- pve
方式二:直接运行
XML/HTML代码
- bash -c "$(curl -fsSL https://mirror.ghproxy.com/https://raw.githubusercontent.com/roacn/pve/main/pve.sh)"
3.1 下载
方式一:PVE中直接使用 openwrt 命令运行自动安装更新脚本 推荐
XML/HTML代码
- wget https://mirror.ghproxy.com/https://raw.githubusercontent.com/roacn/pve/main/openwrt.lxc.sh -O /usr/bin/openwrt && chmod +x /usr/bin/openwrt
XML/HTML代码
- openwrt
方式二:直接运行
XML/HTML代码
- bash -c "$(curl -fsSL https://mirror.ghproxy.com/https://raw.githubusercontent.com/roacn/pve/main/openwrt.lxc.sh)"
3.2 设置
固件下载相关
XML/HTML代码
- 选项 说明 默认值
- 仓库地址 github用户名称/仓库名称 roacn/build-actions
- TAG名称 所在release的tag名称 AutoUpdate-x86-lxc
- API文件 所在release的附件api文件名称 zzz_api
- 固件格式.tar.gz或.img.gz格式固件;
- 设置为default,默认获取云端两种格式固件;
- 设置为.tar.gz,则只获取云端.tar.gz格式固件;
- 设置为.img.gz,则只获取云端.img.gz格式固件 default
OpenWrt容器相关
XML/HTML代码
- 选项 说明 默认值
- 容器ID lxc容器id,需要>=100 100
- 容器名称 lxc容器管理页面显示的名称 OpenWrt
- CPU核心 lxc容器分配CPU核心数 4
- 内存大小 lxc容器分配内存大小,单位MB 1024
- 磁盘大小 lxc容器分配磁盘大小,单位GB 2
- 交换分区 lxc容器分配交换分区大小,单位MB 512
- 网络接口 lxc容器分配的网络接口数量 1
- 开机自启 是否启用开机自启动,1为开启,0为不开启 1
- 启动顺序 在所有PVE虚拟机的启动排序 1
Openwrt的命令配置文件在 /etc/openwrt.conf 也可以通过openwrt命令在设置里面修改,至于其他的修改需要通过源代码,自行测试。