Publiczny statyczny adres IP Vagrant Box

13

Mam serwer (Debian Squeeze) z 1 kartą Ethernet i 2 publicznymi statycznymi adresami IP (188.120.245.4 i 188.120.244.5).

Co chcę: skonfigurować wirtualną skrzynkę (Ubuntu) z dostępem przez statyczny adres IP (188.120.244.5).

Co próbowałem:

  • config.vm.forward_port - dobry pomysł: interfejs instalacyjny „eth1: 1” z 188.120.244.5 na hoście i dodaj do pliku Vagrant „config.vm.forward_port = hmm ..?”
  • config.vm.network: hostonly, „188.120.244.5” - nie działa. Został stworzony nowy interfejs na maszynie hosta z ip „188.120.244.1”. Oczywiście adres IP 188.120.244.1 nie jest mój i nie mogę uzyskać dostępu do mojego serwera za pośrednictwem tego adresu IP.
  • config.vm.network: bridged - Nie wiem, jak to działa :)

Co mam teraz: Konfiguracja nie działa.

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

Jak mogę uzyskać dostęp do wirtualnego urządzenia za pośrednictwem publicznego statycznego adresu IP z sieci?

Używam Oracle VM VirtualBox Manager 4.1.18 i Vagrant w wersji 1.0.3.

Z góry dziękuję za opinię.

Numbata
źródło
Obawiam się używania włóczęgów z zewnętrznie dostępnym adresem IP, a zwłaszcza z dostawcą virtualbox. stackoverflow.com/a/16919803/2109800
mc0e

Odpowiedzi:

14

Od wydania 1.3.0:

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

musisz tylko umieścić tę konfigurację w pliku Vagrantfile (dokumentacja) :

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

Ta włóczęga jest naprawdę świetna :-)

Neves
źródło
Zauważam
2

Po dwóch tygodniach rozwiązałem swoje pytanie w ten sposób:

Książka kucharska generuje plik Vagrantfile z szablonu:

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 musi wygenerować i zastosować reguły 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

I:

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

Teraz mogę zainstalować aplikacje w urządzeniu i połączyć się z nimi za pomocą publicznego statycznego adresu IP bez konfiguracji „port_forwarding” (jak w VPS).

Numbata
źródło
0

To, czego naprawdę potrzebujesz, to zmostkowany interfejs ze statycznym adresem IP. Niestety włóczęga jeszcze tego nie popiera (patrz dyskusja tutaj ).

Po pierwsze, ustaw box_config.vm.network: zmostkowany, ponieważ potrzebujesz wirtualnej skrzynki, aby utworzyć zmostkowany interfejs, i możesz usunąć box_config.vm.network: hostonly.

Za pomocą aprowizacji można zrekonfigurować sieć za pomocą adresu IP, ale nie można zmodyfikować pliku / etc / network / interfaces, w przeciwnym razie maszyna wirtualna nie będzie mogła wrócić, jeśli zrobi się włóczęgowskie zatrzymanie (wykonanie włóczęgi spróbuje i ponownie skonfiguruj interfejsy sieciowe, i umrze, jeśli zmodyfikowałeś ten plik).
Alternatywą jest więc utworzenie skryptu w /etc/network/if-up.d/, który ponownie ustawia adres IP interfejsu. Nie jest to idealne rozwiązanie, ale nie znalazłem jeszcze lepszego rozwiązania!


Zobacz odpowiednie sekcje konfiguracji poniżej. W skrypcie bash powinieneś ustawić adres IP / maskę sieci, bramę i DNS (oraz numer interfejsu, jeśli twój jest inny, powinien to być eth1, jeśli właśnie ustawiłeś mostek w Vagrantfile).
Tak więc, kiedy po raz pierwszy robisz włóczęgę i tworzy ona maszynę wirtualną, tworzy skrypt /etc/network/if-up.d/custom-network-config, który ustawia konfigurację IP, routing i restartuje apache (musisz zmodyfikuj to, jeśli korzystasz z innych usług, które polegają na konfiguracji sieci), i ustawi DNS.
Następnie, jeśli wykonasz włóczęgę ponownie, gdy maszyna wirtualna już istnieje (np. Po zatrzymaniu włóczęgi), wystarczy zrestartować interfejsy sieciowe, aby skrypt został uruchomiony i interfejs został skonfigurowany (z jakiegoś powodu odkryłem, że skrypt nie został wykopany wyłączony, gdy maszyna wirtualna została włączona i interfejsy pojawiły się na początku - nie wiem, dlaczego).

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
źródło