💾 Archived View for betahowto.duckdns.org › yggdrasil:yggdrasil_in_lxc captured on 2024-02-05 at 09:55:27. Gemini links have been rewritten to link to archived content

View Raw

More Information

➡️ Next capture (2024-03-21)

-=-=-=-=-=-=-

Yggdrasil в контейнере LXC

Linux containers (LXC) - облегченная технология виртуализации, больше похожая на chroot ( https://ru.wikipedia.org/wiki/chroot ), нежели на полноценную виртуализацию, типа QEMU ( https://ru.wikipedia.org/wiki/QEMU ) или VMware ( https://ru.wikipedia.org/wiki/VMware ). Контейнеры linux не эмулируют оборудование, а используют в режиме разделения то же, что и основная система. Это позволяет запустить несколько контейнеров на одной [даже относительно слабой] машине с минимальными потерями в производительности (менее 1%). Этого невозможно было бы достичь, используя полноценную виртуализацию.

До 2015 года docker ( https://ru.wikipedia.org/wiki/docker ) использовал технологию lxc.

Контейнеры lxc удобно использовать на хостинг-серверах для изоляции динамических контейнеров, а так же, для упрощения разворачивания каких-то приложений, сред разработки и тестирования, их переноса, резервного копирования и других операций.

В этой статье будет приведен простой пример разворачивания контейнера lxc и установки в него ( /yggdrasil:Yggdrasil ).

Таким образом, в целях эксперимента, мы получим два экземпляра Yggdrasil, запущенных на одном устройстве и работающих, как полноценные узлы.

Установка

sudo apt-get install lxc</code>

В других (отличных от Debian ( https://ru.wikipedia.org/wiki/Debian )) дистрибутивах установка выполняется аналогично.

Конфигурирование

Немного поправим конфиги-по-умолчанию.

В файле /etc/lxc/default.conf заменим строку

lxc.net.0.type = empty</code>

на

lxc.net.0.type = veth</code>

Так мы создадим veth-туннель к хост-системе.

И добавим две строчки:

lxc.net.0.link = lxcbr0 # задается мост, к которому будут подсоединяться туннели
lxc.net.0.flags = up # требуется для проверки того, что сетевой интерфейс поднят

В файле /etc/default/lxc заменим строку

USE_LXC_BRIDGE="false"</code>

на

USE_LXC_BRIDGE="true" # мост с именем lxcbr0 создается в процессе старта</code>

И добавим такой кусок с сетевыми параметрами:

LXC_BRIDGE="lxcbr0"
LXC_ADDR="10.0.3.1"
LXC_NETMASK="255.255.255.0"
LXC_NETWORK="10.0.3.0/24"
LXC_DHCP_RANGE="10.0.3.2,10.0.3.254"
LXC_DHCP_MAX="253"
LXC_DHCP_CONFILE=""
LXC_DHCP_PING="true"
LXC_DOMAIN=""

LXC_IPV6_ADDR=""
LXC_IPV6_MASK=""
LXC_IPV6_NETWORK=""
LXC_IPV6_NAT="false"

Убедитесь, что отсутствует файл /etc/default/lxc-net. Если он существует, то строки, начиная с USE_LXC_BRIDGE="true" перенесите в него.

После того, как сделали эти настройки перезапустим сервис lxc-net:

systemctl restart lxc-net.service</code>

Использование

Создание контейнера:

lxc-create -t debian -n deb_ygg</code>

Будет создан контейнер на основе шаблона debian с настройками по-умолчанию, с единственным veth-сетевым интерфейсом, подключенным к мосту хоста lxcbr0. deb_ygg - имя контейнера, располагается он по-умолчанию в /var/lib/lxc.

Разрешим использование в контейнере tun-интерфейса. Для этого в конфигурационный файл контейнера /var/lib/lxc/deb_ygg/config добавим строки:

lxc.mount.entry = /dev/net dev/net none bind,create=dir
lxc.cgroup.devices.allow = c 10:200 rwm

Запуск контейнера в фоне (флаг -d):

lxc-start -n deb_ygg -d</code>

Для запуска с отображением процесса запуска нужно вместо флага -d использовать флаг -F (foreground). Это полезно в случае возникновения каких-то проблем при запуске, чтобы сразу видеть ошибки.

Убедимся, что контейнер запустился, выведем список запущенных контейнеров:

lxc-ls -f</code>

Подключаемся к консоли контейнера:

lxc-attach -n deb_ygg</code>

Далее действия выполняются в консоли контейнера!

В файле /etc/apt/sources.list заменим строку:

deb http://security.debian.org/ stable/updates main</code>

на:

deb http://security.debian.org/debian-security bullseye-security main contrib non-free</code>

(необходимость этого связана с тем, что в релизе изменился путь к репозиторию (Debian 11))

Устанавливаем в контейнер gpg и другие необходимые пакеты:

apt install gpg wget iputils-ping vim</code>

Добавляем ключи и репозиторий yggdrasil (в соответствии с инструкцией для нашего дистрибутива ( https://yggdrasil-network.github.io/installation-linux-deb.html )):

gpg --fetch-keys https://neilalexander.s3.dualstack.eu-west-2.amazonaws.com/deb/key.txt
gpg --export 569130E8CA20FBC4CB3FDE555898470A764B32C9 | apt-key add -
echo 'deb http://neilalexander.s3.dualstack.eu-west-2.amazonaws.com/deb/ debian yggdrasil' | tee /etc/apt/sources.list.d/yggdrasil.list

Устанавливаем yggdrasil:

apt-get update && apt install yggdrasil</code>

Установим редактор для редактирования конфигурационного файла (vim | nano):

apt install vim</code>

Генерируем новый конфигурационный файл Yggdrasil:

yggdrasil -genconf >/etc/yggdrasil.conf</code>

Редактируем /etc/yggdrasil.conf, добавляем пиры ( /yggdrasil:public_peer ) и запускаем:

systemctl enable yggdrasil && systemctl start yggdrasil</code>

Если всё сделано правильно, по команде systemctl status yggdrasil увидим информацию о том, что сервис успешно запущен и IP-адрес yggdrasil внутри контейнера.

При этом, на хостовой машине, одновременно с этим, yggdrasil так же может быть запущен и работать корректно.

Для автозапуска контейнера при загрузке хост-системы добавьте в /var/lib/lxc/deb_ygg/config строку:

lxc.start.auto = 1</code>

Дополнительно

Другие полезные команды lxc:

lxc-stop -n deb_ygg # остановка контейнера
lxc-destroy -n deb_ygg # полное удаление контейнера
lxc-clone -n deb_ygg # создание копии контейнера
lxc-snapshot -n deb_ygg # создание снапшота
lxc-snapshot -n deb_ygg -L # список снапшотов контейнера
lxc-snapshot -n deb_ygg -r snap0 # восстановление из снапшота
lxc-ls # получение списка всех контейнеров
lxc-netstat # netstat в запущенном контейнере
lxc-ps # процессы в запущенном контейнере

deb_ygg - имя конкретного контейнера

Так же, стоит добавить, что под OS Ubuntu существует LXC Web Panel ( https://lxc-webpanel.github.io/index.html ), которая позволяет управлять контейнерами LXC c помощью GUI.

А еще, существует целая система виртуализации Proxmox VE ( https://ru.wikipedia.org/wiki/Proxmox_Virtual_Environment ), которая с версии 4.0 так же поддерживает работу с LXC.

И напоследок рекомендую ознакомиться со статьями, посвященными безопасности LXC (см. ( /yggdrasil:yggdrasil_in_lxc#Ссылки )).

Ссылки

Контейнеры LXC в Linux: https://losst.ru/kontejnery-linux-ustanovka-i-nastrojka-lxc

Офиц. документация Ubuntu: https://help.ubuntu.ru/wiki/руководство_по_ubuntu_server/виртуализация/lxc ( https://help.ubuntu.ru/wiki/%D1%80%D1%83%D0%BA%D0%BE%D0%B2%D0%BE%D0%B4%D1%81%D1%82%D0%B2%D0%BE_%D0%BF%D0%BE_ubuntu_server/%D0%B2%D0%B8%D1%80%D1%82%D1%83%D0%B0%D0%BB%D0%B8%D0%B7%D0%B0%D1%86%D0%B8%D1%8F/lxc )

LXC 1.0: Безопасность - http://vasilisc.com/lxc-1-0-security-features

LXC 1.0: Непривилегированные контейнеры - http://vasilisc.com/lxc-1-0-unprivileged-containers

Настройка Apparmor в Ubuntu - https://losst.ru/nastrojka-apparmor-v-ubuntu-16-04

LXC Web Panel - https://lxc-webpanel.github.io/index.html

Материалы

https://ru.wikipedia.org/wiki/chroot

https://ru.wikipedia.org/wiki/QEMU

https://ru.wikipedia.org/wiki/VMware

https://ru.wikipedia.org/wiki/docker

https://ru.wikipedia.org/wiki/Debian

http://security.debian.org/

http://security.debian.org/debian-security

https://yggdrasil-network.github.io/installation-linux-deb.html

https://neilalexander.s3.dualstack.eu-west-2.amazonaws.com/deb/key.txt

http://neilalexander.s3.dualstack.eu-west-2.amazonaws.com/deb/

https://lxc-webpanel.github.io/index.html

https://ru.wikipedia.org/wiki/Proxmox_Virtual_Environment

https://losst.ru/kontejnery-linux-ustanovka-i-nastrojka-lxc

https://help.ubuntu.ru/wiki/руководство_по_ubuntu_server/виртуализация/lxc

https://help.ubuntu.ru/wiki/%D1%80%D1%83%D0%BA%D0%BE%D0%B2%D0%BE%D0%B4%D1%81%D1%82%D0%B2%D0%BE_%D0%BF%D0%BE_ubuntu_server/%D0%B2%D0%B8%D1%80%D1%82%D1%83%D0%B0%D0%BB%D0%B8%D0%B7%D0%B0%D1%86%D0%B8%D1%8F/lxc

http://vasilisc.com/lxc-1-0-security-features

http://vasilisc.com/lxc-1-0-unprivileged-containers

https://losst.ru/nastrojka-apparmor-v-ubuntu-16-04

Навигация

Поиск

Главная страница

Источник

GitHub

Алиас

[0200::/7]

Alfis / Yggdrasil