Criando uma rede privada para duas VMs

5

Estou tentando criar duas VMs conectadas à mesma rede privada. Estou usando o Linux com o qemu-kvm 1.0.

Meu plano de ataque foi este:

brctl addbr bridge
ifconfig bridge up
tunctl -t tap1
tunctl -t tap2
ifconfig tap1 up
ifconfig tap2 up
brctl addif bridge tap1
brctl addif bridge tap2
qemu-kvm -net nic,macaddr=52:54:00:11:22:33 -net tap,ifname=tap1 disk1.img
qemu-kvm -net nic,macaddr=52:54:00:44:55:66 -net tap,ifname=tap2 disk2.img

Uma vez inicializado, forneço à primeira máquina o endereço IP 192.168.100.5 e o segundo 192.168.100.10.

Neste ponto, quando tento executar o ping de uma VM da outra, não há resposta de ping. No entanto, usando o Wireshark, vejo que as solicitações ARP são enviadas e respondidas e verifiquei se os caches ARP contêm as informações nas outras VMs. No entanto, nenhuma resposta de ping é gerada (como visto no Wireshark).

Em seguida, tentei fornecer à bridge um endereço IP 192.168.100.1. Depois de fazer isso, o ping entre as VMs funciona, mas ainda há um problema: agora todas as solicitações parecem vir da própria ponte. Por exemplo, se eu me conectar de uma VM ao servidor FTP da outra pessoa, a execução do netstat na VM com o servidor FTP mostrará que 192.168.100.1 é a origem. As conexões funcionam como no NAT, mas, como ocorre com o NAT, o endereço de origem não é o da máquina de origem. Eu tentei isso com net.ipv4.ip_forward tanto on e off, e masquerading (iptables -t nat -A POSTROUTING-j MASCARADA) ligado e desligado, com os mesmos resultados.

O que eu realmente quero é que minhas VMs ajam como se estivessem conectadas a um switch: elas devem ser transparentes. Estou mais preocupado com o endereço de origem que se parece com a ponte do que com a ponte que requer um IP. O último é um pouco chato, mas o primeiro é um bloqueador para mim.

    
por Chris 26.04.2012 / 01:58

3 respostas

2

Eu já vi o iptables interferindo no tráfego de bridge antes (mesmo que não seja o AFAIK). Você certamente não quer nenhuma regra relacionada ao NAT, mas acho que a cadeia FORWARD precisa aceitar os pacotes. Eu sugeriria testar isso sem regras iptables e uma política ACCEPT padrão na cadeia FORWARD.

Algumas outras coisas para verificar:

  • O brctl show verifica se tap1 e tap2 estão em bridge ?
  • O brctl showmacs bridge mostra os endereços MAC das duas VMs?
por 26.04.2012 / 02:22
1

Defina suas interfaces de toque para o modo promíscuo.

ifconfig tap1 promisc up
ifconfig tap2 promisc up
    
por 05.06.2012 / 15:00
1

ARP requer roteamento para funcionar também.

Um problema comum é que você tem um endereço IP atribuído a ambas as interfaces na sub-rede mesmo , no kernel do sistema host. Se você fizer isso, as respostas do ARP serão interrompidas - apenas uma interface receberá respostas. Certifique-se de que você tenha uma rota única e limpa de volta à sub-rede.

No exemplo acima, se as interfaces tap1 e tap2 tivessem endereço IP no kernel do host Linux - na sub-rede mesmo (192.168.100.0/24) as respostas ARP seriam interrompidas . Se as VMs não exigissem conectividade com o host, nem seria necessário um IP no kernel do host.

    
por 12.02.2015 / 18:38