Установка Calculate в Debian LXC
Обновлено 7 марта 2019
Введение
Далеко не каждый хостинг-провайдер, предоставляющий услуги размещения VPS/VDS-серверов, позволяет установить свой дистрибутив из ISO-образа, дав возможность на выбор установить одну из самых распространённых систем. Несмотря на это, у вас всегда остаётся возможность работать с Calculate Linux в контейнере. У подобного решения целый ряд плюсов, вот только основные из них:
- Ваша система не привязана к провайдеру и может быть легко перенесена;
- Вы можете поднимать неограниченное количество контейнейров с Calculate Linux для решения разного рода задач.
Для примера приведены настройки хост-системы под управлением Debian 9.
Настройка сетевого моста
Установите необходимые программы:
apt-get install bridge-utils
Выполните настройку сетевого моста, дописав в конец файла:
/etc/network/interfaces
auto br0 iface br0 inet static bridge_ports none bridge_fd 0 address 192.168.0.1 netmask 255.255.255.0
Перезапустите сеть:
systemctl restart networking
Убедитесь, что заработал сетевой интерфейс br0:
br0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500 inet 192.168.0.1 netmask 255.255.255.0 broadcast 192.168.0.255 inet6 fe80::418:f4ff:fe48:10e9 prefixlen 64 scopeid 0x20<link> ether 06:18:f4:48:10:e9 txqueuelen 1000 (Ethernet) RX packets 0 bytes 0 (0.0 B) RX errors 0 dropped 0 overruns 0 frame 0 TX packets 5 bytes 438 (438.0 B) TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
Установка контейнера с Calculate Linux
Выполните установку необходимых программ. Для распаковки образа системы нам понадобится пакет app-arch/xz-utils:
apt-get install lxc xz-utils
Установите свежую версию дистрибутива Calculate Container Scratch. В качестве имени контейнера используется calculate. Программа попросит ввести номер версии дистрибутива из списка доступных 17.12.2:
Downloading the image index
WARNING: Running without gpg validation!
---
DIST RELEASE ARCH VARIANT BUILD
---
CCS 17.12.2 x86_64 default 20180221
---
Release: 17.12.2
Downloading the image index
Downloading the rootfs
Downloading the metadata
The image cache is now ready
Unpacking the rootfs
---
You just created a Gentoo container (release=17.12.2, arch=amd64, variant=default)
To enable sshd, run: rc-update add sshd
For security reason, container images ship without user accounts
and without a root password.
Use lxc-attach or chroot directly into the rootfs to set a root password
or create user accounts.
Отредактируйте настройки контейнера:
/var/lib/lxc/calculate/config
# Network configuration lxc.network.type = veth lxc.network.flags = up lxc.network.name = eth0 lxc.network.link = br0 lxc.network.ipv4.address = 192.168.0.2/24 lxc.network.ipv4.gateway = 192.168.0.1 lxc.start.auto = 1
Запустите контейнер и добавьте службу в автозагрузку:
systemctl start lxc
Synchronizing state of lxc.service with SysV service script with /lib/systemd/systemd-sysv-install. Executing: /lib/systemd/systemd-sysv-install enable lxc
Чтобы убедиться, что контейнер поднят, выполните:
Name: calculate State: RUNNING PID: 20111 IP: 192.168.0.2 CPU use: 8.16 seconds BlkIO use: 50.00 MiB Memory use: 58.30 MiB KMem use: 6.67 MiB Link: veth0 TX bytes: 858 bytes RX bytes: 438 bytes Total bytes: 1.27 KiB
Настройка Calculate Linux
Подключитесь к системе в контейнере и выполните базовые настройки: установите пароль root, поднимите службу sshd и выполните локализацию системы:
lxc-attach -n calculate
passwd
/etc/init.d/sshd start
rc-update add sshd default
cl-setup-locale -l ru_RU
exit
Настройка межсетевого экрана
Настройку файрвола и маршрутизации будем выполнять при помощи Shorewall. Установите эту программу:
apt-get install shorewall
Перенесём шаблоны настроек:
cp /usr/share/shorewall/configfiles/{interfaces,policy,rules,snat,zones} /etc/shorewall/
Измените основные настройки Shorewall, разрешив пробрасывать пакеты:
/etc/shorewall/shorewall.conf
IP_FORWARDING=On
Нам понадобится узнать имя сетевого интерфейса для использования в настройках. Для этого выполните:
ifconfig
...
ens3: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
Важно
В последующих настройках указан сетевой интерфейс ens3. Используйте своё значение!
/etc/shorewall/conf.d/zones
#ZONE TYPE fw firewall loc ipv4 net ipv4
Привяжите сетевые интерфейсы к зонам, добавив настройки фильтрации:
/etc/shorewall/conf.d/interfaces
?FORMAT 2 #ZONE INTERFACE OPTIONS net ens3 tcpflags,nosmurfs,routefilter loc br0 tcpflags,nosmurfs,routefilter,routeback
Настройте трансляцию сетевых адресов (маскарадинг) для доступа к интернету из контейнера:
Важно
Адрес 12.34.56.78 замените на свой внешний IP.
/etc/shorewall/conf.d/snat
#ACTION SOURCE DEST SNAT(12.34.56.78) 192.168.0.0/24 ens3
Настройте политику взаимодействия между зонами: разрешены соединения внутри локальной зоны, запрещены все входящие соединения из интернета:
/etc/shorewall/conf.d/policy
#SOURCE DEST POLICY LOGLEVEL fw all ACCEPT loc all ACCEPT net all DROP all all REJECT INFO
Настройте правила доступа к хост-системе, разрешив ping и ssh, и правило проброса по 222 порту к ssh контейнера:
/etc/shorewall/conf.d/rules
?SECTION NEW #ACTION SOURCE DEST PROTO DPORT Ping(ACCEPT) all $FW SSH(ACCEPT) net $FW DNAT net loc:192.168.0.2:22 tcp 222
Запустите(@debian) Shorewall:
shorewall start
Для проверки соединения попробуйте зайти в контейнер по ssh, используя порт 222:
ssh -p 222 server.example.org
где server.example.org - адрес сервера.
Если всё работает, добавьте Shorewall в автозагрузку:
Synchronizing state of shorewall.service with SysV service script with /lib/systemd/systemd-sysv-install. Executing: /lib/systemd/systemd-sysv-install enable shorewall