Публичный статический ip для vagrant box

13

У меня есть сервер (Debian Squeeze) с 1 сетевой картой и 2 общедоступными статическими IP-адресами (188.120.245.4 и 188.120.244.5).

Что я хочу: Установить виртуальный ящик (Ubuntu) с доступом через статический IP (188.120.244.5).

Что я пытался:

  • config.vm.forward_port - хорошая идея: настроить интерфейс "eth1: 1" с 188.120.244.5 на хост-машине и добавить в файл 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.

Заранее спасибо за ваш отзыв.

Numbata
источник
Я опасаюсь использовать vagrant с внешне доступным IP, особенно с провайдером virtualbox. stackoverflow.com/a/16919803/2109800
mc0e

Ответы:

14

Начиная с версии 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"

Эта вещь Бродяги действительно велика :-)

Невиш
источник
Поэтому я замечаю, что мой DHCP-сервер, похоже, не думает, что мой бродячий ящик действительно имеет тот ip: \
ThorSummoner
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

Теперь я могу устанавливать приложения в коробку и подключаться к ним через общедоступный статический ip без настройки «port_forwarding» (как на VPS).

Numbata
источник
0

Что вам действительно нужно, так это мостовой интерфейс со статическим IP. К сожалению, vagrant пока не поддерживает это (см. Обсуждение здесь ).

Во-первых, установите box_config.vm.network: bridged, так как вам нужен virtualbox для создания мостового интерфейса, и вы можете удалить box_config.vm.network: hostonly.

Вы можете использовать инициализацию оболочки для переконфигурирования сети с вашим IP, но вы не можете изменить файл / etc / network / interfaces, иначе виртуальная машина не сможет вернуться, если вы прекратите работу vagrant (попытка выполнить vagrant up и перенастроить сетевые интерфейсы, и он умрет, если вы изменили этот файл).
Таким образом, альтернативой является создание сценария в /etc/network/if-up.d/, который переустанавливает IP для интерфейса. Не идеально, но я еще не нашел лучшего решения!


Смотрите соответствующие разделы конфигурации ниже. В скрипте bash вы должны установить IP / маску сети, шлюз и DNS (и номер интерфейса, если у вас другой, это должен быть eth1, хотя, если вы только что установили мостовое соединение в Vagrantfile).
Итак, когда вы в первый раз делаете vagrant и создаете виртуальную машину, он создает скрипт /etc/network/if-up.d/custom-network-config, который устанавливает конфигурацию IP, маршрутизацию и перезапускает apache (вам потребуется измените это, если вы используете другие службы, которые полагаются на конфигурацию сети), и это устанавливает DNS.
Затем, если вы снова выполните vagrant, когда виртуальная машина уже существует (например, после выполнения 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
Demelziraptor
источник