Я пробую LXD. Кажется, что по умолчанию способ настройки сети состоит в том, чтобы хост предоставлял DHCP и NAT для всех гостей, но я бы хотел опустить NAT и разрешить гостям использовать тот же DHCP-сервер, что и хост. Кажется, это должно быть довольно разумно, но я не могу заставить его работать. Независимо от того, что я делаю, гость никогда не получит адрес, назначенный внешним DHCP-сервером.
Чтобы усложнить ситуацию, похоже, что конфигурация сети LXD довольно сильно изменилась с LXD 2.3 , и подавляющее большинство информации, которую я обнаружил, есть для более ранних версий. Я нашел эту единственную проблему GitHub , где кто-то пытался сделать то же самое и опубликовал конфигурацию нового стиля, которая работала для них, но, похоже, это не имело значения, когда я попробовал это.
Итак, вопрос в том, Как настроить мост в LXD 2.3+ без NAT и без использования внешнего DHCP?
Вот некоторые дополнительные детали:
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
Установка стандартной сети для LXD должна использовать частный мост, lxdbr0.
Чтобы иметь некоторые Ваши контейнеры получают IP-адрес от Вашей LAN, Вы можете также
Между этими двумя macvlan очень легко настроить. У Вас могут быть некоторые контейнеры на macvlan, в то время как другие, использующие частные сети. Можно использовать профили в LXD для определения, который является что. Можно даже переключиться от одного до другого путем применения/присоединения другого профиля.
Проблема с macvlan - то, что контейнеры на mavclan не могут связаться с хостом по сети.
Проблема и с macvlan и с соединенными мостом сетями (на интерфейсе Ethernet хоста) то, что никакой работы над WiFi. Поскольку настройки по умолчанию на WiFi - чтобы точка доступа приняла только единственный MAC-адрес от связанного сетевого клиента. Вы могли бы обойти это ограничение, если Вы не устанавливаете средств защиты на точке доступа.
Таким образом, Вы сможете говорить для хостинга от контейнеров и наоборот.
Если Вам нужен macvlan ifupdown помощник, у меня есть один https://pastebin.com/yaRH8zC9