Як налаштувати зовнішні 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 також були б корисні ....


1
Продовження: Я встановив br0 в розрядний режим і, здається, зараз роблю те, що хочу. Я думаю, що це стандартна практика, але вона не була висвітлена в жодному з багатьох навчальних посібників LXC, які я читав. Я залишаю це питання відкритим на час, якщо я отримаю якісь відгуки ...
twblamer

Я зробив приблизно те ж саме (за винятком трохи налаштування вручну): сценарій netup у кожному конфігурації lxc для додавання veth до мосту (на хості), налаштування IP вручну в кожному контейнері, додатковий сценарій / інтерфейс у кожному контейнері для встановлення маршрутизація вгору (через ip4 переадресацію на хост). Але, наскільки я бачу, обидва рішення означають, що контейнер може встановити власну IP-адресу майже будь-що (а також додати первинний інтерфейс хоста до мосту трохи незручно). Тож мене також цікавлять деякі відгуки / рішення.
HoverHell

Відповіді:


13

Це майже правильно - хоча ви пропускаєте такий рядок:

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

У мене на Debian працює гість LXC. По-перше, ви налаштуєте хост-міст (простий спосіб) /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, хтось із коренем у контейнері може змінити IP-адресу. Так. Це міст (ака-перемикач Ethernet). Якщо ви хочете запобігти цьому, ви можете використовувати правила брандмауера на хості - принаймні в моєму випадку, пакети повинні пройти iptables хоста.


10
Дякую всім. Сумно, але я просто повернувся до цього, знайшов це через google і забув, що я був первинним
претендентом

2
@derobert: не впевнений, що це було доступно тоді, але autoце також дійсне значення для lxc.network.ipv4.gatewayі, наскільки я розумію, за замовчуванням IP мосту, до якого підключається veth-інтерфейс.
0xC0000022L

Чи потрібен інтерфейс мосту власного IP? Якщо wan_phyстоїть перед Інтернетом, то IP-міст мосту повинен бути ще однією дійсною, публічною IPv4-адресою, оскільки він повинен бути в тій самій підмережі, що й інші загальнодоступні IPv4-адреси, з якими я налаштую своїх гостей lxc, правда? Але це здається досить марнотратним. askubuntu.com/a/884293/394569 припускає, що налаштування мостової адреси не є строго необхідною.
Джош

@josch У цьому прикладі wan_phy не має IP-адреси, він знаходиться на мосту. Я сумніваюся, що він взагалі потребує IP-адреси, якщо ви не хочете, щоб у "хоста" був зовнішній IP-адрес.
derobert

6

Я ще не потрапив повністю в LXC,

але у мене є встановлення декількох контейнерів, які мають власні статичні ip-i в lan, які надають послуги Інтернету для деяких моїх веб-сайтів ...

Можливо, це може допомогти в тому, що ви хочете для свого.

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

НА ГОСТОВОМУ МАШИНІ Я редагував файл хоста, додаючи кожен контейнер і машину хосту: 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, для lan. (внутрішня) адреса та трансляція - це хост-машина, внутрішній 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 на LAN ..

в контейнері 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, ДЛЯ ТЕСТУВАННЯ ВИКОРИСТАННЯ ПУТТІ!

Після цього я досить впевнений, що ви повинні з'ясувати, як запустити їх через Інтернет після, наприклад, vhost для контейнера ip / load balancers / proxy / тощо.

Можливо, ця настройка може допомогти у будь-якому випадку.


Якщо ви налаштуєте 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. Тепер ми повинні встановити інший віртуальний, якщо в просторі мереж імен оболонки lxc: ip link set veth1 netns PID_OF_LXC_SHELL
  6. Тепер, налаштувавши veth1 в оболонці lxc на потрібну IP-адресу (наприклад, 192.168.56.201), вам слід все налаштувати.

Ви взагалі цього не перевіряли? Ви, мабуть, отримаєте винагороду, але ваша відповідь мені зовсім не допомагає, і я маю абсолютно таку ж настройку, як і ОП.
Jonas G. Drange

Як я можу вам більше допомогти? Чи був один крок у моїй відповіді, який не працював, або ви їх виконували, і це не вирішило проблему? Ні, як сказано у моїй відповіді, LXC є в моєму списку бажань, але я ще не почав реального тестування.
Гюйгенс
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.