在 LXC 容器中开启 TUN 模块,通常是为了在容器内部署 VPN 服务(如 WireGuard、Tailscale、ZeroTier 等)或进行特定的网络代理路由。

在宿主机(通常是 Proxmox VE)环境下,你需要直接修改该容器的配置文件。请按照以下步骤操作:

1. 登录宿主机 (Host)

首先,通过 SSH 或直接在控制台登录到你的 PVE 宿主机(注意:不是登录进 LXC 容器内部)。

2. 修改 LXC 配置文件

找到对应容器的配置文件。假设你的容器 ID 是 100,使用你习惯的编辑器打开它:

Bash

nano /etc/pve/lxc/100.conf

(请将 100 替换为你实际的容器 ID)

3. 添加 TUN 挂载权限

在配置文件的最末尾,另起一行,添加以下两行代码。这两行的作用是允许容器访问宿主机的 /dev/net/tun 字符设备,并将其映射到容器内部:

Plaintext

lxc.cgroup2.devices.allow: c 10:200 rwm
lxc.mount.entry: /dev/net/tun dev/net/tun none bind,create=file
注意:目前的系统(如 PVE 7/8 或较新的 Linux 发行版)默认使用的是 cgroup2。如果你使用的是非常老的系统版本,可能需要将第一行改为 lxc.cgroup.devices.allow: c 10:200 rwm。

添加完毕后,保存并退出(在 nano 中按 Ctrl+O,回车确认,然后 Ctrl+X 退出)。

4. 重启容器

配置修改后必须重启容器才能生效。你可以在 PVE 面板上操作,也可以直接在宿主机命令行执行:

Bash

pct stop 100
pct start 100

5. 验证是否开启成功

现在进入你的 LXC 容器内部:

Bash

pct enter 100

在容器内运行以下命令测试 TUN 设备:

Bash

cat /dev/net/tun
  • 如果输出为: cat: /dev/net/tun: File descriptor in bad state

    👉 恭喜,这表示 TUN 已经成功开启并可以正常工作了!(这个“坏的描述符”提示是符合预期的正常现象,说明设备存在但当前没有程序在调用它)。

  • 如果输出为: No such file or directory 或 Permission denied

    👉 说明配置未生效,请检查前面的配置文件拼写是否正确,或者容器是否彻底重启过。


配置完成后,TUN 设备就可以正常被容器内的网络程序调用了。