如何在 LXD 管理的 LXC 容器中允许 /dev/net/Tun?

如何在 LXD 管理的 LXC 容器中允许 /dev/net/Tun?

我正在尝试让 Openvpn 在 LXD/LXC 容器内运行,并将进入容器的流量重定向到 VPN。

其目的是替换一个完全成熟的 VM,它可以完成这个任务(并且玩弄 LXD :-)

我设法从主 DHCP 服务器获取 IP,设置了用于伪装/转发流量的 iptables 规则,但是当我尝试启动 openvpn 时,由于缺少(访问)/dev/net/tun 设备而被阻止。

我在 ServerFault 上看到了这篇文章https://serverfault.com/questions/429461/no-tun-device-in-lxc-guest-for-openvpn,但它似乎不适用于当前版本的 LXC 和/或 LXD 管理配置......

编辑:我尝试使用这个咒语,但没有成功:

lxc config set mycontainer raw.lxc 'lxc.cgroup.devices.allow = c 10:200 rwm'

EDIT2:尝试过lxc config device add mycontainer tun unix-char path=/dev/net/tun major=10 minor=200,但在下一次停止/启动时,我得到了

错误:配置设备 tun 失败:未实现

现在我甚至无法做到,lxc config device remove mycontainer tun因为它抛出了相同的未实现错误。容器似乎丢失了...

答案1

你要:

lxc config device add CONTAINER tun unix-char path=/dev/net/tun

答案2

我在非特权容器中也遇到了同样的问题。我最终做的是

mknod /path/to/your/container/root/tun c 10 200
chown 100000:100000 /path/to/your/container/root/tun

然后在容器内

mkdir /dev/net
ln -s /root/tun /dev/net/tun

这意味着我不需要对 lxc conf 进行任何更改

答案3

在启动容器之前,你需要在主机上创建 tun 设备:sudo mknod /path/to/your/container/dev/net/tun c 10 200

相关内容