Para completar a resposta aceita, o modo de ponte é o caminho mais fácil, mas não é suficiente para obter a comunicação.
Quando a instância jail tenta efetuar ping no host, ele envia uma solicitação ARP para obter seu IP. Como o host não possui uma instância macvlan, o pacote será transmitido diretamente no link físico (o corolário da definição do modo bridge). O host nunca verá este pacote, então não pode responder: nenhuma resposta de ping. O outro jeito é o mesmo: o host emite todos os seus pacotes para a LAN física real, nenhum pacote do host jamais irá para a interface macvlan do container (cadeia ...).
O truque é criar uma segunda interface macvlan, também no modo bridge, destinada ao host: isso irá integrar o host com o tráfego do container / jail.
host# ip link add link eth0 name hostmvl0 type macvlan mode bridge
Depois, há dois métodos:
-
mesmo IP em ambas as interfaces
pro: nenhuma alteração na eth0 ou nas suas configurações, por exemplo, sem problemas com o DHCP do host.
con: alguma complexidade, não pode ter transmissões indo em todos os lugares.
Atribua o IP do host (igual a eth0) nele, sem lan route padrão ( noprefixroute
) ou isso pode confundir o roteamento de todos os hosts:
host# ip addr add hostip/netmask dev hostmvl0 noprefixroute
host# ip link set hostmvl0 up
Para cada contêiner (prisão ...) adicione sua rota através da interface macvlan do host em vez da real:
host# ip route add jailip/32 dev hostmvl0
Agora tudo vai funcionar (exceto que uma transmissão (ping, udp ...) do host não será vista pelo container / jail porque será roteada em eth0).
Nota: a nova interface recebe um endereço MAC aleatório. Ela pode ser definida com um address xx:xx:xx:xx:xx:xx
adicional na criação, mas não pode ser a real (eth0) na criação. Apenas a cadeia verá esse endereço MAC.
-
IP na interface macvlan do host, interface física sem IP
pro: configuração de rede mais comum, nenhum caso especial (por exemplo: a transmissão do host funciona em todos os lugares), nenhuma configuração de rota adicional por contêiner.
con: requer a remoção das configurações de rede da eth0 e as migra para hostmvl0. O endereço MAC mudará (a menos que algum outro hack seja feito para impedi-lo), portanto, pode afetar um cliente DHCP.
Como sugerido por sebasth, pode-se simplesmente remover o IP da eth0 e considerar a nova placa de rede "principal" como hostmvl0. É claro que se houver algum serviço gerenciando isso, mude-o para lá. Melhor sempre definir o mesmo endereço MAC, senão ele mudaria na rede a cada reinicialização, isso é desaprovado no ambiente de negócios.
host# ip addr del hostip/netmask dev eth0 #careful, connectivity is lost
host# ip link set hostmvl0 address xx:xx:xx:xx:xx:xx
host# ip addr add hostip/netmask dev hostmvl0
host# ip link set hostmvl0 up
host# ip route add default via usualrouterip
Se você usar o DHCP, o MAC mudou, o IP também. Pode-se mudar o MAC da eth0 para poder reutilizar seu original para hostmvl0. Algumas ferramentas às vezes são muito inteligentes quando isso é feito. Esta discussão sobre o Archlinux pode conter informações sobre como evitar que o NetworkManager reverta as configurações.