Existem várias maneiras de fazer isso:
-
Usando pontes do Linux (brctl)
-
Usando o Open vSwitch (ovs-vsctl)
-
Usando MACVLAN
-
Usando IPVLAN (introduzido no kernel 3.19, mas não estável até 4.2 ou posterior)
MACVLAN e IPVLAN são suportadas como módulos do kernel Linux
MACVLAN: Isso possibilita a criação de interfaces de rede virtuais que “se apegam” a uma interface de rede física ( eth5 na pergunta acima). Cada interface virtual tem seu próprio endereço MAC - distinto do endereço MAC da interface física. Quadros enviados para ou a partir das interfaces virtuais são mapeados para a interface física.
Enquanto no Linux uma interface já pode ter vários endereços, um MACVLAN permite isolar ainda mais o tráfego que pode ser visto em uma interface desse tipo. Uma MACVLAN só conseguirá ver o tráfego com um endereço MAC que corresponda a essa interface, evitando que processos / contêineres em outras interfaces escutem o tráfego destinado a outra MACVLAN.
IPVLAN: Conceitualmente muito semelhante ao driver macvlan com uma grande exceção que usa L3 para muxing / demuxing entre escravos. O dispositivo mestre compartilha o L2 MAC com seus dispositivos escravos. Isso permite a criação de dispositivos virtuais fora de uma interface principal e os pacotes são entregues com base no endereço IP L3 dest nos pacotes. Todas as interfaces (incluindo a interface principal) compartilham L2, tornando-a transparente para um switch L2 conectado.Para IPVLAN, a documentação canônica é: link
Atualmente, o Docker suporta MACVLAN e IPVLAN na versão experimental; eles estão entrando no GA em breve
Para mais informações sobre MACVLAN e IPVLAN (incluindo comandos específicos), veja o excelente blogpost de Brent Salisbury: link