我正在尝试在 lxc 客户端中设置 openvpn 服务器。但是,容器中似乎没有可用的 tun 设备。
在容器内启动 openvpn 出现以下错误:
Tue Sep 18 13:04:18 2012 Note: Cannot open TUN/TAP dev /dev/net/tun: No such file or directory (errno=2)
Tue Sep 18 13:04:18 2012 do_ifconfig, tt->ipv6=0, tt->did_ifconfig_ipv6_setup=0
Tue Sep 18 13:04:18 2012 /sbin/ifconfig 10.6.0.1 pointopoint 10.6.0.2 mtu 1500
SIOCSIFADDR: No such device
: ERROR while getting interface flags: No such device
SIOCSIFDSTADDR: No such device
: ERROR while getting interface flags: No such device
SIOCSIFMTU: No such device
Tue Sep 18 13:04:18 2012 Linux ifconfig failed: external program exited with error status: 1
Tue Sep 18 13:04:18 2012 Exiting
在我的容器配置中,我看到以下内容:
#tun
lxc.cgroup.devices.allow = c 10:200 rwm
我认为这为容器启用了 tun 设备,但是 modprobe tun 给了我另一个错误:
FATAL: Could not load /lib/modules/3.2.0-30-generic/modules.dep: No such file or directory
我猜想我的容器缺少某些权限或其他东西。有人能告诉我是什么吗?
答案1
我不熟悉龙芯,请尝试以下命令:
# mkdir /dev/net
# mknod /dev/net/tun c 10 200
# chmod 666 /dev/net/tun
答案2
上述答案实际上现在不适用于 的当前版本lxc
。手动创建 的字符设备mknod
没有任何效果 - 该设备在容器内不可见。需要使用autodev
中的功能。lxc
- 对于具有以下项的系统,
systemd
请参阅LXC 配置在Linux 容器中的 OpenVPN 的 Arch Linux Wiki:
lxc.mount.entry = /dev/net dev/net none bind,create=dir
lxc.cgroup2.devices.allow = c 10:200 rwm
- 在 Alpine Linux 容器中(没有
systemd
),我使用:
lxc.cgroup.devices.deny = a
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"
顺序很重要——deny
必须是第一个。
答案3
除了 quanta 的答案之外。还要确保 lxc 配置中有此行:
mknod /dev/net/tun c 10 200
这是正确的语法:
#tun
lxc.cgroup.devices.allow = c 10:200 rwm
答案4
根据我们的托管服务提供商 EURO-SPACE 的建议,这些是如何在 Proxmox LXC 容器上启用 TUN/TAP 的步骤:
确保您的容器是特权的,如果不是,则备份该容器,然后恢复它并检查“特权容器”。
关闭容器并编辑位于 /etc/pve/lxc/CTID.conf 下的配置文件(CTID 是容器的 ID)
在文件末尾添加以下行:
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”
保存配置文件并启动容器。
通过运行以下命令确保 TUN 已启用:
猫/ dev / net / tun
这应该输出以下内容:
cat:/dev/net/tun:文件描述符处于错误状态
现在您可以运行VPN。