Я пытался сделать что-то, что должно было быть довольно простым, но по какой-то причине это не сработало.
Я хочу соединить два контейнера LXD с одной и той же VLAN.
Для этого я создаю интерфейс VLAN поверх физического, а затем назначаю его тому же виртуальному мосту, который используется контейнером LXD.
Это сценарий, который я использую для создания интерфейса и моста.
#!/usr/bin/env bash
sudo ip link add link $1 name $1.$2 type vlan id $2
sudo ifconfig $1.$2 $3 # this is useless I think
sudo ip link add vnet$2 type bridge
sudo ip link set vnet$2 up
sudo ip link set $1.$2 up
sudo ip link set dev $1.$2 master vnet$2
read -n 1 -s -r -p "Press any key to destroy..."
sudo ip link del vnet$2
sudo ip link del $1.$2
И это профиль, используемый контейнерами
lxc profile show vlan
config: {}
description: Default LXD profile
devices:
eth0:
name: eth0
nictype: bridged
parent: vnet2
type: nic
root:
path: /
pool: default
type: disk
name: vlan
used_by:
- /1.0/containers/lxd1
Я назначаю два IP-адреса в одной подсети для двух контейнеров, но если я попытаюсь выполнить ping с помощью tcpdump, я вижу, что один из двух хостов получает запросы ARP и отправляет ответы, а другой не получает ответы.
Любое предложение?
Это изображение представляет мою испытательную площадку
+-------------------------+ +-------------------------+
| Host1 | | Host2 |
|-------------------------| |-------------------------|
| | | |
| +---------+ +----------+ +----------+ +----------+ |
| | ens2.2 +-------> |ens2 <---+ ens2 | <----+ ens2.2 | |
| +----^----+ +----------+ +----------+ +------^---+ |
| | | | | |
| +----+----+ | | +------+---+ |
| | vnet2 | | | | vnet2 | |
| +---^-----+ | | +------^---+ |
| | | | | |
| | | | | |
| +-----+-------------+ | | +------------+-----+ |
| | LXD Container | | | | LXD Container | |
| +-------------------+ | | +------------------+ |
| | | |
+-------------------------+ +-------------------------+
На самом деле конфигурация LXD и моста была в порядке, по какой-то причине коммутатор не мог управлять VLAN