este é o esquema principal de como o driver macvlan funciona:
+---------------+
| network stack |
+---------------+
| | | |
+---------+ | | +------------------+
| | +------------------+ |
| +------------------+ | |
| | | |
| aa +----------+ | | |
| eth0 +-----| macvlan0 |---+ | |
| / +----------+ | |
Wire +------+ +---------------+ bb +----------+ | |
--------| eth0 |------/ if dst mac is /--------| macvlan1 |------+ |
+------+ +---------------+ \ +----------+ |
\ cc +----------+ |
+-----| macvlan2 |---------+
+----------+
Como você pode ver, esse tipo de interface funciona de acordo com o seguinte princípio: é ouvir em placa de rede física e apenas pegar o endereço de auto-mac.
Se você adicionar qualquer outra interface na parte inferior do macvlan. Por exemplo, bridge ou outra interface macvlan / macvtap, ele transferirá qualquer tráfego para a rede externa, mas não para o lado reverso. Porque está pegando tráfego somente para o endereço MAC.
Para resolver seu problema, você deve usar o linux bridge e conectar seu contêiner a uma ponte via par de veth-interfaces.
Você deve usar as interfaces do macvlan / macvtap apenas se o endpoint.
Aqui você pode obter mais informações sobre esse tipo de interface: