Как настроить внешние IP-адреса для гостей LXC?

18

Я исследую возможности LXC в Ubuntu 12.04 и очень хочу настроить сеть следующим образом:

client1:   192.168.56.101/24
lxc-host:  192.168.56.102/24
guest1     192.168.56.201/24
guest2     192.168.56.202/24
guest3     192.166.56.203/24

Мне просто нужна «плоская» сеть, где гости имеют полный доступ к локальной сети и видны со стороны клиентов. Я привык соединять сети с помощью libvirt / KVM, как описано здесь: http://libvirt.org/formatdomain.html#elementsNICSBridge

На хосте:

# /etc/network/interfaces
auto br0
iface br0 inet static
    address 192.168.56.102
    netmask 255.255.255.0
    broadcast 192.168.56.255
    bridge_ports eth1

lxc.conf для первого гостя:

# /var/lib/lxc/guest1/config:
lxc.network.type=veth
lxc.network.link=br0
lxc.network.flags=up
lxc.network.hwaddr=00:16:3e:13:48:4e
lxc.network.ipv4=192.168.56.201/24

Похоже, что 192.168.56.201 невидим для внешнего мира, а это не то, чего я хочу. Похоже, я должен сделать одну из следующих вещей:

1) Вручную настроить маршрутизацию на хосте и госте

2) Сделайте что-нибудь хоккейное ... заранее создайте виртуальные интерфейсы на хосте и настройте гостей для их использования lxc.network.type=phys. Я не знаю, сработает ли это на самом деле.

Я сосредоточен на Ubuntu, но ответы на RHEL / Fedora тоже были бы полезны ...

twblamer
источник
1
Продолжение: я установил br0 в беспорядочный режим, и теперь он, кажется, делает то, что я хочу. Я предполагаю, что это стандартная практика, но она не была рассмотрена ни в одном из многих руководств LXC, которые я прочитал. Я оставлю этот вопрос открытым на время, если получу какой-либо отзыв ...
twblamer
Я сделал примерно то же самое (за исключением чуть более ручной настройки): скрипт netup в каждой конфигурации lxc для добавления veth к мосту (на хосте), ручная настройка IP в каждом контейнере, дополнительный скрипт / интерфейс в каждом контейнере up маршрутизация (через пересылку ip4 на хост). Но, насколько я вижу, оба решения означают, что контейнер может устанавливать собственный IP-адрес практически во что угодно (а также добавление основного интерфейса хоста к мосту немного неудобно). Поэтому я также заинтересован в некоторых отзывах / решениях.
HoverHell

Ответы:

13

Это в значительной степени верно, хотя вы упускаете такую ​​строку:

lxc.network.ipv4.gateway = X.X.X.X

У меня гость LXC, работающий на Debian. Сначала вы устанавливаете хост-мост (простой способ) в /etc/network/interfaces:

auto wan
iface wan inet static
        address 72.X.X.X
        netmask 255.255.255.0
        gateway 72.X.X.1
        bridge_ports wan_phy    # this line is important.
        bridge_stp off
        bridge_fd 2
        bridge_maxwait 20

В твоем случае ты назвал это br0, и я назвал это wan. Мост можно назвать как угодно. Сначала вы получаете эту работу - если она не работает, исследуйте с помощью (например,)brctl

Тогда ваш конфиг LXC настроен для подключения к этому мосту:

lxc.utsname = FOO
lxc.network.type = veth
lxc.network.link = wan                  # remember, this is what I call my bridge
lxc.network.flags = up
lxc.network.name = v-wan                # optional, I believe
lxc.network.ipv4 = 72.X.X.Y/24          # different IP than the host
lxc.network.ipv4.gateway = 72.X.X.1     # same as on the host

Как отмечает HoverHell, кто-то с root в контейнере может изменить IP-адрес. Ага. Это мост (он же Ethernet-коммутатор). Если вы хотите предотвратить это, вы можете использовать правила брандмауэра на хосте - по крайней мере, в моем случае пакеты должны проходить через iptables хоста.

derobert
источник
10
Спасибо всем. Это отчасти грустно, но я просто вернулся к этому, нашел это через Google и забыл, что я был оригинальным
аскером
2
@derobert: не уверен, что это было доступно тогда, но autoтакже является допустимым значением lxc.network.ipv4.gatewayи, по моему мнению, по умолчанию - IP-адрес моста, к которому подключается veth-интерфейс.
0xC0000022L
Требуется ли для интерфейса моста собственный IP-адрес? Если wan_phyон подключен к Интернету, то IP-адрес моста должен быть еще одним действительным общедоступным IPv4-адресом, поскольку он должен находиться в той же подсети, что и другие общедоступные IPv4-адреса, с которыми я буду настраивать своих гостей lxc, верно? Но это кажется довольно расточительным. askubuntu.com/a/884293/394569 предполагает, что настройка адреса моста не обязательна.
17
@josch В этом примере у wan_phy нет IP, вместо этого он находится на мосту. Я сомневаюсь, что ему вообще нужен IP, если вы не хотите, чтобы у «хоста» был внешний IP.
Дероберт
6

