вторник, 4 июля 2017 г.

Как включить tun/tap внутри LXC контейнере

Чтобы включить интерфейс tun/tap в LXC контейнере, например для OpenVPN, нужно отредактировать файл конфигурации LXC.
Месторасположение файла по умолчанию:
/etc/lxc/default.conf
Вам нужно добавить
lxc.cgroup.devices.allow = c 10:200 rwm
Также работает в proxmox 4.0.
Чтобы использовать tun/tap интерфейс оно должно быть создано внутри контейнера при каждой загрузке, поэтому добавьте следующее в ваш файл /etc/rc.local внутри вашего контейнера:
if ! [ -d /dev/net ];then
 mkdir /dev/net
fi
if ! [ -c /dev/net/tun ]; then
 mknod /dev/net/tun c 10 200
 chmod 666 /dev/net/tun
fi

persistent devices

lxc guest have their dev recreated on each restart in a tmpfs. This means all devices are reset and are not read from rootfs dev directory. To make it persistent you can use an autodev script by adding the following to your lxc guest config
# tun (openvpn)
lxc.cgroup.devices.allow = c 10:200 rwm
# audodev script to add devices
lxc.hook.autodev=/var/lib/lxc/CONTAINER/autodev
The autodev script would be as following:
#!/bin/sh
# dev is populated on earch container start.
# to make devices persistence we need to recreate them on each start.

cd ${LXC_ROOTFS_MOUNT}/dev
mkdir net
mknod net/tun c 10 200
chmod 0666 net/tun
И еще с итальянского сайта

Configurar el contenedor

Llegados a este punto el contedor tiene permisos para acceder al dispositivo especial de caracteres /dev/net/tun, sin embargo este dispositivo no existe en el contenedor LXC por ello es necesario crear un servicio systemd para automatizar la creación del archivo /dev/net/tun
сat >> /etc/systemd/system/create-net-tun.service << EOF
[Unit]
Description=Create /dev/net/tun device
DefaultDependencies=no
[Service]
Type=oneshot
ExecStart=/usr/bin/mkdir /dev/net
ExecStart=/usr/bin/mknod /dev/net/tun c 10 200
ExecStart=/usr/bin/chmod 666 /dev/net/tun
[Install]
WantedBy=openvpn@.service
EOF
systemctl enable create-net-tun
На этом всё.