Мне периодически нужно поднимать контейнеры на ноутбуке под управлением 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.
Прекрасная статья!
только исправить надо ошибку, в up iptables -t nat -A POSTROUTING -o wlan0 -j MASQUERADE вместо «wlan0» — «eth0» (название внешнего интерфейса)
Это не ошибка, у меня основной интерфейс wlan0, а не eth0.