无特权容器
在宿主机(PVE)中修改 /etc/pve/lxc/<容器id>.conf
文件。
可直接在 PVE 的 Shell 中执行以下操作:
nano /etc/pve/lxc/<容器id>.conf
然后在其末尾添加以下代码:
lxc.hook.autodev = sh -c "modprobe tun"
lxc.mount.entry=/dev/net/tun /var/lib/lxc/<容器id>/rootfs/dev/net/tun none bind,create=file
保存后重启容器即可。
特权容器
同样需要在宿主机(PVE)中修改 /etc/pve/lxc/<容器id>.conf
文件。
在其末尾添加以下代码:
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"
功能验证
在启动后的容器中执行 ls -lh /dev/net
,将得到类似以下的内容:
total 0
crw-rw-rw- 1 nobody nogroup 10, 200 Jan 17 20:32 tun
若无内容输出则未开启 tun
特权容器的区分
1、通过 PVE 管理界面中对应容器的 概要 界面中 无特权 后面的 “是” 或 “否” 来区分。
2、在编辑/etc/pve/lxc/<容器id>.conf
文件时,若里面有 unprivileged: 1
字段则为无特权容器。
废话文学
最近,我发现了一个名为 EasyTier 的开源项目,其核心功能是实现内网穿透与异地组网。初步了解后,感觉它似乎相当不错,不少人评价它比Tailscale还要好用。于是,我依照作者提供的项目文档,尝试进行部署使用。然而,对于我这个从事机械行业的人来说,相关知识储备实在有限,虽略懂皮毛,但实际操作起来却困难重重,处处碰壁。
首先我的服务器端和本地都是使用 1panel 面板,我直接在应用商店进行安装部署。然后按照项目文档给出的指令操作,却未能成功。于是我直接将项目文档中的配置部分直接复制出来,简单修改后应用到配置文件中,就这样完成了服务器端的部署。
接着进行本地端部署,这下子就开始状况不断。先是在 1panel 面板中安装的 EasyTier 无法正常启动,无奈之下,我下载了Windows版本的GUI安装包,安装到电脑上,配置好后能够连接到服务器端。随后,我将配置文件拷贝出来,替换 1panel 上安装的配置文件,可依然无法启动。我寻思着,要不本地装个 Ubuntu 桌面环境版本,看看 Linux 端 EasyTier 的 GUI 版本配置文件是否有所不同,结果 Linux 版本的 GUI 程序根本打不开。
鉴于这些情况,我加入了交流群。群里有个公告,提到了 CG888 大佬的一键配置脚本,我便依照脚本快速部署,结果还是无法运行。好在群里大佬众多,终于有人帮我指出无法运行的原因——没有开启 tun 。说实话,我压根不知道 tun 是什么东西,虽然项目文档里有所提及,但我根本不理解。于是,我又开始查询 tun 相关知识,以及在 PVE 中 LXC 容器如何开启 tun,这才有了上面的记录。