Итак, я хочу знать, как создавать сети на контейнерах LXC. Не только расплывчатая информация, которую вы получаете с других веб-сайтов, но и настоящее руководство для начинающих, как заставить их работать. Поскольку большинство примеров в основном предназначены для людей, с которыми можно проводить тестирование, я хочу запустить службу на одном ... как веб-сервер, например.
Я использую Ubuntu 12.04 LTS, у меня установлен LXC, и я могу создать, запустить и остановить контейнер. Очевидно, мой сервер имеет открытый IP-адрес, и я хотел бы знать, как настроить контейнер, чтобы он тоже мог иметь открытый IP-адрес. Поскольку, кажется, уже существует мост от моего текущего контейнера, может показаться, что я должен либо предоставить контейнерам общедоступный для них диапазон DHCP, либо вручную назначить статический IP-адрес моему контейнеру.
Если я хочу статически назначить IP контейнеру, как мне это сделать? Нужно ли вносить какие-либо изменения в мою конфигурацию моста на хосте? На самом деле лучше сделать это с опцией MACVLAN?
Любая помощь будет оценена.
Ответы:
Мой подход предполагает, что на вашем сервере есть один NIC, и вам нужно разделить этот NIC между хостом и гостями LXC. Это предполагает использование моста. Мост владеет и управляет
eth0
. Хост теперь настраивает свою собственную сетьbr0
вместоeth0
. Гости LXC настроены для подключения к мосту.На хосте
sudo apt-get install bridge-utils
.На хосте замените
eth0
на мост:Это опасно Получите это неправильно, и вы можете быть заблокированы от вашего сервера. Убедитесь, что включен локальный вход в систему и что доступ к локальной консоли работает, чтобы вы могли отменить это изменение, если у вас возникнут проблемы.
В
/etc/network/interfaces
:auto eth0
наauto br0
.Заменить:
с:
Если бы у вас была статическая конфигурация сети, вы бы заменили:
с:
Вы просто изменить
eth0
дляbr0
и добавленияbridge_ports eth0
строки.Перезагрузите хост. Если бы вы делали это локально, то запустились бы
sudo ifdown eth0
до того, как начали, аsudo ifup br0
потом и после. Обратите внимание, что мост может занять некоторое время, поэтому подождите пять минут после перезагрузки, прежде чем предположить, что все потеряно.Чтобы переместить указанный именованный контейнер LXC на общедоступный IP-адрес:
/var/lib/lxc/container_name/config
lxc.network.link
br0
/var/lib/lxc/container_name/rootfs/etc/network/interfaces
eth0
Чтобы изменить значение по умолчанию для новых контейнеров LXC, отредактируйте
/etc/lxc/default.conf
на хосте и изменитеlxc.network.link
наbr0
.Если вам вообще не нужен предоставленный LXC мост NAT (т. Е. Все ваши контейнеры будут использовать новый мост вместо этого), то на хосте отредактируйте
/etc/default/lxc
и изменитеUSE_LXC_BRIDGE
на"false"
, а затем на хосте запуститеsudo service lxc restart
.источник
Роби, большое спасибо за публикацию этого ответа, я старался изо всех сил пытаться добиться этого, и это был единственный метод, который сработал!
Я подумал, что должен упомянуть несколько вещей, которые я выяснил, чтобы помочь прояснить инструкции для других администраторов.
У моего хоста было несколько статических псевдонимов ip, назначенных для гостя eth0, например:
Теперь мы не хотим настраивать br0 таким же образом, мы просто хотим один IP без псевдонимов, как указано выше, как Robie.
Допустим, вы хотите, чтобы 5.5.5.5 был назначен контейнеру debian8.
Отредактируйте
/var/lib/lxc/debian8/etc/network/interfaces
и добавьте:Затем выполните эту команду:
route add default gw <gateway-ip, in my case 5.5.5.1>
После этого перезагрузите контейнер и все должно наконец заработать! :)
источник
У меня была такая же проблема, и у меня есть это решение (быстрое и грязное).
На сервере:
route add -host 194.99.99.99 gw 10.255.255.100 dev lxdbr0
Также при необходимости добавьте маршрут к вышестоящим маршрутизаторам.
Возможно, не лучшее решение, но не требует больших усилий! Приветствия.
источник