У меня есть сервер (Debian Squeeze) с 1 картой Ethernet и 2 общедоступными статическими IP-адресами (188.120.245.4 и 188.120.244.5).
Что хочу: Настроить виртуальный ящик (Ubuntu) с доступом по статическому IP (188.120.244.5).
Что я пробовал:
Что у меня сейчас: Не рабочая конфигурация.
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 действительно великолепен :-)
Через две недели я решил свой вопрос следующим образом:
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).
Что вам действительно нужно, так это мостовой интерфейс со статическим IP. К сожалению, vagrant еще не поддерживает это (см. Обсуждение Вот).
Во-первых, установите box_config.vm.network: bridged, поскольку вам нужен виртуальный бокс для создания мостового интерфейса, и вы можете удалить box_config.vm.network: hostonly.
Ты можешь использовать подготовка оболочки для перенастройки сети с вашим IP-адресом, но вы не можете изменить файл / etc / network / interfaces, иначе виртуальная машина не сможет вернуться к работе, если вы сделаете бродячую остановку (выполнение бродячей остановки попытается перенастроить сетевые интерфейсы , и он умирает, если вы изменили этот файл).
Таким образом, альтернативой является создание сценария в /etc/network/if-up.d/, который повторно устанавливает IP для интерфейса. Не идеально, но лучшего решения пока не придумал!
См. Соответствующие разделы конфигурации ниже. В сценарии bash вы должны установить IP / маску сети, шлюз и DNS (и номер интерфейса, если у вас другой, он должен быть eth1, хотя, если вы только что установили мост в Vagrantfile).
Итак, при первом запуске vagrant up и создании виртуальной машины он создает сценарий /etc/network/if-up.d/custom-network-config, который устанавливает конфигурацию IP, маршрутизацию и перезапускает apache (вам потребуется измените это, если вы используете другие службы, которые зависят от конфигурации сети), и он устанавливает DNS.
Затем, если вы снова выполните vagrant up, когда виртуальная машина уже существует (например, после выполнения vagrant halt), все, что он делает, это перезапускает сетевые интерфейсы, чтобы запустить сценарий и настроить интерфейс (по какой-то причине я обнаружил, что сценарий не был запущен выключен, когда виртуальная машина была включена и изначально появились интерфейсы - не знаю почему).
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