Networking
vagrant box 的公共靜態 IP
我有帶有 1 個乙太網卡和 2 個公共靜態 IP(188.120.245.4 和 188.120.244.5)的伺服器(Debian Squeeze)。
我想要什麼:設置通過靜態 IP(188.120.244.5)訪問的虛擬機(Ubuntu)。
我在嘗試什麼:
- config.vm.forward_port - 好主意:在主機上使用 188.120.244.5 設置介面“eth1:1”,並添加到 Vagrant 文件“config.vm.forward_port = hmm..?”
- config.vm.network :hostonly, “188.120.244.5” - 不工作。在 ip “188.120.244.1” 的主機上創建了新介面。當然 188.120.244.1 IP 不是我的,我不能通過這個 IP 訪問我的伺服器。
- config.vm.network :bridged - 我很困惑這是如何工作的:)
我現在擁有的:不工作的配置。
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
如何通過網路中的公共靜態 IP 訪問虛擬盒子?
我正在使用 Oracle VM VirtualBox Manager 4.1.18 和 Vagrant 1.0.3 版。
提前感謝您的回饋。
自 1.3.0 版以來:
Static IP can now be set on public networks. [GH-1745]
您只需將此配置放入您的 Vagrantfile (文件)中:
config.vm.network "public_network", ip: "192.168.0.200"
這個流浪的東西真的很棒:-)
兩週後,我以這種方式解決了我的問題:
- 寫了 vagrant-boxes 食譜:https ://github.com/numbata/cookbook-vagrant
- 編寫了帶有 nat 支持的rebuild-iptables。https://github.com/numbata/rebuild-iptables
Cookbook 從模板生成 Vagrantfile:
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 需要生成和應用 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
和:
echo '1' > /proc/sys/net/ipv4/ip_forward
現在,我可以將應用程序安裝到盒子並通過公共靜態 ip 連接到它們,而無需設置“port_forwarding”(就像在 VPS 上一樣)。