Я не дошел до LXC,

но я настроил несколько контейнеров с собственными статическими IP-адресами в локальной сети, которые предоставляют интернет-услуги для некоторых моих сайтов ...

Может быть, это может помочь, на то, что вы хотите для своего.

Я запускаю несколько контейнеров, вот так,

НА ХОСТ-МАШИНЕ Я отредактировал файл хоста, добавив каждый контейнер и хост-компьютер: vi / etc / hosts

lxc host machine:   192.168.1.100
container1:   192.168.1.101
container2:     192.168.1.102
container3:   192.168.56.102
container4:   192.166.56.103

после сохранения ...

Опять же, на хост-машине я установил сеть и мост для:

# /etc/network/interfaces
auto eth0
iface eth0 inet manual

auto br0
iface br0 inet static
        bridge_ports eth0
        bridge_stp off
        bridge_fd 0
        bridge_maxwait 0
        **address** 192.168.1.100
        netmask 255.255.255.0
        **network 192.168.1.1**
        **broadcast** 192.168.1.100
        gateway 192.168.1.1
        dns-nameservers 8.8.8.8 8.8.4.4

выше сети мой роутер ip, по лан. (внутренний) адрес и широковещание - это хост-машина, внутренний ip, который я позже использую VHOST для доступа в интернет, веб-серверов, ftp и т. д.

ДЛЯ LXC КОНТЕЙНЕРОВ 1-4 Я НАСТРОЙКИ КОНФИГ. ТАК КАК:

LXC CONFIG
lxc.network.type=veth
lxc.network.link=br0
lxc.network.flags=up
lxc.network.hwaddr=00:16:3e:13:48:4e
**lxc.network.ipv4=192.168.1.101**

Теперь Контейнер 1 IP = 192.168.1.101

я повторяю для дополнительных контейнеров, чтобы иметь собственный статический IP-адрес на локальной сети ..

в контейнере 1-4,

войти с хоста:

lxc-console -n CONTAINERNAME,

& я установил статическую сеть для каждого контейнера, а eth0 -

auto eth0
iface eth0 inet static
        address 192.168.1.101
        netmask 255.255.255.0
        network 192.168.0.0
        broadcast 192.168.1.101
        gateway 192.168.1.1
        dns-nameservers 8.8.8.8 8.8.4.4

У каждого из контейнеров есть собственный IP (локальный), доступный в локальной сети. U МОЖЕТ SSH КАЖДЫЙ ИНДИВИДУАЛЬНЫЙ ЛОКАЛЬНЫЙ IP, ИСПЫТАТЬ ИСПОЛЬЗОВАТЬ PUTTY!

После этого я почти уверен, что вы должны выяснить, как запускать их через Интернет после, например, vhost для контейнера ip / load balancers / proxy / etc ..

Может быть, эта установка может помочь в любом случае.

М1-Serverz
источник
Если вы конфигурируете IP, шлюз и т. Д. В конфигурации контейнера LXC, нет необходимости повторять это внутри контейнера. Вместо этого установите ifaceраздел в manual(не staticили dhcp). up, down, И dns-nameserversт.д. все еще может быть использован в Debian и т.д.
0xC0000022L
1

Я еще не играл с LXC, но эта статья должна вам помочь: настройка сети с использованием мостов Ethernet (см. Метод 2).

Чтобы дать вам некоторую подсказку о конфигурации (я предполагаю, что у вас уже правильно настроен br0):

  1. Вам нужно создать пару ветвистых устройств, используя ip link add type veth
  2. Предыдущая команда создала 2 виртуальных интерфейса: veth0 и veth1
  3. Теперь добавьте виртуальный интерфейс veth0 к мосту: brctl addif br0 veth0
  4. в вашей оболочке lxc введите: ns_exec -nm -- /bin/bash
  5. Теперь нам нужно установить другое виртуальное if для сетевого пространства имен оболочки lxc: ip link set veth1 netns PID_OF_LXC_SHELL
  6. Теперь, настроив veth1 в оболочке lxc на нужный вам IP-адрес (например, 192.168.56.201), вы должны быть полностью настроены.
Гюйгенс
источник
Вы не проверяли это вообще? Вы, вероятно, получите награду, но ваш ответ мне не поможет, и у меня точно такая же настройка, как и у OP.
Джонас Г. Дрейндж
Как я могу помочь вам больше? Был ли один шаг в моем ответе, который не работал, или вы выполнили их, и это не решило проблему? Нет, как сказано в моем ответе, LXC включен в мой список пожеланий, но я еще не начал настоящее тестирование.
Гюйгенс