[РЕДАКТИРОВАТЬ]
Производственная система в настоящее время представляет собой сочетание физической системы и системы на основе ESXi. Очевидно, мы никогда бы не стали использовать виртуальный бокс даже для предпроизводственной среды! Он использовался здесь только для быстрого решения проблемы прямо на моем рабочем столе.
Спасибо за объяснение "приостановки" на мета!
[/РЕДАКТИРОВАТЬ]
Моя установка:
vboxnet1
10.0.7.0/24Схема адресации:
На VM
, Я выполнил следующие команды:
ip netns add mac # create a new nmespace
ip link add link eth0 mac0 type macvlan # create a new macvlan interface
ip link set mac0 netns mac
На mac
пространство имен внутри виртуальной машины:
ip link set lo up
ip link set mac up
ip addr add 10.0.7.102/24 dev mac0
Так что в итоге мы получаем: (Как в начале?)
+------------------------+
| Host: 10.0.7.1 |
| |
| +--------------------+ |
| | VM: 10.0.7.101 | |
| | | |
| | +----------------+ | |
| | | NS: 10.0.7.102 | | |
| | | | | |
| | +----------------+ | |
| +--------------------+ |
+------------------------+
Что работает:
Host
и VM
NS
и NS
NS
Что не работает:
NS
и VM
NS
и Host
Где я начал сходить с ума:
host
(реальная машина) на самом деле показывает запрос ARP И ответыNS
показывает запросы ARP, отправленные на хостVM
заставляет весь беспорядок работать (!) -> ping начинает получать ответы, когда tcpdump запускается на виртуальной машине?!?Итак, держу пари, вы очень этого хотели, у меня вопрос: как заставить его работать? Я подозреваю, что что-то не так с ARP на macvlan внутри NS, но не могу понять, что именно ...
Кстати, я проделал то же самое с mac0
интерфейс непосредственно на виртуальной машине (без пространства имен), и он работал безупречно.
Итак, для потомков тот факт, что tcpdump внезапно заставляет все работать, должен был меня сбить с толку. Что он делает внутри, так это переключение eth0
в беспорядочный режим. То есть, eth0
будет отдавать весь сетевой трафик, а не только тот, с основным сервером MAC
Однако именно так macvlan
работает: он добавляет новый вторичный виртуальный MAC-адрес, который «физический» (то есть виртуальная машина) сетевой адаптер не знает.
Таким образом, простой обходной путь - вручную: ifconfig eth0 promisc
Я надеюсь, что это помогает !