私は1つのイーサネットカードと2つのパブリック静的IP(188.120.245.4および188.120.244.5)を備えたサーバー(Debian Squeeze)を持っています。
必要なもの:静的IP(188.120.244.5)経由でアクセスできる仮想ボックス(Ubuntu)をセットアップします。
私が試していたもの:
私が今持っているもの:動作しない構成。
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に追加するだけです (documentation) :
config.vm.network "public_network", ip: "192.168.0.200"
この浮浪者のものは本当に素晴らしいです:-)
2週間後、私はこの方法で質問を解決しました。
クックブックはテンプレートから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
これで、アプリケーションをボックスにインストールし、「port_forwarding」設定なしで(VPSのように)パブリック静的IP経由でそれらに接続できます。
本当に必要なのは、静的IPを持つブリッジインターフェイスです。残念ながら、vagrantはまだこれをサポートしていません(ディスカッション here を参照)。
まず、virtualboxでブリッジインターフェイスを作成する必要があるため、box_config.vm.network:bridgedを設定します。box_config.vm.network:hostonlyを削除できます。
シェルプロビジョニング を使用してIPでネットワークを再構成できますが、/ etc/network/interfacesファイルを変更できないか、VMを使用できませんvagrant haltを実行した場合に復帰する(vagrant upを実行すると、ネットワークインターフェイスが再構成され、そのファイルを変更した場合は終了します)。
そのため、代わりに、/ etc/network/if-up.d /にスクリプトを作成して、インターフェースのIPを再設定します。理想的ではありませんが、まだより良い解決策を思い付いていません!
以下の構成の関連セクションを参照してください。 bashスクリプトでは、IP /ネットマスク、ゲートウェイ、DNSを設定する必要があります(インターフェース番号。異なる場合はeth1にする必要がありますが、Vagrantfileでブリッジを設定しただけの場合)。
そのため、最初に浮浪者を実行すると、VMが作成されます。これは、/ etc/network/if-up.d/custom-network-configを設定するスクリプトを作成します。 IP構成、ルーティング、およびApacheの再起動(ネットワーク構成に依存する他のサービスを使用している場合は、これを変更する必要があります)、およびDNSを設定します。
VMが既に存在する場合に(たとえば、vagrant haltを実行した後)再度vagrant upを実行すると、ネットワークインターフェイスが再起動されるため、スクリプトが実行され、インターフェイスが構成されました(何らかの理由で、VMがオンになっていて、インターフェイスが最初に起動したときにスクリプトがキックオフされなかったことがわかりました-理由は不明です)。
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