IP statique publique pour boîte vagabonde

13

J'ai un serveur (Debian Squeeze) avec 1 carte Ethernet et 2 adresses IP statiques publiques (188.120.245.4 et 188.120.244.5).

Ce que je veux: configurer une boîte virtuelle (Ubuntu) avec un accès via une adresse IP statique (188.120.244.5).

Ce que j'essayais:

  • config.vm.forward_port - bonne idée: configurer l'interface "eth1: 1" avec 188.120.244.5 sur la machine hôte et l'ajouter au fichier Vagrant "config.vm.forward_port = hmm ..?"
  • config.vm.network: hostonly, "188.120.244.5" - ne fonctionne pas. A été créé une nouvelle interface sur la machine hôte avec l'IP "188.120.244.1". Bien sûr, l'IP 188.120.244.1 n'est pas la mienne et je ne peux pas accéder à mon serveur via cette IP.
  • config.vm.network: bridged - je ne sais pas comment cela fonctionne :)

Ce que j'ai maintenant: la configuration ne fonctionne pas.

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

Comment puis-je accéder à la boîte virtuelle via une IP statique publique à partir du réseau?

J'utilise Oracle VM VirtualBox Manager 4.1.18 et Vagrant version 1.0.3.

Merci d'avance pour vos commentaires.

Numbata
la source
Je me méfie de l'utilisation de vagrant avec une adresse IP accessible de l'extérieur, et en particulier avec le fournisseur de virtualbox. stackoverflow.com/a/16919803/2109800
mc0e

Réponses:

14

Depuis la version 1.3.0:

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

il vous suffit de mettre cette configuration dans votre Vagrantfile (documentation) :

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

Ce truc Vagrant est vraiment génial :-)

neves
la source
Je remarque donc que mon serveur DHCP ne semble pas penser que ma boîte vagabonde est vraiment à cette
adresse
2

Après deux semaines, j'ai résolu ma question de cette façon:

Cookbook génère Vagrantfile à partir du modèle:

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 doit générer et appliquer des règles 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

Et:

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

Maintenant, je peux installer des applications dans la boîte et me connecter à elles via une IP publique statique sans configuration "port_forwarding" (comme sur VPS).

Numbata
la source
0

Ce dont vous avez vraiment besoin, c'est d'une interface pontée avec une adresse IP statique. Malheureusement, vagabond ne supporte pas encore cela (voir la discussion ici ).

Tout d'abord, définissez box_config.vm.network: bridged car vous avez besoin de virtualbox pour créer une interface pontée, et vous pouvez supprimer box_config.vm.network: hostonly.

Vous pouvez utiliser le provisionnement du shell pour reconfigurer le réseau avec votre IP, mais vous ne pouvez pas modifier le fichier / etc / network / interfaces ou la machine virtuelle ne pourra pas revenir si vous faites un arrêt vagabond (faire vagrant up va essayer et reconfigurer les interfaces réseau, et il meurt si vous avez modifié ce fichier).
Ainsi, l'alternative consiste à créer un script dans /etc/network/if-up.d/ qui redéfinit l'IP de l'interface. Pas idéal, mais je n'ai pas encore trouvé de meilleure solution!


Voir les sections pertinentes de la configuration ci-dessous. Sur le script bash, vous devez définir l'IP / le masque de réseau, la passerelle et le DNS (et le numéro d'interface, si le vôtre est différent, il doit être eth1 si vous venez de définir un pont dans Vagrantfile).
Donc, la première fois que vous vous trompez et qu'il crée la machine virtuelle, il crée un script /etc/network/if-up.d/custom-network-config qui définit la configuration IP, le routage et redémarre apache (vous devrez modifiez-le si vous utilisez d'autres services qui dépendent de la configuration réseau), et cela définit le DNS.
Ensuite, si vous recommencez à vagabonder alors que la machine virtuelle existe déjà (par exemple, après avoir fait un arrêt vagabond), il ne fait que redémarrer les interfaces réseau pour que le script soit exécuté et que l'interface soit configurée (pour une raison quelconque, j'ai trouvé que le script n'a pas été lancé) désactivé lorsque la machine virtuelle a été allumée et que les interfaces sont apparues initialement - je ne sais pas pourquoi).

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
Demelziraptor
la source