前言
众所周知,ZeroTier 是通过绑定 /dev/net/tun
的 tun 接口来进行组网的,然而 PROXMOX 中用 ct 创建的 lxc 小鸡都默认不存在这个接口,因此需要一些小技巧来给这台 lxc 机器装上这个接口。
解决方案
请注意下文中的 <NNN>
都应使用你的容器 id 替代
无特权容器
关于如何区分是否为特权容器,请看常见问题 #1
在宿主机(母鸡)中修改文件 /etc/pve/lxc/<NNN>.conf
vim /etc/pve/lxc/<NNN>.conf
在末尾添加如下代码
lxc.hook.autodev = sh -c "modprobe tun"
lxc.mount.entry=/dev/net/tun /var/lib/lxc/<NNN>/rootfs/dev/net/tun none bind,create=file
重启 lxc 容器,就可以正常安装使用 ZeroTier 啦
特权容器
在宿主机(母鸡)中修改文件 /etc/pve/lxc/<NNN>.conf
vim /etc/pve/lxc/<NNN>.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/<NNN>.conf
中有unprivileged: 1
的字段,该容器是无特权容器。我开不了机啦!!!
请检查是否使用了错误的命令,如为无特权容器使用了特权容器的指令等, PVE 的版本更新可能也会造成命令报错,请根据报错内容自行发挥,实在不行请将命令修改删除,ZeroTier 可能与你无缘
无特权容器,可以正常开机,却还是无法使用
在容器中自查
ls -lh /dev/net
,是否存在/dev/net/tun
,如不存在,请认真读题,并自查是否将所有的<NNN>
改为了容器 id。
特别感谢
本文参考了 https://github.com/mentecatoDev/ZeroTier/blob/master/Proxmox%20y%20ZeroTier.md 的教程,是由该教程翻译+添油加醋而来,非常感谢原作者。
One comment
感谢!查了一两个小时终于解决了