Proxmox ve 中lxc容器开启tun

前言

本教程已测试支持 PVE 6.x-8.x
众所周知,ZeroTier 是通过绑定 /dev/net/tun 的 tun 接口来进行组网的,然而 PROXMOX 中用 ct 创建的 lxc 小鸡都默认不存在这个接口,因此需要一些小技巧来给这台 lxc 机器装上这个接口。

解决方案

请注意下文中的 XXX 都应使用你的容器 id 替代

无特权容器

关于如何区分是否为特权容器,请看常见问题 #1
在宿主机(母鸡)中修改文件 /etc/pve/lxc/XXX.conf

vim /etc/pve/lxc/【NNN】.conf

在末尾添加如下代码

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

vim /etc/pve/lxc/XXX.conf

根据 PVE 版本在末尾添加如下代码

PVE 7+

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

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 啦

常见问题

我改如何分辨我的小鸡是否是特权容器?

如果在 /etc/pve/lxc/.conf 中有 unprivileged: 1 的字段,该容器是无特权容器。

我开不了机啦!!!

请检查是否使用了错误的命令,如为无特权容器使用了特权容器的指令等, PVE 的版本更新可能也会造成命令报错,请根据报错内容自行发挥,实在不行请将命令修改删除,ZeroTier 可能与你无缘

无特权容器,可以正常开机,却还是无法使用

在容器中自查 ls -lh /dev/net,是否存在 /dev/net/tun ,如不存在,请认真读题,并自查是否将所有的 改为了容器 id。
image

posted @ 2023-03-30 09:57  群号1978  阅读(3109)  评论(0编辑  收藏  举报