Configuração de rede adequada para um convidado KVM estar nas mesmas redes no host

4

Estou executando um servidor Debian Linux em Lenny. Dentro dele, estou executando outra instância do Lenny usando o KVM. Ambos os servidores estão disponíveis externamente, com IPs públicos, bem como uma segunda interface com IPs privados para a LAN. Tudo funciona bem, exceto que a VM vê todo o tráfego de rede como originário do servidor host. Eu suspeito que isso possa ter algo a ver com o firewall baseado no iptables que estou rodando no host.

O que eu gostaria de descobrir é: como configurar corretamente a rede do host de modo que todos esses requisitos sejam atendidos?

  1. O host e as VMs possuem duas interfaces de rede (pública e privada).
  2. O host e as VMs podem ser firewalls independentemente.
  3. Idealmente, o tráfego da VM não precisa atravessar o firewall do host.
  4. As VMs veem endereços IP remotos reais, não os do host.

Atualmente, as interfaces de rede do host são configuradas como pontes. eth0 e eth1 não possuem endereços IP atribuídos a eles, mas br0 e br1 fazem.

/etc/network/interfaces no host:

# The primary network interface
auto br1
iface br1 inet static
    address 24.123.138.34
    netmask 255.255.255.248
    network 24.123.138.32
    broadcast 24.123.138.39
    gateway 24.123.138.33
    bridge_ports eth1
    bridge_stp off

auto br1:0
iface br1:0 inet static
    address 24.123.138.36
    netmask 255.255.255.248
    network 24.123.138.32
    broadcast 24.123.138.39

# Internal network
auto br0
iface br0 inet static
    address 192.168.1.1
    netmask 255.255.255.0
    network 192.168.1.0
    broadcast 192.168.1.255
    bridge_ports eth0
    bridge_stp off

Este é o arquivo de configuração libvirt / qemu para a VM:

<domain type='kvm'>
  <name>apps</name>
  <uuid>636b6620-0949-bc88-3197-37153b88772e</uuid>
  <memory>393216</memory>
  <currentMemory>393216</currentMemory>
  <vcpu>1</vcpu>
  <os>
    <type arch='i686' machine='pc'>hvm</type>
    <boot dev='hd'/>
  </os>
  <features>
    <acpi/>
    <apic/>
    <pae/>
  </features>
  <clock offset='utc'/>
  <on_poweroff>destroy</on_poweroff>
  <on_reboot>restart</on_reboot>
  <on_crash>restart</on_crash>
  <devices>
    <emulator>/usr/bin/kvm</emulator>
    <disk type='file' device='cdrom'>
      <target dev='hdc' bus='ide'/>
      <readonly/>
    </disk>
    <disk type='file' device='disk'>
      <source file='/raid/kvm-images/apps.qcow2'/>
      <target dev='vda' bus='virtio'/>
    </disk>
    <interface type='bridge'>
      <mac address='54:52:00:27:5e:02'/>
      <source bridge='br0'/>
      <model type='virtio'/>
    </interface>
    <interface type='bridge'>
      <mac address='54:52:00:40:cc:7f'/>
      <source bridge='br1'/>
      <model type='virtio'/>
    </interface>
    <serial type='pty'>
      <target port='0'/>
    </serial>
    <console type='pty'>
      <target port='0'/>
    </console>
    <input type='mouse' bus='ps2'/>
    <graphics type='vnc' port='-1' autoport='yes' keymap='en-us'/>
  </devices>
</domain>

Juntamente com as demais regras do firewall, o script de firewall inclui esse comando para transmitir pacotes destinados a um convidado do KVM:

# Allow bridged packets to pass (for KVM guests).
iptables -A FORWARD -m physdev --physdev-is-bridged -j ACCEPT

(Não se aplica a esta questão, mas um efeito colateral da minha configuração de ponte parece ser que eu não posso desligar de forma limpa. O kernel eventualmente me diz "unregister_netdevice: esperando que br1 fique livre" e eu tenho para redefinir o sistema rígido. Talvez um sinal que eu fiz algo idiota?)

    
por Steve Madsen 08.10.2010 / 18:38

3 respostas

2

Você conectou suas VMs à interface errada. Eles devem ser ligados à interface de rede que se conecta ao mundo externo ( br1 no seu caso).

Lembre-se de que cada VM também deve ter seu endereço IP definido no convidado, não no host.

    
por 18.08.2013 / 14:46
1

Por que você precisa de um alias na br1: 0? isso pode estar no caminho
além do alias, a ideia é usar o seguinte esquema:
eth0- > br0 < - dispositivo de toque da VM
o host deve poder usar br0 como se fosse o IF e as VMs usarão os dispositivos de toque como NICs virtuais conectadas a um comutador virtual (que br0 efetivamente se torna aqui)

o mesmo vale para todas as redes, então, para eth1, você terá que configurar uma br1, e trazer as VMs para serem conectadas a br1

    
por 08.10.2010 / 18:55
0

Eu tenho a mesma configuração com o Lenny / Squeeze VM dentro de um host Lenny usando lib-virt e virtio bridging para br0 (no br1 nem br0: 0). Ele funciona corretamente sem qualquer configuração especial do iptables no host. Eu faço toda a configuração do meu firewall dentro de cada VM guest.

Acho que você pode se beneficiar da verificação das rotas de rede para ver se sua VM está usando o host como um gateway. O meu é configurado para usar um roteador externo como um gateway. Claro, minha VM e host estão em endereços IP diferentes dentro do mesmo intervalo.

    
por 10.09.2011 / 04:42