Внешний DHCP с LXD 2.3+

Я пробую LXD. Кажется, что по умолчанию способ настройки сети состоит в том, чтобы хост предоставлял DHCP и NAT для всех гостей, но я бы хотел опустить NAT и разрешить гостям использовать тот же DHCP-сервер, что и хост. Кажется, это должно быть довольно разумно, но я не могу заставить его работать. Независимо от того, что я делаю, гость никогда не получит адрес, назначенный внешним DHCP-сервером.

Чтобы усложнить ситуацию, похоже, что конфигурация сети LXD довольно сильно изменилась с LXD 2.3 , и подавляющее большинство информации, которую я обнаружил, есть для более ранних версий. Я нашел эту единственную проблему GitHub , где кто-то пытался сделать то же самое и опубликовал конфигурацию нового стиля, которая работала для них, но, похоже, это не имело значения, когда я попробовал это.

Итак, вопрос в том, Как настроить мост в LXD 2.3+ без NAT и без использования внешнего DHCP?

Вот некоторые дополнительные детали:

  • Ubuntu 18.04 с LXD 3.0.0
  • Хост использует интерфейс enp10s0f0
  • Желает подключить гостей к интерфейсу enp10s0f1 (который в противном случае не используется хостом)
  • Дополнительный интерфейс enp1s2 не используется
  • dominickpastore@ubuntu:~$ lxc network list
    +-----------+----------+---------+-------------+---------+
    |   NAME    |   TYPE   | MANAGED | DESCRIPTION | USED BY |
    +-----------+----------+---------+-------------+---------+
    | enp10s0f0 | physical | NO      |             | 0       |
    +-----------+----------+---------+-------------+---------+
    | enp10s0f1 | physical | NO      |             | 0       |
    +-----------+----------+---------+-------------+---------+
    | enp1s2    | physical | NO      |             | 0       |
    +-----------+----------+---------+-------------+---------+
    | lxdbr0    | bridge   | YES     |             | 1       |
    +-----------+----------+---------+-------------+---------+
    
  • Обратите внимание, что это только моя текущая попытка конфигурации для lxdbr0; Я пробовал много:

    dominickpastore@ubuntu:~$ lxc network show lxdbr0
    config:
      bridge.external_interfaces: enp10s0f1
      ipv4.address: none
      ipv4.dhcp: "false"
      ipv6.address: none
      ipv6.dhcp: "false"
    description: ""
    name: lxdbr0
    type: bridge
    used_by:
    - /1.0/containers/first
    managed: true
    status: Created
    locations:
    - none
    

Обновление:

Я играю с этим больше, и это еще больше запутывает меня. Я получаю, казалось бы, очень странное поведение. Это все еще ново и ненадежно, или я просто делаю что-то не так? С одной стороны, lxc network unset, похоже, не работает:

dominickpastore@ubuntu:~$ lxc network show lxdbr0
config:
  ipv4.address: 10.4.4.1/24
  ipv4.dhcp: "true"
  ipv4.dhcp.ranges: 192.168.4.230-192.168.4.249
  ipv4.nat: "true"
  ipv4.routing: "true"
  ipv6.address: none
  ipv6.dhcp: "false"
description: ""
name: lxdbr0
type: bridge
used_by:
- /1.0/containers/first
managed: true
status: Created
locations:
- none
dominickpastore@ubuntu:~$ lxc network unset lxdbr0 ipv4.dhcp.ranges
dominickpastore@ubuntu:~$ lxc network show lxdbr0
config:
  ipv4.address: 10.4.4.1/24
  ipv4.dhcp: "true"
  ipv4.dhcp.ranges: 192.168.4.230-192.168.4.249
  ipv4.nat: "true"
  ipv4.routing: "true"
  ipv6.address: none
  ipv6.dhcp: "false"
description: ""
name: lxdbr0
type: bridge
used_by:
- /1.0/containers/first
managed: true
status: Created
locations:
- none

