Öffentliche statische IP für Vagrant Box


13

Ich habe einen Server (Debian Squeeze) mit 1 Ethernet-Karte und 2 öffentlichen statischen IP-Adressen (188.120.245.4 und 188.120.244.5).

Was ich will: Virtuelle Box einrichten (Ubuntu) mit Zugriff über statische IP (188.120.244.5).

Was ich versucht habe:

  • config.vm.forward_port - gute Idee: Setup-Schnittstelle "eth1: 1" mit 188.120.244.5 auf dem Host-Computer und Hinzufügen zur Vagrant-Datei "config.vm.forward_port = hmm ..?"
  • config.vm.network: hostonly, "188.120.244.5" - funktioniert nicht. Es wurde eine neue Schnittstelle auf dem Host-Rechner mit der IP-Adresse "188.120.244.1" erstellt. Natürlich gehört die 188.120.244.1 IP nicht mir und ich kann über diese IP nicht auf meinen Server zugreifen.
  • config.vm.network: bridged - ich bin verwirrt wie das funktioniert :)

Was ich jetzt habe: Nicht funktionierende Konfiguration.

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

Wie kann ich über eine öffentliche statische IP-Adresse vom Netzwerk auf die virtuelle Box zugreifen?

Ich verwende Oracle VM VirtualBox Manager 4.1.18 und Vagrant Version 1.0.3.

Vielen Dank im Voraus für Ihr Feedback.


Ich bin vorsichtig bei der Verwendung von Vagrant mit einer von außen zugänglichen IP, insbesondere mit dem Virtualbox-Anbieter. stackoverflow.com/a/16919803/2109800
mc0e

Antworten:


14

Seit Release 1.3.0:

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

Sie müssen nur diese Konfiguration in Ihr Vagrantfile (Dokumentation) einfügen :

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

Diese Vagrant-Sache ist wirklich toll :-)


Daher
stelle

2

Nach zwei Wochen habe ich meine Frage so gelöst:

Kochbuch erzeugt Vagrantfile aus Vorlage:

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 muss iptables-Regeln generieren und anwenden:

# /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

Und:

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

Jetzt kann ich Anwendungen auf der Box installieren und über eine öffentliche statische IP-Adresse eine Verbindung herstellen, ohne dass das Setup für "port_forwarding" erforderlich ist (wie bei VPS).


0

Was Sie wirklich brauchen, ist eine überbrückte Schnittstelle mit einer statischen IP. Leider unterstützt Vagrant dies noch nicht (siehe Diskussion hier ).

Stellen Sie zunächst box_config.vm.network: bridged ein, wenn Sie virtualbox benötigen, um eine Bridged-Schnittstelle zu erstellen, und Sie können die Datei box_config.vm.network: hostonly entfernen.

Sie können die Shell-Bereitstellung verwenden , um das Netzwerk mit Ihrer IP-Adresse neu zu konfigurieren. Sie können jedoch die Datei / etc / network / interfaces nicht ändern. Andernfalls kann die VM nicht wieder gestartet werden, wenn Sie einen vagabunden Stopp ausführen (dies wird von vagabunden versucht) und konfigurieren Sie die Netzwerkschnittstellen neu, und es stirbt, wenn Sie diese Datei geändert haben).
Die Alternative besteht also darin, ein Skript in /etc/network/if-up.d/ zu erstellen, mit dem die IP-Adresse für die Schnittstelle neu festgelegt wird. Nicht ideal, aber ich habe noch keine bessere Lösung gefunden!


Siehe relevante Abschnitte der Konfiguration unten. Im Bash-Skript sollten Sie die IP- / Netzmaske, das Gateway und den DNS (und die Schnittstellennummer, falls Ihre Nummer anders ist, sollte sie eth1 lauten, wenn Sie gerade in Vagrantfile überbrückt wurden).
Wenn Sie also zum ersten Mal vagrant up ausführen und die VM erstellen, wird ein Skript /etc/network/if-up.d/custom-network-config erstellt, mit dem die IP-Konfiguration, das Routing und der Neustart von Apache festgelegt werden (dies ist erforderlich) Ändern Sie dies, wenn Sie andere Dienste verwenden, die von der Netzwerkkonfiguration abhängig sind, und DNS festgelegt wird.
Wenn Sie sich dann erneut aufmachen, während die VM bereits vorhanden ist (z. B. nach einem vagabunden Stopp), müssen Sie lediglich die Netzwerkschnittstellen neu starten, damit das Skript ausgeführt und die Schnittstelle konfiguriert wird (aus irgendeinem Grund wurde festgestellt, dass das Skript nicht gekickt wurde) aus, als die VM eingeschaltet wurde und die Schnittstellen anfänglich eingerichtet wurden - nicht sicher warum).

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
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.