ip estático público para caixa vagrant

13

Eu tenho servidor (Debian Squeeze) com 1 placa ethernet e 2 IPs públicos estáticos (188.120.245.4 e 188.120.244.5).

O que eu quero: Configurar caixa virtual (Ubuntu) com acesso via IP estático (188.120.244.5).

O que eu estava tentando:

  • config.vm.forward_port - boa idéia: interface de configuração "eth1: 1" com 188.120.244.5 na máquina host e adicione ao arquivo do Vagrant "config.vm.forward_port = hmm ..?"
  • config.vm.network: hostonly, "188.120.244.5" - não está funcionando. Foi criada uma nova interface na máquina host com o ip "188.120.244.1". É claro que o IP 188.120.244.1 não é meu e não consigo acessar meu servidor através deste IP.
  • config.vm.network: bridged - estou confuso como isso funciona:)

O que eu tenho agora: não funciona a configuração.

Debian-host-machine# cat Vagrantfile
Vagrant::Config.run do |config|
  config.vm.define :gitlab do |box_config|
    box_config.vm.box = "ubuntu"
    box_config.vm.host_name = "ubuntu"
    box_config.vm.network :bridged
    box_config.vm.network :hostonly, "188.120.244.5", :auto_config => false
  end
end

Debian-host-machine# ifconfig
eth1      Link encap:Ethernet  HWaddr 00:15:17:69:71:bb  
          inet addr:188.120.245.4  Bcast:188.120.247.255  Mask:255.255.248.0

lo        Link encap:Local Loopback  
          inet addr:127.0.0.1  Mask:255.0.0.0

vboxnet0  Link encap:Ethernet  HWaddr 0a:00:27:00:00:00  
          inet addr:188.120.244.1  Bcast:188.120.246.255  Mask:255.255.255.0

Ubuntu-virtual-machine# ifconfig
eth0      Link encap:Ethernet  HWaddr 08:00:27:ee:8d:0c  
          inet addr:10.0.2.15  Bcast:10.0.2.255  Mask:255.255.255.0

eth1      Link encap:Ethernet  HWaddr 08:00:27:45:71:87  

lo        Link encap:Local Loopback  
          inet addr:127.0.0.1  Mask:255.0.0.0

Como posso acessar a caixa virtual via IP estático público da rede?

Estou usando o Oracle VM VirtualBox Manager 4.1.18 e o Vagrant versão 1.0.3.

Agradecemos antecipadamente pelo seu feedback.

    
por Numbata 17.08.2012 / 00:03

3 respostas

14

Desde o lançamento 1.3.0:

Static IP can now be set on public networks. [GH-1745]

você só precisa colocar essa configuração no seu Vagrantfile (documentação) :

config.vm.network "public_network", ip: "192.168.0.200"

Essa coisa do Vagrant é realmente ótima: -)

    
por 27.09.2013 / 01:04
2

Após duas semanas, resolvi a minha pergunta desta forma:

  • Escreveu o livro de receitas do vagrant-boxes: link
  • Escreveu iptables de recriação com suporte nat. link

Cookbook gera o Vagrantfile a partir do template:

Vagrant::Config.run do |config|
  config.vm.define :gitlab do |box_config|
    box_config.vm.box = "mybox"
    box_config.vm.host_name = "mybox"
    box_config.vm.forward_port 80, 4567
    box_config.vm.forward_port 22, 2222
    box_config.vm.network :hostonly, "192.168.5.10"
  end
end
O

rebuild-iptables precisa gerar e aplicar regras de iptables:

# /etc/iptables/general
*filter
:INPUT ACCEPT [0,0]
:FORWARD ACCEPT [0,0]
:OUTPUT ACCEPT [0,0]
# Vagrand boxes forwarding ports
-A FORWARD -p tcp -d 192.168.5.10 --dport 80 -j ACCEPT
-A FORWARD -p tcp -d 192.168.5.10 --dport 22 -j ACCEPT
COMMIT
*nat
:PREROUTING ACCEPT [0,0]
:POSTROUTING ACCEPT [0,0]
:OUTPUT ACCEPT [0,0]
# Nat all traffic to vagrant boxes
# For example, my vagrant box public static ip is 8.8.8.8
-A PREROUTING -d 8.8.8.8 -p tcp -j DNAT --to-destination 192.168.5.10
-A POSTROUTING -j MASQUERADE
COMMIT

E:

echo '1' > /proc/sys/net/ipv4/ip_forward

Agora, posso instalar aplicativos na caixa e conectá-los por meio de IP estático público sem a configuração "port_forwarding" (como no VPS).

    
por 12.09.2012 / 15:20
0

O que você realmente precisa é de uma interface em ponte com um IP estático. Infelizmente, o vagrant ainda não suporta isso (veja a discussão aqui ).

Primeiramente, defina box_config.vm.network: colmatado, já que você precisa do virtualbox para criar uma interface em ponte, e você pode remover o box_config.vm.network: hostonly.

Você pode usar o provisionamento de shell para reconfigurar a rede com seu IP, mas não pode modificar o arquivo / etc / network / interfaces ou a VM não poderão voltar se você fizer uma parada vagrant (fazer o vagrant up tentará reconfigurar as interfaces de rede e morrerá se você tiver modificado esse arquivo). br> Então, a alternativa é criar um script em /etc/network/if-up.d/ que reconfigure o IP da interface. Não é o ideal, mas ainda não encontrei uma solução melhor!


Veja as seções relevantes da configuração abaixo. No script bash, você deve definir o IP / máscara de rede, gateway e DNS (e o número da interface, se o seu é diferente, deve ser eth1, embora se você acabou de definir uma bridged no Vagrantfile). Então, a primeira vez que você faz o vagrant e cria a VM, ele cria um script /etc/network/if-up.d/custom-network-config que define a configuração de IP, roteamento e reinicia o apache (você precisará modifique isso se estiver usando outros serviços que dependem da configuração de rede) e defina o DNS.
Então, se você fizer vagrant up novamente quando a VM já existir (por exemplo, depois de parar o vagrant) tudo o que ele faz é reiniciar as interfaces de rede para que o script seja executado e a interface configurada (por algum motivo, descobri que o script não foi kickado desligado quando a VM foi ligada e as interfaces surgiram inicialmente - não tenho certeza do porquê).

Vagrantfile

config.vm.network :bridged
config.vm.provision :shell, :path => "vagrant-setup.sh"

vagrant-setup.sh

#!/bin/bash

ip="188.120.244.5/24"
gateway=""
dns="8.8.8.8"


#####################
# NEW VM
#####################
if [ ! -f /etc/network/if-up.d/custom-network-config ]; then

cat >/etc/network/if-up.d/custom-network-config <<EOL
#!/bin/bash
if [ "\$IFACE" != "eth1" ]; then
exit 0
fi
ifconfig eth1 down
ifconfig eth1 ${ip} up
route del default
route add default gw ${gateway} dev eth1
service apache2 restart
EOL

cat >/etc/resolv.conf <<EOL
nameserver ${dns}
EOL

chmod +x /etc/network/if-up.d/custom-network-config
/etc/init.d/networking restart


#####################
# EXISTING VM
#####################
else

/etc/init.d/networking restart

fi
    
por 10.09.2012 / 14:46