Hinzufügen
lxc.mount.entry = /dev/net/tun dev/net/tun none bind,create=file
In der Konfigurationsdatei des Containers bind-mount das tun char-Gerät im Container, wodurch das Problem gelöst wird.
Ich verwende debian stretch auf meinem Host und versuche, openvpn in einem Ubuntu xenial LXC-Gast zu konfigurieren.
Da openvpn ein Tun-Gerät benötigt, folgte ich Anleitungen wie http://heider.io/blog/2013/10/26/openvpn-in-a-lxc-container/, um die Erstellung von Tun-Geräten im Container zu ermöglichen.
Leider führt die Einstellung lxc.cgroup.devices.allow = c 10:200 rwm
in der Konfigurationsdatei des Containers zu diesem Fehler:
lxc-start ERROR lxc_cgfsng - cgroups/cgfsng.c:cgfsng_setup_limits:1949 - No such file or directory - Error setting devices.allow to c 10:200 rwm for ubuntu lxc-start ERROR lxc_start - start.c:lxc_spawn:1236 - Failed to setup the devices cgroup for container "ubuntu". lxc-start ERROR lxc_start - start.c:__lxc_start:1346 - Failed to spawn container "ubuntu".
Bearbeiten
Ich versuche, dies in einem nicht privilegierten LXC-Container zu erreichen. Hier ist die vollständige Konfiguration dieses Containers:
# Distribution configuration lxc.include = /usr/share/lxc/config/ubuntu.common.conf lxc.include = /usr/share/lxc/config/ubuntu.userns.conf lxc.arch = x86_64 # Container specific configuration lxc.id_map = u 0 100000 65536 lxc.id_map = g 0 100000 65536 lxc.rootfs = /home/myuser/.local/share/lxc/ubuntu/rootfs lxc.rootfs.backend = dir lxc.utsname = ubuntu # Network configuration lxc.network.type = veth lxc.network.flags = up lxc.network.link = br0 lxc.network.hwaddr = 00:11:22:aa:bb:cc lxc.network.ipv4 = 192.168.1.101/24 lxc.network.ipv4.gateway = 192.168.1.1 # trying to get /dev/net/tun inside container lxc.cgroup.devices.allow = c 10:200 rwm
Wenn ich die devices.allow -Option nicht setze, um den Container starten zu können, sehe ich Prozesse innerhalb des Containers in der cgroup /sys/fs/cgroup/devices/user.slice
(deren PID von außerhalb des Containers betrachtet tatsächlich in der cgroup.procs
Datei dieses Unterverzeichnisses liegt). und von hier:
$ cat devices.list a *:* rwm
aber aus dem Behälter
# mknod /dev/net/tun c 10 200 mknod: /dev/net/tun: Operation not permitted
Hinzufügen
lxc.mount.entry = /dev/net/tun dev/net/tun none bind,create=file
In der Konfigurationsdatei des Containers bind-mount das tun char-Gerät im Container, wodurch das Problem gelöst wird.