O contêiner systemd-nspawn com endereço IP separado (namespace de rede) não funciona

O contêiner systemd-nspawn com endereço IP separado (namespace de rede) não funciona

Olhando para a documentação do systemd-nspawn, deve ter sido planejado ter uma maneira muito amigável de lançar contêineres em um namespace de rede diferente. Você usa a -nopção e simplesmente habilita systemd-networkd.servicenas duas pontas. O contêiner obtém seu próprio endereço IP em um dos intervalos “privados”. (O DNS pode exigir algunsetapa adicional).

O resultado é que recebo um endereço IP no intervalo 169.254.*.*. A rota padrão aponta para a host0interface sem passar por nenhum gateway/roteador. As tentativas de acessar servidores da Internet, por exemplo, 8.8.8.8falham com "Sem rota para o host". (Não adianta resolver o DNS se isso não funcionar).

Se eu executar tcpdump -i ve-fedora-25no host, posso ver as solicitações de DHCP, mas elas não são respondidas. systemd-networkd está definitivamente rodando no host. Os logs do lado do host mostram "Operadora obtida" em ve-fedora-25e networkctl mostra isso como "roteável" e "configurado", tudo em verde.

Meu sistema é o Fedora 25. Quero um contêiner de sistema operacional ao qual possa me conectar usando TCP/IP e, ao mesmo tempo, ser capaz de me conectar ao mundo (por exemplo, para executar o dnfgerenciador de pacotes). Assim como libvirtas VMs funcionam facilmente imediatamente. O que deu errado?

Responder1

O problema é o Fedorafirewalld. Parece que o nspawn nunca foi integrado ao firewalld. (o nspawn também não está integrado corretamente com a política SELinux do Fedora).

Conforme mencionado na pergunta, a libvirt está funcionando bem :). Podemos usar o mesmo truque que as pessoas descobriram para executar contêineres comLXC no Fedora.

Atualização: a solução alternativa parou de funcionar depois que atualizei para o Fedora 30.


Execute systemd-nspawn com a opção --network-bridge virbr0. Em vez de confiar systemd-networkd, isso alavanca libvirtd.service. O último serviço já é iniciado por padrão no Fedora. No convidado, configure seu cliente DHCP preferido normalmente.

Resolução DNS ao usar systemd-networkd como cliente DHCP

Usar systemd-networkdcomo cliente DHCP podeacidentalmentefuncione por conta própria, se você tiver sobras /etc/resolv.confde uma inicialização de contêiner anterior. Mas você não pode confiar que isso funcione em geral. Ele foi realmente projetado para ser executado junto com o systemd-resolved.service.

Por sua vez, systemd-resolved deve ser usado com nss-resolve. No entanto, isso não é AIUI essencial.

informação relacionada