Устройство macvlan-network не передает внешний хост из контейнера

Я пытаюсь установить набор контейнеров Docker или LXC, каждый из которых имеет свой собственный маршрутизируемый IP-адрес. Содержащий хост фактически является виртуальной машиной, работающей в RedHat Enterprise Virtualization, которая является переименованной и очень старой версией oVirt. В нашем центре обработки данных мы используем тегированные VLAN, а в RHEV эти VLAN выбираются через различные «Профили LAN». Я надеюсь разместить контейнеры в одном и том же VLAN / profile в качестве контейнера Host. Я надеюсь, что каждый контейнер будет иметь одно виртуальное сетевое устройство со своим собственным MAC.

Содержащая VM имеет интерфейс eth0. Следуя этому руководству («С помощью macvalan devices»), я создал macvlan в режиме моста и назначил его контейнеру. В наших целях мы скажем, что 10.12.0.117/21 – это маршрутизируемый адрес, который должен иметь контейнер, а 10.12.7.254 – его шлюз.

 # docker run -d --name test centos7 # dockpid=$(docker inspect --format '{{ .State.Pid }}' test) # ip link add eth0p0 link eth0 type macvlan mode bridge # ip link set netns $dockpid eth0p0 # nsenter -t $dockpid -n ip link del eth0 # nsenter -t $dockpid -n ip addr add 10.12.0.117/21 dev eth0p0 # nsenter -t $dockpid -n ip route add default via 10.12.7.254 dev eth0p0 

Это не pingable. Фактически, используя tcpdump для eth0 и arping из другого узла в сети, я вижу, что запросы arp попадают в контейнер, и я вижу, как контейнер отвечает (с его случайно генерируемым MAC), но те ответы ARP не позволяют, t, похоже, вернется к другому хосту (как видно из TCP / IP).

Я также попытался с помощью lxc, создав интерфейс простым способом:

 # ip link add link eth0 eth4 type macvlan 

Если я дам ему IP-адрес и UP устройство, IP становится pingable в локальной сети. Но не тогда, когда я настраиваю контейнер:

 lxc.network.type = phys lxc.network.flags = up lxc.network.link = eth4 

а затем вручную настроить IP и маршрутизацию. Теперь его невозможно сделать, как с докером.

Если, наоборот, я использую RHEV-M, чтобы создать дополнительный сетевой интерфейс с тем же профилем, присоединить его к виртуальной eth2 , а затем в пределах VM назначить этот новый интерфейс ( eth2 ) в пространство имен контейнера, все работает нормально. Поэтому я предполагаю, что это имеет какое-то отношение к RHEV и пересылка запросов ARP изнутри.

BTW: У меня нет root на гипервизоре RHEVM VM. (Но я могу попросить вежливо, могу ли я это получить.)

Есть ли очевидное решение? У кого-нибудь есть советы по устранению неполадок? Что мне не хватает?