Настройка статических ip-адресов для LXC-контейнеров в CentOS 7

Feb 23, 2017 11:15 · 243 words · 2 minute read lxc

Работа с Linux Containers и установленным внутри них софтом значительно упрощается, если использовать статику в настройках сети.

Существует несколько вариантов настройки статических ip-адресов для LXC-контейнеров — давайте разберемся!

Предложенные варианты тестировались в ОС CentOS 7, но должны успешно работать и в других дистрибутивах Linux. Считаем, что все предварительные действия по настройке сети для LXC-контейнеров в Debian Jessie, CentOS 7 и Fedora 21 уже выполнены.

Вариант 1. При выключенном LXC-контейнере редактируем конфигурационный файл /var/lib/lxc/{имя_контейнера}/config, добавляя в него следующие строки:

...
lxc.network.ipv4 = 10.0.3.31/24
lxc.network.ipv4.gateway = auto

В конфигурационном файле /var/lib/lxc/{имя_контейнера}/rootfs/etc/sysconfig/network-scripts/ifcfg-eth0 параметр BOOTPROTO изменяем на none, должно получиться примерно следующее:

DEVICE=eth0
BOOTPROTO=none
ONBOOT=yes
HOSTNAME={имя_контейнера}
NM_CONTROLLED=no
TYPE=Ethernet
MTU=
DHCP_HOSTNAME=`hostname`

На хост-компьютере перезапускаем сервисы, обеспечивающие корректную работу сети для LXC-контейнеров:

systemctl restart lxc-net.service

systemctl restart lxc-dhcp.service

systemctl restart iptables

Далее можно запускать контейнер командой lxc-start -n {имя_контейнера} -d.

Вариант 2. На хост-компьютере открываем на редактирование конфигурационный файл /etc/lxc/dnsmasq.conf и добавляем в него необходимые строки (по одной для каждого LXC-контейнера, который вы хотите запустить) в следующем формате:

dhcp-host={имя_контейнера_1},10.0.3.21
dhcp-host={имя_контейнера_2},10.0.3.22
dhcp-host={имя_контейнера_3},10.0.3.31

Убедимся, что в настройках юнита lxc-dhcp.service присутствует (а если нет, то добавим) следующая строка --conf-file=/etc/lxc/dnsmasq.conf \:

cat /etc/systemd/system/lxc-dhcp.service
[Unit]
Requires=lxc-net.service
Requires=sys-devices-virtual-net-lxcbr0.device
After=sys-devices-virtual-net-lxcbr0.device
 
[Service]
ExecStart=/sbin/dnsmasq \
            --dhcp-leasefile=/var/run/lxc-dnsmasq.leases \
            --user=nobody \
            --group=nobody \
            --keep-in-foreground \
            --conf-file=/etc/lxc/dnsmasq.conf \
            --listen-address=10.0.3.1 \
            --except-interface=lo \
            --bind-interfaces \
            --dhcp-range=10.0.3.2,10.0.3.254
 
[Install]
WantedBy=default.target

Если в настройки юнита вносились изменения, то необходимо применить их командой:

systemctl daemon-reload

Далее перезапускаем сервисы отвечающие за корректную работу сети LXC-контейнеров:

systemctl restart lxc-net.service
systemctl restart lxc-dhcp.service
systemctl restart iptables

и запускаем контейнеры!

tweet Share