Вопрос или проблема
Я изменил Vagrantfile для taiga-vagrant на основе VAGRANT DOCS/Public Networks следующим образом:
# -*- mode: ruby -*-
# vi: set ft=ruby :
require "./source.rb"
ROOT_PATH = File.dirname(__FILE__)
VAGRANTFILE_API_VERSION = "2"
def configure_extra(config)
end
def configure(config)
config.vm.box = "trusty64"
config.vm.box_url = "https://cloud-images.ubuntu.com/vagrant/trusty/current/trusty-server-cloudimg-amd64-vagrant-disk1.box"
# Отключить автоматическую проверку обновлений коробки. Если вы отключите это,
# коробки будут проверяться на обновления только тогда, когда пользователь запустит
# `vagrant box outdated`. Это не рекомендуется.
# config.vm.box_check_update = false
# Имя хоста
config.vm.hostname = "taiga"
# Создать сопоставление перенаправленного порта, которое позволяет получить доступ к определенному порту
# внутри машины с порта на хост-машине.
config.vm.network :forwarded_port, host: 8000, guest: 8000
config.vm.network :forwarded_port, host: 9001, guest: 9001
# Создать общую сеть, которая обычно соответствует мостовой сети.
# Мостовые сети делают машину видимой как другое физическое устройство в
# вашей сети.
config.vm.network "public_network", autoconfig: false
config.vm.provision "fix-no-tty", type: "shell" do |s|
s.privileged = false
s.inline = "sudo sed -i '/tty/!s/mesg n/tty -s \\&\\& mesg n/' /root/.profile"
end
# статический ip
config.vm.provision "shell",
run: "always",
inline: "ifconfig eth1 xxx.yyy.zzz.153 netmask 255.255.255.0 up"
# статический ipv6
config.vm.provision "shell",
run: "always",
inline: "ifconfig eth1 inet6 add fc00::17/7"
# маршрут по умолчанию
config.vm.provision "shell",
run: "always",
inline: "route add default gw xxx.yyy.zzz.132"
# маршрут по умолчанию ipv6
config.vm.provision "shell",
run: "always",
inline: "route -A inet6 add default gw fc00::1 eth1"
# удалить маршрут по умолчанию на eth0
config.vm.provision "shell",
run: "always",
inline: "eval `route -n | awk '{ if ($8 ==\"eth0\" && $2 != \"0.0.0.0\") print \"route del default gw \" $2; }'`"
# Если true, то любые SSH-соединения будут позволять пересылку агента.
# Значение по умолчанию: false
config.ssh.forward_agent = true
# Поделиться дополнительной папкой с гостевой ВМ. Первый аргумент —
# путь на хосте к самой папке. Второй аргумент —
# путь на госте для монтирования папки. А необязательный третий
# аргумент — набор не обязательных опций.
config.vm.synced_folder "./data", "/home/vagrant/data"
# Конфигурация, специфичная для провайдера, чтобы вы могли настроить различные
# задние провайдеры для Vagrant. Они предоставляют специфические для провайдера опции.
config.vm.provider "virtualbox" do |vb|
# Запуск в безголовом режиме
vb.gui = false
host = RbConfig::CONFIG['host_os']
# Отдает четверть системной памяти ВМ и доступ ко всем доступным ядрам ЦП
if host =~ /darwin/
cpus = `sysctl -n hw.ncpu`.to_i
# sysctl возвращает байты, конвертируя в МБ...
mem = `sysctl -n hw.memsize`.to_i / 1024 / 1024 / 4
elsif host =~ /linux/
cpus = `nproc`.to_i
# meminfo возвращает КБ, конвертируя в МБ...
mem = `grep 'MemTotal' /proc/meminfo | sed -e 's/MemTotal://' -e 's/ kB//'`.to_i / 1024 / 4
else
# жестко задаем значения для windows...
cpus = 2
mem = 2048
end
vb.customize ["modifyvm", :id, "--memory", mem]
vb.customize ["modifyvm", :id, "--cpus", cpus]
end
# Обеспечение
config.vm.provision "shell" do |shell|
vagrant_shell_scripts_configure(
shell,
File.join(ROOT_PATH, "scripts"),
"provision.sh",
{}
)
end
end
# Ищем Vagrantfile.local для загрузки
local_vagrantfile = "#{__FILE__}.local"
if File.exists?(local_vagrantfile)
eval File.read(local_vagrantfile)
end
Vagrant.configure(VAGRANTFILE_API_VERSION) do |config|
configure config
configure_extra config
end
После vagrant up
меня спрашивают “К какому интерфейсу следует подключить мост сети?”. После выбора 1 (для eth0) виртуальная машина VirtualBox запускается нормально, и я могу подключиться через ssh. Настройки сетевых интерфейсов этой ВМ:
eth0 Link encap:Ethernet HWaddr 08:00:27:70:2a:9d
inet addr:10.0.2.15 Bcast:10.0.2.255 Mask:255.255.255.0
inet6 addr: fe80::a00:27ff:fe70:2a9d/64 Scope:Link
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:1462 errors:0 dropped:0 overruns:0 frame:0
TX packets:968 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:151879 (151.8 KB) TX bytes:122611 (122.6 KB)
eth1 Link encap:Ethernet HWaddr 08:00:27:2e:e8:7f
inet addr:xxx.yyy.zzz.153 Bcast:xxx.yyy.zzz.255 Mask:255.255.255.0
inet6 addr: fe80::a00:27ff:fe2e:e87f/64 Scope:Link
inet6 addr: fc00::17/7 Scope:Global
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:1335 errors:0 dropped:0 overruns:0 frame:0
TX packets:683 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:1078620 (1.0 MB) TX bytes:85690 (85.6 KB)
Небольшое обновление
Во время запуска появляется несколько сообщений
default: Warning: Connection timeout. Retrying...
default: Warning: Remote connection disconnect. Retrying...
default: Warning: Remote connection disconnect. Retrying...
default: Warning: Remote connection disconnect. Retrying...
...
В конце концов, машина запускается. Я могу получить доступ к taiga из внешнего интернета. Но, необходимо ли иметь оба этих интерфейса? Разве я не могу иметь только статический публичный IP для eth0?
Пост на https://github.com/mitchellh/vagrant/pull/1745#issuecomment-33159374 оказался полезным. Следующая строка решила проблему!
config.vm.network "public_network", :bridge => "eth0", ip: "xxx.yyy.zzz.153", :netmask => "255.255.255.128", auto_config: false
Ответ или решение
Использование статического публичного IP-адреса только для eth0 в Vagrantfile
При работе с Vagrant и настройке сетевого взаимодействия виртуальных машин важно правильно сконфигурировать сетевые интерфейсы согласно требованиям вашего проекта. В вашем случае, вы хотите настроить статический публичный IP-адрес только для интерфейса eth0
, вместо того чтобы использовать два интерфейса (eth0
и eth1
). В данном ответе мы разберем, как это можно реализовать в вашем Vagrantfile
, а также проанализируем дополнительные аспекты настройки.
Основные параметры конфигурации
Ваш исходный конфигурационный файл Vagrantfile включает в себя создание public_network
, что позволяет виртуальной машине (VM) подключаться к вашей физической сети. Однако для достижения вашей цели требуется внести некоторые изменения. Вместо создания public_network
, необходимо указать параметры непосредственно для интерфейса eth0
.
Изменение Vagrantfile
Чтобы настроить статический IP-адрес только для интерфейса eth0
, вам нужно внести следующие изменения. Замените секцию с конфигурацией сети на следующую:
# Создайте публичную сеть, которая будет привязана к eth0
config.vm.network "public_network", bridge: "eth0", ip: "xxx.yyy.zzz.153", netmask: "255.255.255.128", auto_config: false
Обратите внимание, что в этом коде мы указываем интерфейс eth0
, присваиваем публичный IP-адрес, а также задаем маску подсети. Параметр auto_config: false
отключает автоматическую конфигурацию, что позволяет вам самостоятельно управлять настройками сети.
Удаление лишнего интерфейса
Если вы намерены использовать только eth0
для публичного IP, вам следует исключить все упоминания и конфигурации для eth1
. Это облегчит вашу сетевую конфигурацию, а также устранит возможные конфликты.
Проблемы с подключением
Как вы упомянули в своем вопросе, вы столкнулись с предупреждениями о таймауте соединения. Это может быть связано с неправильной настройкой сети или задержками в конфигурации самой системы. Запуск vagrant up
может занять больше времени при установке сетевых компонентов; если проблема повторяется, стоит проверить следующие параметры:
- Проверка сетевых интерфейсов на хосте: Убедитесь, что выбранный интерфейс
eth0
доступен для использования и корректно подключен к сети. - Firewall и NAT: Проверьте настройки брандмауэра и NAT вашего хостовой системы, которые могут блокировать соединения.
- Параметры конфигурации: Обновите все временные метки и конфигурации сетевых скриптов, чтобы исправить возможные задержки.
Заключение
В итоге, если ваша цель состоит в том, чтобы использовать исключительно один интерфейс с публичным IP-адресом в Vagrant, внесение изменений в конфигурацию Vagrantfile
, как обсуждено выше, позволит вам это сделать. Удаление ненужного интерфейса улучшит управляемость и уменьшит вероятность возникновения проблем при запуске виртуальной машины.
Эти изменения не только очищают ваш код, но и делают вашу среду более предсказуемой и менее подверженной ошибкам. Таким образом, вы получите более стабильное и быстрое подключение к вашей виртуальной машине, что, в свою очередь, повысит продуктивность работы с проектом Taiga.
Если у вас возникнут дополнительные вопросы по настройке Vagrant или другим аспектам виртуализации, не стесняйтесь обращаться за помощью.