ホストでdebianstretchを実行していて、Ubuntu xenialLXCゲスト内でopenvpnを構成しようとしています。
Openvpnにはtunデバイスが必要なので、 http://heider.io/blog/2013/10/26/openvpn-in-a-lxc-container/ などのガイドに従ってtunデバイスを作成できるようにしましたコンテナ内。
残念ながら、コンテナの設定ファイルにlxc.cgroup.devices.allow = c 10:200 rwm
を設定すると、次のエラーが発生します。
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".
編集
特権のないLXCコンテナーでこれを実現しようとしています。このコンテナーの完全な構成は、次のとおりです。
# 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
コンテナを起動できるようにするためにdevices.allowオプションを設定しないと、コンテナ内のプロセスがcgroup /sys/fs/cgroup/devices/user.slice
にあることがわかります(コンテナの外部から見たPIDは、実際にはcgroup.procs
このサブディレクトリのファイル)、およびここから:
$ cat devices.list
a *:* rwm
でもコンテナの中から
# mknod /dev/net/tun c 10 200
mknod: /dev/net/tun: Operation not permitted
追加する
lxc.mount.entry = /dev/net/tun dev/net/tun none bind,create=file
コンテナの設定ファイルで、問題を解決するtuncharデバイスをコンテナ内にバインドマウントします。