Как включить 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 deviceDefaultDependencies=no[Service]Type=oneshotExecStart=/usr/bin/mkdir /dev/netExecStart=/usr/bin/mknod /dev/net/tun c 10 200ExecStart=/usr/bin/chmod 666 /dev/net/tun[Install]WantedBy=openvpn@.serviceEOF
systemctl enable create-net-tunНа этом всё.