Я также создал второй мост для тестирования двух конфигураций одновременно, и я могу установить их очень похоже на NAT + DHCP Конфигурация (не совсем то же самое, потому что unset не работает), но только оригинальный интерфейс получает адрес. Я не могу понять, почему новый интерфейс не может получить адрес вообще. Обратите внимание на похожую конфигурацию IPv4:

dominickpastore@ubuntu:~$ lxc network show lxdbr0
config:
  ipv4.address: 10.4.4.1/24
  ipv4.dhcp: "true"
  ipv4.dhcp.ranges: 192.168.4.230-192.168.4.249
  ipv4.nat: "true"
  ipv4.routing: "true"
  ipv6.address: none
  ipv6.dhcp: "false"
description: ""
name: lxdbr0
type: bridge
used_by:
- /1.0/containers/first
managed: true
status: Created
locations:
- none
dominickpastore@ubuntu:~$ lxc network show lxdbr1
config:
  ipv4.address: 10.251.34.1/24
  ipv4.dhcp: "true"
  ipv4.nat: "true"
  ipv4.routing: "true"
  ipv6.address: none
  ipv6.nat: "false"
description: ""
name: lxdbr1
type: bridge
used_by:
- /1.0/containers/first
managed: true
status: Created
locations:
- none

Тем не менее, в контейнере eth0 работает (подключен к lxdbr0), и eth1 никогда не получает адрес (подключен к lxdbr1):

root@first:~# ip addr
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
    inet6 ::1/128 scope host
       valid_lft forever preferred_lft forever
41: eth0@if42: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default qlen 1000
    link/ether 00:16:3e:64:0e:ea brd ff:ff:ff:ff:ff:ff link-netnsid 0
    inet 10.4.4.245/24 brd 10.4.4.255 scope global dynamic eth0
       valid_lft 3101sec preferred_lft 3101sec
    inet6 fe80::216:3eff:fe64:eea/64 scope link
       valid_lft forever preferred_lft forever
43: eth1@if44: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default qlen 1000
    link/ether 00:16:3e:fe:6d:01 brd ff:ff:ff:ff:ff:ff link-netnsid 0
    inet6 fe80::216:3eff:fefe:6d01/64 scope link
       valid_lft forever preferred_lft forever
0
задан 12 May 2018 в 07:45

2 ответа

Установка стандартной сети для LXD должна использовать частный мост, lxdbr0.

Чтобы иметь некоторые Ваши контейнеры получают IP-адрес от Вашей LAN, Вы можете также

  1. Используйте соединенные мостом сети, образующие мост на интерфейсе Ethernet хоста. Посмотрите, например, https://blog.simos.info/how-to-make-your-lxd-containers-get-ip-addresses-from-your-lan-using-a-bridge/
  2. Используйте macvlan. Посмотрите, например, https://blog.simos.info/how-to-make-your-lxd-container-get-ip-addresses-from-your-lan/

Между этими двумя macvlan очень легко настроить. У Вас могут быть некоторые контейнеры на macvlan, в то время как другие, использующие частные сети. Можно использовать профили в LXD для определения, который является что. Можно даже переключиться от одного до другого путем применения/присоединения другого профиля.

Проблема с macvlan - то, что контейнеры на mavclan не могут связаться с хостом по сети.

Проблема и с macvlan и с соединенными мостом сетями (на интерфейсе Ethernet хоста) то, что никакой работы над WiFi. Поскольку настройки по умолчанию на WiFi - чтобы точка доступа приняла только единственный MAC-адрес от связанного сетевого клиента. Вы могли бы обойти это ограничение, если Вы не устанавливаете средств защиты на точке доступа.

2
ответ дан 29 October 2019 в 08:47
  1. Контейнеры установки с macvlan интерфейсами режима моста, связанными с физическим интерфейсом хоста.
  2. Добавьте macvlan мостовой интерфейс на хосте в том же интерфейсе.

Таким образом, Вы сможете говорить для хостинга от контейнеров и наоборот.

Если Вам нужен macvlan ifupdown помощник, у меня есть один https://pastebin.com/yaRH8zC9

0
ответ дан 29 October 2019 в 08:47

Другие вопросы по тегам:

Похожие вопросы: