IP estática pública para caja vagabunda

13

Tengo un servidor (Debian Squeeze) con 1 tarjeta ethernet y 2 IP públicas estáticas (188.120.245.4 y 188.120.244.5).

Lo que quiero: configurar la caja virtual (Ubuntu) con acceso a través de IP estática (188.120.244.5).

Lo que estaba intentando:

  • config.vm.forward_port - buena idea: configurar la interfaz "eth1: 1" con 188.120.244.5 en la máquina host y agregar al archivo Vagrant "config.vm.forward_port = hmm ..?"
  • config.vm.network: hostonly, "188.120.244.5" - no funciona. Se creó una nueva interfaz en la máquina host con ip "188.120.244.1". Por supuesto, 188.120.244.1 IP no es mío y no puedo acceder a mi servidor a través de esta IP.
  • config.vm.network: bridged - Estoy confundido sobre cómo funciona esto :)

Lo que tengo ahora: no funciona la configuración.

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

¿Cómo puedo acceder a la caja virtual a través de IP estática pública desde la red?

Estoy usando Oracle VM VirtualBox Manager 4.1.18 y Vagrant versión 1.0.3.

Gracias de antemano por su colaboración.

Numbata
fuente
Tengo cuidado con el uso de vagrant con una IP accesible externamente, y particularmente con el proveedor de virtualbox. stackoverflow.com/a/16919803/2109800
mc0e

Respuestas:

14

Desde la versión 1.3.0:

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

solo tiene que poner esta configuración en su Vagrantfile (documentación) :

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

Esta cosa vagabunda es realmente genial :-)

neves
fuente
Así que me doy cuenta de que mi servidor DHCP no parece pensar que mi caja vagabunda está realmente en esa ip: \
ThorSummoner
2

Después de dos semanas, resolví mi pregunta de esta manera:

El libro de cocina genera Vagrantfile a partir de la plantilla:

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

rebuild-iptables necesita generar y aplicar reglas 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

Y:

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

Ahora, puedo instalar aplicaciones en la caja y conectarme a ellas a través de IP estática pública sin la configuración "port_forwarding" (como en VPS).

Numbata
fuente
0

Lo que realmente necesita es una interfaz en puente con una IP estática. Desafortunadamente, vagabundo aún no admite esto (ver discusión aquí ).

En primer lugar, configure box_config.vm.network: bridged ya que necesita virtualbox para crear una interfaz en puente, y puede eliminar box_config.vm.network: hostonly.

Puede usar el aprovisionamiento de shell para reconfigurar la red con su IP, pero no puede modificar el archivo / etc / network / interfaces o la máquina virtual no podrá volver a funcionar si hace una parada vagabunda (al intentar hacerlo vagabundo intentará y reconfigura las interfaces de red, y muere si ha modificado ese archivo).
Entonces, la alternativa es crear un script en /etc/network/if-up.d/ que restablezca la IP para la interfaz. No es ideal, ¡pero aún no he encontrado una solución mejor!


Consulte las secciones relevantes de configuración a continuación. En el script bash, debe configurar la IP / máscara de red, la puerta de enlace y el DNS (y el número de interfaz, si el suyo es diferente, debería ser eth1 aunque si acaba de establecer un puente en Vagrantfile).
Entonces, la primera vez que vagabundea y crea la máquina virtual, crea un script /etc/network/if-up.d/custom-network-config que establece la configuración de IP, el enrutamiento y reinicia Apache (necesitará modifique esto si está utilizando otros servicios que dependen de la configuración de red) y establece DNS.
Luego, si vuelve a vagabundear cuando la VM ya existe (por ejemplo, después de hacer una parada vagabunda), todo lo que hace es reiniciar las interfaces de red para que el script se ejecute y la interfaz esté configurada (por alguna razón, descubrí que el script no fue pateado apagado cuando la VM se encendió y las interfaces aparecieron inicialmente, no estoy seguro de por qué).

Archivo vagabundo

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
Demelziraptor
fuente