Мне нужен мостовой интерфейс для работы в сети LXC. Обычно я просто делаю что-то вроде этого:
auto br0
iface br0 inet dhcp
bridge_ports eth0
Но Распбиан использует dhcpcd.
Как мне создать мост на RPI?
Спасибо!
Мне нужен мостовой интерфейс для работы в сети LXC. Обычно я просто делаю что-то вроде этого:
auto br0
iface br0 inet dhcp
bridge_ports eth0
Но Распбиан использует dhcpcd.
Как мне создать мост на RPI?
Спасибо!
В Debian Stretch вы можете настроить LXC следующим образом:
(Рекомендуется способ разделения контейнеров на собственную сеть)
1.
apt install --no-install-recommends lxc libvirt-clients debootstrap libpam-cgfs lxcfs uidmap bridge-utils dnsmasq-base
dnsmasq
будет использоваться в качестве DHCP для LXC-контейнеров / тюрем в сети 10.0.55.0/24
Проверьте, все ли готово:
lxc-checkconfig
Если некоторые записи не будут отображаться как "включены", reboot
2.
echo 'veth' >> /etc/modules
3.
insmod /lib/modules/$(uname -r)/kernel/drivers/net/veth.ko
4.
echo '
### adjust and apply
echo 'USE_LXC_BRIDGE="true"
LXC_BRIDGE="lxcbr0"
LXC_BRIDGE_MAC="02:01:02:03:04:05"
LXC_ADDR="10.0.55.1"
LXC_NETMASK="255.255.255.0"
LXC_NETWORK="10.0.55.0/24"
LXC_DHCP_RANGE="10.0.55.100,10.0.55.199"
LXC_DHCP_MAX="100"
LXC_DHCP_CONFILE=""
LXC_DOMAIN=""
' >> /etc/default/lxc-net
С этой конфигурацией вы можете использовать статический IP для джейлов от 10.0.55.2-99, другие будут выбирать IP из DHCP
5.
Разрешить пересылку:
echo '
# For LXC
net.ipv4.ip_forward=1
' >> /etc/sysctl.conf
sysctl -p
systemctl restart lxc-net.service
6.
##### Add to firewall rules and apply
-A FORWARD -d 10.0.55.0/24 -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT
-A FORWARD -s 10.0.55.0/24 -j ACCEPT
-A INPUT -d 224.0.0.251 -s 10.0.55.1 -j ACCEPT
-A INPUT -d 10.0.10.255 -s 10.0.10.1 -j ACCEPT
-A INPUT -d 10.0.10.1 -s 10.0.10.0/24 -j ACCEPT
7.
Настроить хост
echo "kernel.unprivileged_userns_clone=1" > /etc/sysctl.d/80-lxc-userns.conf
sysctl --system
8.
Настройте subuids & subgids для пользователя, который будет запускать LXC
USER=UserThatRunsLXC # <- change
subuids=$(cat /etc/s*id|grep $USER)
[ -z "${subuids}" ] && {
usermod --add-subuids 1258512-1324047 $USER
usermod --add-subgids 1258512-1324047 $USER
}
echo "$USER veth lxcbr0 10"| tee -i /etc/lxc/lxc-usernet
Если вы получили сообщение об ошибке: «Отказано в доступе - не удалось получить доступ к /home/$USER/.local», тогда setfacl -m u:1258512:x . .local .local/share
9.
Сконфигурируйте шаблон по умолчанию для всех будущих непривилегированных контейнеров LXC.
НЕ меняйте xx.xx.xx.xx
, это шаблон MAC-адреса, который будет сгенерирован автоматически
cd /var/lib/lxc
mkdir -p .config/lxc
echo \
'lxc.include = /etc/lxc/default.conf
# Subuids and subgids mapping
lxc.id_map = u 0 1258512 65536
lxc.id_map = g 0 1258512 65536
# Be careful with next option to avoid security issue or lost of data
lxc.mount.auto = proc:mixed sys:ro cgroup:mixed
# Network configuration
lxc.network.type = veth
lxc.network.link = lxcbr0
lxc.network.flags = up
lxc.network.hwaddr = 0A:FF:xx:xx:xx:xx' >.config/lxc/default.conf
10.
Наконец, создайте тюрьму (приспособьтесь к вашим потребностям):
Distributive=alpine
lxc-create -n NameOfyourJail -t ${Distributive} -- -r sid -a amd64
PS
Если вы хотите использовать общий хост-мост вместо NAT-ed-сети для контейнеров, вы можете перейти по этой настройке хоста в качестве моста