Meu objetivo é configurar alguns convidados baseados em QEMU / libvirt usando uma interface de ponte no host para que cada guest-VM tenha um endereço IP atribuído por DHCP em minha rede LAN. Eu configurei com sucesso e usei configurações de VM menos complexas e sei que meu hardware oferece suporte à virtualização, por isso vou tentar ir direto ao assunto, por assim dizer.
Topologia
Cada nó está conectado à ethernet de 1 Gbps (portanto, sem interfaces sem fio)
[roteador] --- [switch1] --- [switch2] --- [host]
Anfitrião
Tentativa de configuração do convidado com o virt-install
comando de instalação
virt-install --name={guest-name} --vcpus=2 --memory=4096 --network bridge=br0
--cdrom={.iso-img-path} --disk size=20,path={diskimg-path} --os-variant=debian8
--graphics vnc,password={pass},listen=0.0.0.0 --noautoconsole
Comportamento observado e solução de problemas até o momento
Conectado ao convidado VM VNC para instalação com êxito
O instalador gráfico do Debian 9 reporta uma falha na autoconfiguração da interface de rede do convidado para DHCP através da interface da ponte de host
comando ' sudo tcpdump -i br0 | grep -i dhcp '(saída abaixo) mostra apenas as solicitações sendo transmitidas e nenhuma resposta.
10:08:57.833669 IP 0.0.0.0.bootpc > 255.255.255.255.bootps: BOOTP/DHCP, Request from 52:54:00:8a:9e:69 (oui Unknown), length 300
Eu tenho um histórico técnico, mas não estou familiarizado com os detalhes de baixo nível e como solucionar problemas de DHCP corretamente.
UPDATE 1
Eu configurei o tshark no host do Ubuntu e conectei um laptop rodando o Wireshark via ethernet a uma das portas do switch no roteador.
Nota: Tanto quanto eu posso ver meu roteador não suporta qualquer espelhamento de porta ou monitoramento de porta.
Nova topologia
[roteador] --- [switch1] --- [switch2] --- [host-Tshark]
|
[Deb9.5-Wireshark]
Comando Tshark & Resultados
[]$ tshark -w out.pcap -f "udp port 68 or port 67" -i any
[]$ tshark -r out.pcap -V | grep -e Frame -e Bootstrap -e User\ Datagram\ Protocol -e Bootp\ flags -e "Internet Protocol Version 4"
Frame 295: 344 bytes on wire (2752 bits), 344 bytes captured (2752 bits) on interface 0
Frame Number: 295
Frame Length: 344 bytes (2752 bits)
[Frame is marked: False]
[Frame is ignored: False]
Internet Protocol Version 4, Src: 0.0.0.0, Dst: 255.255.255.255
User Datagram Protocol, Src Port: 68, Dst Port: 67
Bootstrap Protocol (Discover)
Bootp flags: 0x0000 (Unicast)
Atualização 2 - resolução adicional
Então, a próxima coisa que tentei foi usar o endereço MAC nos pacotes DHCP Discover e configurar um IP estático na GUI do meu roteador. Isso foi bem-sucedido, pois permitiu que eu passasse pela parte de configuração de rede do instalador, mas falhou quando cheguei ao ponto em que precisava configurar o gerenciador de pacotes conectando-me a um servidor espelho.
Agora, a resolução ARP é algo que eu conheço e descobri que os pacotes ARP que estão sendo enviados não estavam recebendo uma resposta, semelhante aos pacotes DHCP descobertos. Quando inspecionei os pacotes de ping da interface de ponte de outro host na LAN, encontrei o endereço MAC incorreto no campo de origem da resposta. Acontece que o kernel Linux trata um endereço IP como um "objeto do sistema" em um sistema fracamente acoplado, então ter múltiplas interfaces conectadas à mesma rede (192.168.1.0/24) não garante qual interface física é usada para manipular pacotes pertencentes a um IP específico.
Para resolver isso, acabei de adicionar todas as interfaces físicas do sistema à definição da interface da bridge e tudo está funcionando agora após a reinicialização. Não é a minha configuração ideal, mas funciona e o DHCP funciona como esperado.
Mais informações: link