LINUX.ORG.RU

Как правильно организовать изолированное окружение?

 , ,


1

2

Нужно организовать тестовое окружение. Нужно, чтобы были доступны сетевые интерфейсы хоста. Это тапы, туннели openvpn. Еще раз запустить их внутри допустим контейнера нельзя - так как тогда падают на хосте. Статически прокинуть как-то тоже, т.к. они то падают, то опять переподключаются.
При всем этом не должны быть видны процессы хоста, т.к. один скрипт д.б. запущен в одном экземпляре.
Подскажите, как правильно сделать?

★★★★★

Нужно организовать тестовое окружение.
При всем этом не должны быть видны процессы хоста, т.к. один скрипт д.б. запущен в одном экземпляре.

Контейнеры как раз для изоляции от хоста.

Yustas ★★★★
()
Ответ на: комментарий от Yustas

Да, но мне при этом нужен доступ к сетевым интерфейсам на хосте

Qwentor ★★★★★
() автор топика

То, что ты хочешь никак не похоже на изолированное окружение. Но кажется я понял что ты хочешь, ты хочешь поднять копию/теже сервисы, что и на реальной машине внутри контейнера. Тут тебе на помощь приходит либо вторая реальная сетевая карта (physical, если хост нагружен), либо macvlan, это если называть вещи в рамках lxd. Потом ты просто поднимаешь все те же сервисы и интерфейсы внутри контейнера. Виртуалка тоже подойдет.

anonymous_sama ★★★★★
()
Ответ на: комментарий от anonymous_sama

Второй IP есть, но проблема в том, что используются VPN от hideme.ru, а их нельзя поднять дважды - падают, поэтому нужен доступ к тапам на хосте.

Qwentor ★★★★★
() автор топика
Ответ на: комментарий от Qwentor

Можно сделать bridge c интерфейса хоста в вм или контейнер. Или попросить тестовые VPN скажем на неделю у сабжа, как клиент. Обычно дают тестовые VPN на какой-то короткий срок.

anonymous_sama ★★★★★
()
Последнее исправление: anonymous_sama (всего исправлений: 1)
Ответ на: комментарий от anonymous_sama

Bridge не могу, т.к. интерфейсы существуют не постоянно. А нужно не на короткий срок, а на весь перманентный срок разработки.. Выход только в покупке второго комплекта VPN?

Qwentor ★★★★★
() автор топика
Ответ на: комментарий от Qwentor

Можешь спросить у Stéphane Graber'а в lxd как такое сделать, он очень крут, и на вопросы в том числе не против ответить. Тут мне кажется все-таки unix-char для того же tun будет недостаточно, я много какие интерфейса с lxd контейнере поднимал и tun и sit и туннели, но с хоста пробрасывал только сетевые карты. В kvm такое наверняка можно сделать. Проблема в том что с macvlan у тебя получится как-бы еще один такое же интерфейс, а если пробросить совсем, то интерфейс уйдет с хоста в контейнер/вм.

anonymous_sama ★★★★★
()
Ответ на: комментарий от anonymous_sama

Вообще интерфейсы поднятые в контейнере, те же tun все равно просвечиваются на хост, возможно тебе этого будет достаточно. И ты можешь и задавать их на том же хосте, если поднимешь в контейнере и контейнере тоже. Более того, на хосте у тебя лучший доступ к интерфейсу, например root можешь задавать тот же txqueuelen для tun. Короче попробуй, думаю тебе и этого достаточно будет.
Более того, на хосте у тебя лучший доступ к интерфейсу, например root можешь задавать тот же txqueuelen для tun. Короче попробуй, думаю тебе и этого достаточно будет.

lxc config device add containername tun unix-char path=/dev/net/tun
Возможно также закомментировать LimitNPROC в unit'е openvpn придется, если захочешь запускать openvpn в контейнере. Для туннелей, например того же sit, нужно будет сделать modprobe на хосте сначала, так как в отличии от tun модуль загружен не будет скорей всего, потом конечно можешь добавить в modules на хосте.
Т.е. в твоем случае принципиальной разницы где поднимать интерфейс нет, потому-что он все равно будет просвечивать на хост, вот что я имел в виду.

anonymous_sama ★★★★★
()
Последнее исправление: anonymous_sama (всего исправлений: 1)
Ответ на: комментарий от Ivan_qrt

Оно будет так как мне нужно? Будет доступ к сетевым интерфейсам хоста, а к процессам нет?

Qwentor ★★★★★
() автор топика
Ответ на: комментарий от anonymous_sama

Ммм.. Вполне может быть.. Вот только боюсь в скором времени понадобятся 2 тестовых окружения и тогда этот способ не подойдёт..

Qwentor ★★★★★
() автор топика

Если речь идёт чисто об изоляции процессов, то тебе помог бы unshare, только он не умеет unshar'ить PID namespace. Можешь написать простенький wrapper, который будет делать clone() с флагом CLONE_NEWPID - запущенный таким образом процесс получит новый PID namespace и не увидит другие процессы.

tiandrey ★★★★★
()
Ответ на: комментарий от tiandrey

чисто об изоляции процессов

В общем, да, но не по одиночке, группа скриптов должна видеть друг друга, а другую группу нет, как-то так тогда

Можешь дать ссыль на этот unshare?

Qwentor ★★★★★
() автор топика
Последнее исправление: Qwentor (всего исправлений: 1)
Ответ на: комментарий от Qwentor

Ну, будет создано новое пространство имён для процессов, изнутри него не будут видны процессы в основном неймспейсе, но созданные там процессы будут видеть друг друга.

man 1 unshare
man 2 unshare
man 2 clone

tiandrey ★★★★★
()
Ответ на: комментарий от Ivan_qrt

systemd-nspawn подошел на 100%, спасибо

Qwentor ★★★★★
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.