FreeBSD virtual environment management and repository

2020-10 upd: we reached the first fundraising goal and rented a server in Hetzner for development! Thank you for donating !

Внимание! Данные страницы описывают CBSD версии 13.0.x. Если вы используете более раннюю версию, рекомендуется сначала обновиться.

cbsd FreeBSD jail и VIMAGE (vnet)

Ввиду некоторого объема тонкостей с FreeBSD vnet-jail, информация об этом выведена данную отдельную статью. Во-первых, функционал VIMAGE требует кастомизированного ядра с

		options VIMAGE
	

Если получаете ядро из репозитория cbsd через команду:

	cbsd repo action=get sources=kernel
	

значит ваше ядро VIMAGE поддерживает.

В том случае, если опции в ядре нет, параметр vnet в файле ${workdir}/nc.inventory всегда будет установлен в 0. Если опция в ядре присутствует, в конфигураторе по созданию Jail будет присутствовать параметр vnet.

vnet-featured клетка получает в свое распоряжение полностью виртуализированный и изолированный сетевой стек, что в свою очередь позволяет пользоваться в jail собственным (хоть и виртуальным) интерфейсом, "правильный" loopback, возможность использовать внутри клетки пакетные фильтры (pf, ipfw, pfilter), поднимать туннели и перенастраивать таблицу маршрутизации. При создании vnet-клетки, в поле ip4_addr следует указать 0, что запретит cbsd устанавливать самой IP адрес для vnet клетки.

Примечание: установка IP адреса в vnet клетке пока не реализовано

Также, если вы хотите, чтобы jail получал себе IP адрес автоматически ( через DHCP ), следует написать отдельную секцию devfs.rules, в котором необходимо раскрыть bpf(4)-устройство ( unhide bpf*). Например, дописать в файле /etc/devfs.rules:

[devfsrules_jail=4]
add include $devfsrules_hide_all
add include $devfsrules_unhide_basic
add include $devfsrules_unhide_login
add path zfs unhide
add path 'bpf*' unhide
и указать этот номер (4) devfs vnet-клетке (через cbsd jconfig jname=XXXX).

Также, если вы полностью доверяете контейнеру и приложениям, которые в нем запущены (те, оно - ваше), вы можете в качестве devfs rules в настройках контейнера указать любой несуществующий номер правил, например '99'. Или выбрать тип профиля 'trusted' при создании контейнера через cbsd jconstruct-tui. В таких случаях, внутри контейнера будут все устройства devfs

CBSD создает виртуальные интерфейсы используя пары epair(4), однако "второй конец" виртуального кабеля, который подключается к jail, средствами CBSD переименовывается в интерфейс eth0.

Примечание: данное переименовывание актуально только для FreeBSD клеток. Если в клетке запускается Linux-based клетка, переименовывания не произойдет.

Переименовывание в eth0 вызвано тем, что каждый новый epair инкрементирует номер интерфейса, те, у первого vnet-jail в оригинале, интерфейс будет называться epair0a. В запущенной пятой по счету клетки, интерфейс будет называться epair5a. Что не совсем удобно при миграции клетки (на другом сервере она может быть под другим номером) и однозначно не удобно, что каждый раз вам придется исправлять содержимое rc.conf с сетевой настройкой.

Указываем 0 (empty) в поле ip4_addr при создании vnet-jail

Если ядро имеет VIMAGE опцию, становится возможным установить параметр vnet в 1

Внутри jail. Делаем что хотим, получаем свой IP, настраиваем ipfw