Vagrant kutusu için genel statik ip


13

1 ethernet kartı ve 2 genel statik IP'ye (188.120.245.4 ve 188.120.244.5) sahip sunucum (Debian Squeeze) var.

Ne istiyorum: Statik IP (188.120.244.5) üzerinden erişimli sanal kutu (Ubuntu) kurun.

Ne deniyordum:

  • config.vm.forward_port - iyi fikir: ana bilgisayardaki 188.120.244.5 ile "eth1: 1" kurulum arayüzü ve Vagrant dosyasına "config.vm.forward_port = hmm ..?"
  • config.vm.network: hostonly, "188.120.244.5" - çalışmıyor. Ana makinede ip "188.120.244.1" ile yeni bir arayüz oluşturuldu. Tabii ki 188.120.244.1 IP benim değil ve bu IP üzerinden sunucuma erişemiyorum.
  • config.vm.network: köprülü - Bunun nasıl çalıştığına şaşkınım :)

Şimdi ne var: Yapılandırma çalışmıyor.

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

Sanal kutuya ağdaki genel statik IP üzerinden nasıl erişebilirim?

Oracle VM VirtualBox Manager 4.1.18 ve Vagrant sürüm 1.0.3 kullanıyorum.

görüşleriniz için şimdiden teşekkür ederiz.


Vagrant'ı harici olarak erişilebilir bir IP ile ve özellikle de sanal kutu sağlayıcısıyla kullanmaya dikkat ediyorum. stackoverflow.com/a/16919803/2109800
mc0e

Yanıtlar:


14

Sürüm 1.3.0'dan beri:

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

bu yapılandırmayı Vagrantfile (dokümantasyon) klasörünüze koymanız yeterlidir :

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

Bu Vagrant şey gerçekten harika :-)


DHCP sunucumun, vagrant
kutumun

2

İki hafta sonra sorumu şu şekilde çözdüm:

Yemek Kitabı Şablondan Vagrantfile oluşturur:

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'ın iptables kurallarını oluşturması ve uygulaması gerekir:

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

Ve:

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

Şimdi, kutuya uygulamalar yükleyebilir ve "port_forwarding" kurulumu (VPS'de olduğu gibi) olmadan genel statik ip üzerinden onlara bağlanabilirim.


0

Gerçekten ihtiyacınız olan, statik bir IP'ye sahip köprülü bir arayüz. Ne yazık ki, vagrant bunu henüz desteklemiyor ( buradaki tartışmaya bakın ).

Öncelikle, köprülü bir arabirim oluşturmak için sanal kutuya ihtiyaç duyduğunuzda box_config.vm.network: bridged öğesini ayarlayın ve box_config.vm.network: hostonly öğesini kaldırabilirsiniz.

Ağı IP'nizle yeniden yapılandırmak için kabuk provizyonunu kullanabilirsiniz , ancak / etc / network / interfaces dosyasını değiştiremezsiniz veya bir vagrant durdurması yaparsanız VM geri gelemez (vagrant up dener ve ağ arayüzlerini yeniden yapılandırdığınızda o dosyayı değiştirdiyseniz ölür).
Yani, alternatif /etc/network/if-up.d/ içinde arabirimin IP'sini yeniden ayarlayan bir komut dosyası oluşturmaktır. İdeal değil, ama henüz daha iyi bir çözüm bulamadım!


Aşağıdaki yapılandırma ile ilgili bölümlere bakın. Bas betiğinde IP / netmask, ağ geçidi ve DNS'yi (ve arayüz numaranız, sizinki farklıysa, Vagrantfile'de henüz köprülenmişseniz eth1 olmalıdır) ayarlamanız gerekir.
Bu nedenle, ilk kez vagrant yaptığınızda ve VM'yi oluşturduğunda, IP yapılandırmasını, yönlendirmeyi ayarlayan ve apache'yi yeniden başlatan bir komut dosyası /etc/network/if-up.d/custom-network-config oluşturur (yapmanız gerekir ağ yapılandırmasına dayanan diğer hizmetleri kullanıyorsanız bunu değiştirin) ve DNS'yi ayarlar.
Sonra VM zaten vagrant yukarı yaparsanız (örn. Vagrant durma yaptıktan sonra) tek şey, komut dosyası çalışacak ve arayüz yapılandırılmış (bazı nedenlerle, komut dosyası tekme değildi bulundu ağ arayüzlerini yeniden başlatmak VM açıldığında ve arayüzler başlangıçta geldiğinde kapalı - neden emin değilim).

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
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.