<Предыдущая | Содержание: | Следующая>
6.4. сетей
По умолчанию LXC создает пространство имен частной сети для каждого контейнера, который включает сетевой стек уровня 2. Контейнеры обычно подключаются к внешнему миру, передавая в контейнер физический сетевой адаптер или конечную точку veth-туннеля. LXC создает мост с NAT, lxcbr0, при запуске хоста. Контейнеры, созданные с использованием конфигурации по умолчанию, будут иметь один veth NIC с удаленным концом, подключенным к мосту lxcbr0. Сетевая карта может существовать только в одном пространстве имен одновременно, поэтому физическая сетевая карта, переданная в контейнер, не может использоваться на хосте.
Можно создать контейнер без пространства имен частной сети. В этом случае контейнер будет иметь доступ к сети хоста, как и любое другое приложение. Учтите, что это особенно опасно, если
контейнер запускает дистрибутив с выскочкой, например Ubuntu, поскольку программы, которые взаимодействуют с init, например выключение, будет разговаривать по абстрактному сокету домена Unix с выскочкой хоста и выключить хост.
Чтобы дать контейнерам на lxcbr0 постоянный IP-адрес на основе имени домена, вы можете записывать записи в / etc / lxc / dnsmasq.conf как:
dhcp-host = lxcmail, 10.0.3.100 dhcp-host = ttrss, 10.0.3.101
Если желательно, чтобы контейнер был общедоступным, есть несколько способов сделать это. Один из них - использовать
iptables для перенаправления портов хоста в контейнер, например
iptables -t nat -A PREROUTING -p tcp -i eth0 --dport 587 -j DNAT \
- в пункт назначения 10.0.3.100:587
Другой - соединение сетевых интерфейсов хоста (см. Главу «Конфигурация сети» Руководства по серверу Ubuntu, раздел 1.4, «Мостовое соединение» [стр. 46]). Затем укажите мост хоста в файле конфигурации контейнера вместо lxcbr0, например
lxc.network.type = veth lxc.network.link = br0
Наконец, вы можете попросить LXC использовать macvlan для сетевой карты контейнера. Обратите внимание, что это имеет ограничения и в зависимости от конфигурации может не позволять контейнеру взаимодействовать с самим хостом. Поэтому два других варианта предпочтительнее и используются чаще.
Есть несколько способов определить IP-адрес контейнера. Во-первых, вы можете использовать lxc-ls - фантазии который напечатает IP-адреса для всех запущенных контейнеров, или lxc-информация -i -H -n C1 который напечатает IP-адрес C1. Если на хосте установлен dnsmasq, вы также можете добавить запись в /etc/dnsmasq.conf следующее
сервер = / lxc / 10.0.3.1
после чего dnsmasq разрешит C1.lxc локально, чтобы вы могли:
пинг C1 ssh C1
Для получения дополнительной информации см. Справочную страницу lxc.conf, а также примеры сетевых конфигураций в разделе / usr / share / doc / lxc / examples /.