Executando o Vagrant / libvirt: tentando estabelecer redes públicas / privadas

1
Estou executando o Vagrant 1.7 (do pacote oficial 1.7) no Ubuntu 14.04 LTS e estou tentando provisionar várias VMs privadas e uma pública. Os scripts de provisionamento do Ansible alteram todas as senhas do "vagrant / root" e substituem as chaves SSH de ações do Vagrant pelo aspecto de segurança.

Todos os meus IPs internos são 10.10.20.0/24. Eu tenho uma VM que precisa do IP 10.42.7.226 (que tem um NAT indo de nosso IP externo real para as portas 80/443).

O hypervisor está em 10.42.7.227 e criei um br0 com esse IP conectado a eth0. Minha configuração de rede é semelhante à seguinte:

auto lo
iface lo inet loopback

# The primary network interface
auto eth0
iface eth0 inet static
    address 10.42.7.227
    netmask 255.255.255.0
    network 10.42.7.0
    broadcast 10.42.7.255
    gateway 10.42.7.1
    dns-nameservers 8.8.8.8


auto br0
iface br0 inet static
    address 10.42.7.227
    netmask 255.255.255.0
    gateway 10.42.7.1
    bridge_ports eth0
    bridge_stp off
    bridge_maxwait 0
    bridge_fd 0

Estou trabalhando nisso remotamente, e é por isso que tive medo de remover o IP da eth0. Eu percebo que br0 deve substituí-lo (br * tem os IPs reais e eth * não).

Na minha configuração do Vagrent, tenho um bloco como o seguinte:

  config.vm.define "haproxy" do |haproxy|
    haproxy.vm.network :private_network, ip: 10.10.20.12
    haproxy.vm.network :public_network, ip: 10.42.7.226
    haproxy.vm.hostname = vars.hostname('haproxy')
    haproxy.hostmanager.aliases = vars.aliases('haproxy')
    haproxy.vm.provision "ansible" do |ansible|
      ansible.playbook = "ansible/haproxy.yml"
    end
  end

No entanto, nessa VM, vejo apenas os seguintes adaptadores:

eth0      inet addr:192.168.121.189     
eth1      inet addr:10.10.20.12    
eth2      inet addr:10.42.7.169  Bcast:10.42.7.255  Mask:255.255.255.0

e no hipervisor eu vejo o seguinte em br0:

brctl show
bridge name bridge id       STP enabled interfaces
br0     8000.0022192df5a7   no      eth1
virbr0      8000.000000000000   yes     
virbr1      8000.525400eda938   yes     virbr1-nic
                            vnet0
                            vnet2
                            vnet4
                            vnet6
virbr2      8000.525400c3098d   yes     virbr2-nic
                            vnet1
                            vnet3
                            vnet5
                            vnet7

e o ifconfig do hipervisor para os dispositivos virbr *:

virbr0    inet addr:192.168.122.1  Bcast:192.168.122.255  Mask:255.255.255.0
virbr1    inet addr:192.168.121.1  Bcast:192.168.121.255  Mask:255.255.255.0        
virbr2    inet addr:10.10.20.1  Bcast:10.10.20.255  Mask:255.255.255.0

Parece que o libvirt / kvm está estabelecendo 192 redes por algum motivo. Eu não estou muito preocupado com isso, mas eu estou supondo que meu 10.42.7.226 foi convertido em 10.42.7.169 de alguma forma dentro do provisionamento Vagrant / libvirt.

Eu estou supondo que eu preciso de outra rede no libvirt? Tudo que pareço ter é o padrão:

<network>
  <name>default</name>
  <uuid>baa4b92a-b8ee-4e2f-a31a-bb3112b51dc0</uuid>
  <forward mode='nat'>
    <nat>
      <port start='1024' end='65535'/>
    </nat>
  </forward>
  <bridge name='virbr0' stp='on' delay='0'/>
  <mac address='52:54:00:9d:3b:a9'/>
  <ip address='10.10.20.1' netmask='255.255.255.0'>
    <dhcp>
      <range start='10.10.20.2' end='10.10.20.254'/>
    </dhcp>
  </ip>
</network>

Estou um pouco confuso com a documentação do libvirt. Eu basicamente preciso que minha VM haproxy tenha um adaptador com o endereço IP 10.42.7.226 acessível na rede física conectada à eth0 da máquina host. O que eu preciso fazer nesta configuração para que isso aconteça?

    
por djsumdog 04.02.2015 / 12:18

2 respostas

1

Para a configuração desejada, é necessário que o NIC da máquina virtual use sua bridge br0 existente no host. Infelizmente, o vagrant-libvirt não parece suportar esta configuração (ele só usa o macvtap, que é destinado a assumir um controle físico interface completamente e não o ajuda aqui porque o host não pode usar a interface).

Eu entraria em contato com o autor do vagrant-libvirt e pediria que essa funcionalidade fosse adicionada.

    
por 04.02.2015 / 14:41
0

A versão atual do plug-in vagrant-libvirt parece suportar o uso de uma ponte convencional com o macvtap.

Crie uma ponte no seu host e use-a como o dispositivo public_network no seu Vagrantfile.

Host com adaptador primário em1, dhcp:

auto em1
iface em1 inet manual
auto br0
iface br0 inet dhcp
  bridge_ports em1
  bridge_stp off
  bridge_fd 0
  bridge_maxwait 0

Vagrantfile:

config.vm.network :public_network,
    :dev => "br0",
    :mode => "bridge",
    :type => "bridge"

Isso faz com que o convidado tenha dois adaptadores - um vinculado à rede de gerenciamento, outro que usou a ponte para recuperar um endereço IP via DHCP.

    
por 23.12.2015 / 20:11