前言

众所周知,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 啦

常见问题

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

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

  2. 我开不了机啦!!!

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

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

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

    检查文件

特别感谢

本文参考了 https://github.com/mentecatoDev/ZeroTier/blob/master/Proxmox%20y%20ZeroTier.md 的教程,是由该教程翻译+添油加醋而来,非常感谢原作者。

Last modification:June 4, 2022
If you think my article is useful to you, please feel free to appreciate