web-dev-qa-db-fra.com

IP statique publique pour la boîte vagabonde

J'ai serveur (Squeeze debian) avec 1 carte Ethernet et 2 IPS statiques publiques (188.120.245.4 et 188.120.244.5).

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

Ce que j'essayais:

  • config.vm.forward_port - Bonne idée: Interface de configuration "ETH1: 1" avec 188.120.244.5 sur Host-Machine et 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 Host-Machine avec IP "188.120.244.1". Bien sûr, 188.120.244.1 IP n'est pas à moi et je ne peux pas accéder à mon serveur via cette adresse IP.
  • config.vm.network: Bridged - je suis confus comment cela fonctionne :)

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

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 à une boîte virtuelle via une adresse IP statique publique du réseau?

J'utilise oracle VM VirtualBox Manager 4.1.18 et Version Vagrant 1.0.3.

Merci d'avance pour vos commentaires.

13
Numbata

Depuis la libération 1.3.0:

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

vous devez simplement mettre cette configuration dans votre VagrantFile (documentation) :

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

Cette chose vagabonde est vraiment géniale :-)

14
neves

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

Cookbook génère du 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 à la case et les connecter à une adresse IP statique publique sans "Port_Forwarding" (comme sur VPS).

2
Numbata

Ce dont vous avez vraiment besoin est une interface pontée avec une adresse IP statique. Malheureusement, Vagrant ne l'appuie pas encore (voir Discussion ici ).

Premièrement, SET BOX_CONFIG.VM.NETWORK: PONDÉE Comme vous avez besoin de VirtualBox pour créer une interface pontée et vous pouvez supprimer le BOX_CONFIG.VM.NETWORK: Hostonly.

Vous pouvez utiliser Shell provisioning pour reconfigurer le réseau avec votre adresse IP, mais vous ne pouvez pas modifier le fichier/etc/réseau/interfaces ou VM ne pourra pas revenir Jusqu'à si vous faites une halte vagabondée (faire en sorte que Vagrant Up, vous essaierez de reconfigurer les interfaces réseau et que cela meurt si vous avez modifié ce fichier).
Donc, l'alternative crée 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é une meilleure solution!


[.____] Voir les sections pertinentes de la configuration ci-dessous. Sur le script Bash, vous devez définir la carte IP/Netmask, passerelle et DNS (et numéro d'interface, si le vôtre est différent, il devrait être de l'ETH1 si vous venez d'obtenir un ensemble ponté dans VagrantFile).
[.____] Alors, la première fois que vous faites vagabond et que cela crée le VM, il crée un script /etc/network/if-up.d/custom-network-config qui définit la configuration IP , routage et redémarrage Apache (vous devrez modifier cela si vous utilisez d'autres services qui s'appuient sur la configuration de réseautage), et il définit DNS.
[.____] alors si vous faites un vague à nouveau lorsque le VM existe déjà (par exemple après l'arrêt du vagabon), tout ce qu'il fait est redémarrer les interfaces réseau afin que le script soit exécuté et que l'interface est configurée (pour Une raison quelconque, j'ai trouvé que le script n'avait pas été lancé lorsque le VM a été activé et les interfaces sont arrivées 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
0
Demelziraptor