IP tĩnh công khai cho hộp vagrant


13

Tôi có máy chủ (Debian Squeeze) với 1 thẻ ethernet và 2 IP tĩnh công khai (188.120.245.4 và 188.120.244.5).

Những gì tôi muốn: Thiết lập hộp ảo (Ubuntu) với quyền truy cập thông qua IP tĩnh (188.120.244.5).

Những gì tôi đã cố gắng:

  • config.vm.forward_port - ý tưởng hay: thiết lập giao diện "eth1: 1" với 188.120.244.5 trên máy chủ và thêm vào tệp Vagrant "config.vm.forward_port = hmm ..?"
  • config.vm.network: hostonly, "188.120.244.5" - không hoạt động. Đã được tạo giao diện mới trên máy chủ với ip "188.120.244.1". Tất nhiên, IP 188.120.244.1 không phải của tôi và tôi không thể truy cập máy chủ của mình thông qua IP này.
  • config.vm.network: Bridged - Tôi bối rối cách thức hoạt động của nó :)

Những gì tôi có bây giờ: Không làm việc cấu hình.

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

Làm thế nào tôi có thể truy cập hộp ảo thông qua IP tĩnh công cộng từ mạng?

Tôi đang sử dụng Oracle VM VirtualBox Manager 4.1.18 và Vagrant phiên bản 1.0.3.

Cảm ơn trước phản hồi của bạn.


Tôi cảnh giác khi sử dụng vagrant với IP có thể truy cập bên ngoài và đặc biệt là với nhà cung cấp hộp ảo. stackoverflow.com/a/16919804/2109800
mc0e

Câu trả lời:


14

Kể từ khi phát hành 1.3.0:

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

bạn chỉ cần đặt cấu hình này vào Vagrantfile (tài liệu) :

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

Điều Vagrant này thực sự tuyệt vời :-)


Vì vậy, tôi nhận thấy rằng máy chủ DHCP của tôi dường như không nghĩ rằng hộp mơ hồ của tôi thực sự ở ip đó: \
ThorSummoner

2

Sau hai tuần, tôi đã giải quyết câu hỏi của mình theo cách này:

Cookbook tạo Vagrantfile từ mẫu:

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

xây dựng lại-iptables cần tạo và áp dụng các quy tắc 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

Và:

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

Bây giờ, tôi có thể cài đặt các ứng dụng vào hộp và kết nối với chúng qua ip tĩnh công khai mà không cần thiết lập "port_forwarding" (Giống như trên VPS).


0

Những gì bạn thực sự cần là một giao diện bắc cầu với một IP tĩnh. Thật không may, vagrant chưa hỗ trợ điều này (xem thảo luận ở đây ).

Đầu tiên, đặt box_config.vm.network: bắc cầu khi bạn cần hộp ảo để tạo giao diện cầu nối và bạn có thể xóa box_config.vm.network: hostonly.

Bạn có thể sử dụng cung cấp shell để định cấu hình lại mạng với IP của mình, nhưng bạn không thể sửa đổi tệp / etc / network / giao diện hoặc VM sẽ không thể sao lưu nếu bạn tạm dừng (làm mờ đi sẽ cố gắng và cấu hình lại các giao diện mạng và nó sẽ chết nếu bạn sửa đổi tệp đó).
Vì vậy, giải pháp thay thế là tạo tập lệnh trong /etc/network/if-up.d/ để đặt lại IP cho giao diện. Không lý tưởng, nhưng tôi chưa đưa ra giải pháp nào tốt hơn!


Xem các phần có liên quan của cấu hình dưới đây. Trên tập lệnh bash, bạn nên đặt IP / netmask, gateway và DNS (và số giao diện, nếu của bạn khác, nó sẽ là eth1 mặc dù nếu bạn vừa được đặt cầu nối trong Vagrantfile).
Vì vậy, lần đầu tiên bạn thực hiện và nó tạo ra VM, nó sẽ tạo một tập lệnh /etc/network/if-up.d/custom-network-config để đặt cấu hình IP, định tuyến và khởi động lại apache (bạn sẽ cần sửa đổi điều này nếu bạn đang sử dụng các dịch vụ khác dựa trên cấu hình mạng) và nó đặt DNS.
Sau đó, nếu bạn thực hiện lại một lần nữa khi VM đã tồn tại (ví dụ như sau khi tạm dừng), tất cả những gì nó làm là khởi động lại các giao diện mạng để tập lệnh được chạy và giao diện được định cấu hình (vì một số lý do, tôi thấy tập lệnh không được khởi động tắt khi VM được bật và giao diện xuất hiện ban đầu - không biết tại sao).

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
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.