MyTetra Share
Делитесь знаниями!
Как через FireJail запустить несколько копий программы, чтобы каждая была со своим IP в своей подсети
Время создания: 23.07.2024 13:49
Автор: xintrea
Текстовые метки: изоляция, FireJail, сеть, подсеть, IP, адрес, сетевой, интерфейс, linux, debian, astra, отладка, разработка
Раздел: Компьютер - Linux - Виртуализация и эмуляция - FireJail
Запись: xintrea/mytetra_syncro/master/base/172173177538ygzhvw30/text.html на raw.github.com

FireJail - это система изоляции в Linux. Обычно она применяется для того, чтобы безопасно запускать программы (бинарники) от недоверенного производителя, жестко ограничив доступные ресурсы операционки.





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



  • Изолировать сеть
  • Изолировать звук
  • Изолировать графику
  • Ограничивать доступ к файловой системе по заданным правилам
  • Создавать приватный самоуничтожающийся домашний каталог
  • Ограничивать процессорное время и доступ к ядрам
  • и другое



Таким образом, FireJail можно использовать для разных вещей. Например, можно организовать отладку какого-нибудь сетевого ПО, для которого надо запустить несколько различных серверов, клиентов, агентов, нод и их копий на машине разработчика. И сделать это можно без использования тажеловесной виртуализации. Идея в том, что для каждого инстанса (экземпляра) программы, через FireJail создается среда, в которой создан специально настроенный сетевой интерфейс со своим IP и подсетью. А чтобы эти экземпляры видели друг друга в пределах одного компьютера, на нем создается интерфейс-мост, и настраивается соответствующая маршрутизация через iptables.


В этой статье рассказывается, как это можно сделать.


* * *


На AstraLinux SE 1.6, AstraLinux SE 1.7 и AstraLinux SE 1.8 утилита FireJail установлена по умолчанию. Проверить наличие можно вызовом:



sudo firejail --version



Если запускаемая в изоляции программа имеет графический интерфейс, то нужна специальная настройка. Для вывода графики X11 требуется однократно после загрузки основной (хостовой) системы выполнить команду:



sudo xhost +local:root



В общем виде запуск программы из каталога программы выглядит так:



sudo firejail --noprofile ./runOurProgram.sh



То есть, программа как-бы запускается из-под FireJail.


Для запуска программы в другой подсети команда запуска использует дополнительные опции:



sudo firejail --noprofile --net=eth0 --ip=192.168.0.x ./runOurProgram.sh



Это пример того, как создать инстанс в текущей сети, в которой находится хостовый компьютер. В этой команде eth0 - существующий сетевой адаптер основной системы а 192.168.0.x - желаемый IP-адрес сети (текущая сеть - 192.168.0.0/24).


Непонятно почему, но данный инстанс не будет доступен по сети с локального компьютера. Видимо, это влияние системы изоляции. Надо разбираться дальше.


Для решения этой проблемы надо однократно после загрузки системы выполнить скрипт создания моста на создаваемом для этой цели интерфейсе br0:



#!/bin/bash

#

# Routed network configuration script

#

# bridge setup

brctl addbr br0

ifconfig br0 10.10.20.1/24 up


# enable ipv4 forwarding

echo "1" > /proc/sys/net/ipv4/ip_forward


# netfilter cleanup

iptables --flush

iptables -t nat -F

iptables -X

iptables -Z

iptables -P INPUT ACCEPT

iptables -P OUTPUT ACCEPT

iptables -P FORWARD ACCEPT


# netfilter network address translation

iptables -t nat -A POSTROUTING -o eth0 -s 10.10.20.0/24 -j MASQUERADE



Далее вызов экземпляра программы в подсети 10.10.20.0/24 с IP 10.10.20.1 с использованием моста br0 происходит через команду:



sudo firejail --noprofile --net=br0 --ip=10.10.20.1 ./runOurProgram.sh



где br0 - сетевой адаптер моста а 10.10.20.1 - желаемый IP-адрес сети.



 
MyTetra Share v.0.65
Яндекс индекс цитирования