IP statis publik untuk kotak gelandangan

13

Saya memiliki server (Debian Squeeze) dengan 1 kartu ethernet dan 2 IP statis publik (188.120.245.4 dan 188.120.244.5).

Yang saya inginkan: Setup virtual box (Ubuntu) dengan akses melalui IP statis (188.120.244.5).

Apa yang saya coba:

  • config.vm.forward_port - ide bagus: setup interface "eth1: 1" dengan 188.120.244.5 pada mesin host, dan tambahkan ke file Vagrant "config.vm.forward_port = hmm ..?"
  • config.vm.network: hostonly, "188.120.244.5" - tidak berfungsi. Dibuat antarmuka baru pada mesin host dengan ip "188.120.244.1". Tentu saja 188.120.244.1 IP bukan milik saya dan saya tidak dapat mengakses server saya melalui IP ini.
  • config.vm.network: bridged - Saya bingung cara kerjanya :)

Apa yang saya miliki sekarang: Konfigurasi tidak berfungsi.

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

Bagaimana saya bisa mengakses kotak virtual melalui IP statis publik dari jaringan?

Saya menggunakan Oracle VM VirtualBox Manager 4.1.18 dan Vagrant versi 1.0.3.

Terima kasih sebelumnya atas tanggapan Anda.

Numbata
sumber
Saya khawatir menggunakan gelandangan dengan IP yang dapat diakses secara eksternal, dan khususnya dengan penyedia kotak virtual. stackoverflow.com/a/16919803/2109800
mc0e

Jawaban:

14

Sejak rilis 1.3.0:

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

Anda hanya perlu meletakkan konfigurasi ini di Vagrantfile Anda (dokumentasi) :

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

Hal Vagrant ini benar-benar hebat :-)

neves
sumber
Jadi saya perhatikan bahwa server DHCP saya tampaknya tidak berpikir bahwa kotak gelandangan saya benar-benar pada ip itu: \
ThorSummoner
2

Setelah dua minggu, saya menyelesaikan pertanyaan saya seperti ini:

Cookbook menghasilkan Vagrantfile dari templat:

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 perlu membuat dan menerapkan aturan 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

Dan:

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

Sekarang, saya dapat menginstal aplikasi ke kotak dan menyambungkannya melalui ip statis publik tanpa pengaturan "port_forwarding" (Seperti pada VPS).

Numbata
sumber
0

Yang benar-benar Anda butuhkan adalah antarmuka yang dijembatani dengan IP statis. Sayangnya, gelandangan belum mendukung ini (lihat diskusi di sini ).

Pertama-tama, atur box_config.vm.network: dijembatani karena Anda memerlukan virtualbox untuk membuat antarmuka yang dijembatani, dan Anda dapat menghapus box_config.vm.network: hostonly.

Anda dapat menggunakan provisi shell untuk mengkonfigurasi ulang jaringan dengan IP Anda, tetapi Anda tidak dapat memodifikasi file / etc / network / interfaces atau VM tidak akan dapat kembali jika Anda melakukan penghentian gelandangan (melakukan gelandangan akan mencoba dan mengkonfigurasi ulang antarmuka jaringan, dan mati jika Anda memodifikasi file itu).
Jadi, alternatifnya adalah membuat skrip di /etc/network/if-up.d/ yang mengatur ulang IP untuk antarmuka. Tidak ideal, tapi saya belum menemukan solusi yang lebih baik!


Lihat bagian konfigurasi yang relevan di bawah ini. Pada skrip bash Anda harus mengatur IP / netmask, gateway dan DNS (dan nomor antarmuka, jika Anda berbeda, itu harus et1 meskipun jika Anda baru saja mengatur bridged di Vagrantfile).
Jadi, pertama kali Anda melakukan gelandangan dan menciptakan VM itu menciptakan skrip /etc/network/if-up.d/custom-network-config yang mengatur konfigurasi IP, perutean, dan restart apache (Anda perlu modifikasi ini jika Anda menggunakan layanan lain yang bergantung pada konfigurasi jaringan), dan ini akan mengatur DNS.
Kemudian jika Anda melakukan gelran lagi ketika VM sudah ada (misalnya setelah melakukan gelandangan berhenti) semua yang dilakukannya adalah me-restart antarmuka jaringan sehingga skrip dijalankan dan antarmuka dikonfigurasi (untuk beberapa alasan, saya menemukan skrip tidak ditendang mati ketika VM dihidupkan dan antarmuka muncul pada awalnya - tidak yakin mengapa).

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
sumber