Настройка bridge-интерфейса LXC в Debian 8 для NAT

Настройка bridge-интерфейса LXC в Debian 8 для NATМне периодически нужно поднимать контейнеры на ноутбуке под управлением Debian для развертывания различных приложений «попробовать» перед установкой на сервер. Или отладить какой-нибудь скрипт, который работает по сети. В таких случаях самый удобный вариант — использовать NAT, чтобы контейнер был доступен с хоста, но при этом самому контейнеру был доступен Интернет для установки необходимых пакетов. После установки LXC в Debian 8 «Jessie» бридж-интерфейс автоматически не поднимается, поэтому после установки придется еще кое-что сделать.

Установка пакетов

Поставим необходимые пакеты. Самое необходимое — bridge-utils

apt-get install bridge-utils

Если планируете настраивать DHCP для контейнеров, то необходимо установить также dnsmasq, который будет слушать на бридж-интерфейсе

apt-get install dnsmasq

Теперь настраиваем непосредственно бридж

Настройка

1. Раскомментируем следующую строчку в /etc/sysctl.conf (если ее там нет, до добавляем)

net.ipv4.ip_forward=1

2. Записываем в /etc/network/interfaces

auto lxcnat0
iface lxcnat0 inet static
    bridge_ports none
    bridge_fd 0
    bridge_maxwait 0
    address 10.0.3.1
    netmask 255.255.255.0
    up iptables -t nat -A POSTROUTING -o wlan0 -j MASQUERADE

Это тот самый бридж, через который мы будем коммуницировать с контейнером. Теперь можно поднять этот бридж-интерфейс. Самый простой вариант:

service networking restart

Теперь вы можете видеть сетевой интерфейс lxcnat0 в выводе команды ifconfig.

3. Если нужно включить форвардинг до перезагрузки, выполняем команду

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

4. Теперь настраиваем сеть самого контейнера. В файле настроек контейнера (в моем случае /var/lib/lxc/debian-webserver/config) указываем

lxc.network.link = lxcnat0
lxc.network.ipv4 = 10.0.3.10/24
lxc.network.ipv4.gateway = 10.0.3.1

Теперь после старта контейнера с хоста он будет доступен по своему адресу 10.0.3.10. Это, как вы понимаете, настройка статического адреса, без использования DHCP. Для настройки DHCP поднимается, например, dnsmasq, который будет слушать на бридж-интерфейсе lxcnat0. В таком случае адреса будут выдаваться автоматически и адрес в настройках контейнера будет выглядеть так:

lxc.network.ipv4 = 0.0.0.0/24

После старта вы можете проверить, действительно ли контейнер доступен по сети. В первую очередь, проверяем вывод команды «lxc-ls —fancy»

# lxc-ls --fancy
NAME              STATE    IPV4       IPV6  AUTOSTART  
-----------------------------------------------------
debian-webserver  RUNNING  10.0.3.10  -     NO

И теперь вы можете заходить по ssh и выполнять все необходимые операции по настройке системы. По окончании при необходимости можно сделать перенаправление необходимых портов на интерфейс хоста при помощи iptables.

Настройка bridge-интерфейса LXC в Debian 8 для NAT: 2 комментария

  1. Stanislav

    Прекрасная статья!
    только исправить надо ошибку, в up iptables -t nat -A POSTROUTING -o wlan0 -j MASQUERADE вместо «wlan0» — «eth0» (название внешнего интерфейса)

    1. mnorin Автор записи

      Это не ошибка, у меня основной интерфейс wlan0, а не eth0.

Обсуждение закрыто.