Поиск по сайту:

Как настроить сеть в Vagrant

Vagrant настолько популярен среди разработчиков и DevOps-инженеров, поскольку они могут продолжать использовать существующие инструменты разработки (например, редакторы, браузеры, отладчики и т. д.) в своей локальной системе. Например, разработчики могут синхронизировать файлы с гостевой машины с локальной системой, использовать свой любимый редактор для редактирования этих файлов и, наконец, синхронизировать их обратно с гостевой машиной. Аналогичным образом, если они создали веб-приложение на виртуальной машине, они могут получить доступ к этому приложению и протестировать его из веб-браузера своей локальной системы. В этом руководстве мы увидим, как настроить сеть в Vagrant для обеспечения доступа к гостевой машине из локальной хост-системы.

Настройка сети в Vagrant

Vagrant предлагает следующие три варианта сети:

  1. Перенаправление порта
  2. Частная сеть (сеть только для хоста)
  3. Публичная сеть (мостовая сеть)

1. Настройте переадресацию портов

По умолчанию мы можем получить доступ к виртуальным машинам Vagrant через ssh, используя команду vagrant ssh. Когда мы получаем доступ к виртуальной машине через SSH, Vagrant перенаправляет порт 22 с гостевой машины на открытый порт на хост-машине. Это называется переадресацией портов. Vagrant автоматически обрабатывает этот процесс переадресации портов без какого-либо вмешательства пользователя. Вы также можете перенаправить определенный порт по вашему выбору. Например, если вы перенаправили порт 80 на гостевом компьютере на порт 8080 на хост-компьютере, вы сможете получить доступ к веб-серверу, перейдя по адресу http://. localhost:8080 на вашем хост-компьютере.

Переадресацию портов можно настроить в «Vagrantfile». Перейдите в каталог проекта Vagrant и откройте Vagrantfile в вашем любимом редакторе.

Найдите следующую строку:

Vagrant.configure("2") do |config|
[...]
   # config.vm.network "forwarded_port", guest: 80, host: 8080
end

Раскомментируйте его и определите, какие порты куда перенаправлять. В этом примере я перенаправляю порт 80 гостя на порт 8080 хоста.

Vagrant.configure("2") do |config|
[...]
   config.vm.network "forwarded_port", guest: 80, host: 8080
end

Настройте переадресацию портов в Vagrant

Теперь перезапустите машину Vagrant с обновленным Vagrantfile:

vagrant reload --provision

В выводе вы увидите, что переадресация портов настроена:

==> default: Halting domain…
==> default: Starting domain.
==> default: Waiting for domain to get an IP address…
==> default: Waiting for SSH to become available…
==> default: Creating shared folders metadata…
==> default: Forwarding ports…
==> default: 80 (guest) => 8080 (host) (adapter eth0)
==> default: Rsyncing folder: /home/sk/myvagrants/ => /vagrant

Вы также можете уничтожить виртуальную машину и перезапустить ее с обновленным Vagrantfile:

vagrant destroy <VM-name>
vagrant up

Теперь подключитесь по SSH к гостевой машине с помощью команды:

vagrant ssh

Установите в него веб-сервер Apache. Если виртуальная машина основана на Deb, запустите:

sudo apt install apache2

Если это система на основе RHEL, запустите это:

sudo yum install httpd

Запустите службу Apache:

sudo systemctl enable --now httpd

Теперь откройте веб-браузер в вашей хост-системе и перейдите по адресу http://localhost:8080 в своем браузере. Вы увидите тестовую страницу Apache в своем браузере.

Тестовая страница веб-сервера Apache

Несмотря на то, что мы обращаемся к веб-серверу по URL-адресу http://localhost:8080 в хост-системе, он не обслуживается локальным веб-сервером. Фактический веб-сайт (т. е. тестовая страница Apache) обслуживается с гостевой виртуальной машины, и все фактические сетевые данные отправляются гостю.

1.1. Что делать, если порт 8080 используется другим приложением?

В нашем предыдущем примере мы перенаправили порт 80 от гостя на порт 8080 на хосте. Другими словами, трафик, отправленный на порт 8080, фактически перенаправляется на порт 80 на гостевой машине. Что, если какое-то другое приложение в данный момент использует порт 8080? Конфликт портов происходит при запуске нескольких виртуальных машин. Вы можете неосознанно перенаправить уже используемый порт. Не беспокойся! Vagrant имеет встроенную поддержку обнаружения коллизий портов. Если порт уже используется другим приложением, Vagrant сообщит об этом в выходных данных, поэтому вы можете либо освободить порт, либо использовать другой порт.

Vagrant также достаточно умен, чтобы автоматически находить и исправлять конфликты портов. Если он обнаружит, что порт конфликтует с другим портом, он автоматически исправит его, используя для вас любой другой неиспользуемый порт.

Чтобы включить автокоррекцию, добавьте дополнительную опцию auto_correct: true в определение переадресации портов в вашем Vagrantfile.

config.vm.network "forwarded_port", guest: 80, host: 8080, auto_correct: true

По умолчанию Vagrant выберет порт автокоррекции между портом 2200 и диапазоном портов 2250. Вы также можете выбрать свой собственный диапазон, указав следующую строку в Vagrantfile, как показано ниже.

config.vm.usable_port_range = (2200..2250)

Перезапустите машину Vagrant, чтобы изменения вступили в силу:

1.2. Изменить сетевой протокол

По умолчанию Vagrant использует протокол TCP для переадресации портов. Однако вы можете использовать протокол UDP, если хотите пересылать пакеты UDP.

Чтобы использовать порт UDP, добавьте следующее определение в свой Vagrantfile:

config.vm.network "forwarded_port", guest: 80, host: 8080, auto_correct: true protocol: "udp"

Перезапустите Vagrant VM, чтобы применить изменения.

2. Настройте частную сеть.

В частной сети или сети только для хоста сетевое соединение создается между хост-системой и виртуальными машинами в хост-системе. Частная сеть создается с использованием виртуального сетевого адаптера, видимого операционной системе хоста. Другие системы в сети не могут взаимодействовать с виртуальными машинами. Все сетевые операции разрешены внутри хост-системы.

Частная сеть также может функционировать как DHCP-сервер и имеет собственную подсеть. Каждая виртуальная машина в частной сети получит IP-адрес из этого IP-пространства. Таким образом, мы можем получить доступ к виртуальным машинам напрямую, используя IP-адрес хост-системы.

Чтобы настроить частную сеть или сеть только для хоста в Vagrant со статическим IP-адресом, откройте Vagrantfile, найдите следующую строку и раскомментируйте ее.

config.vm.network "private_network", ip: "192.168.121.60"

Здесь 192.168.121.60 — IP-адрес виртуальной машины. Замените это своим собственным IP.

Перезапустите виртуальную машину, чтобы изменения вступили в силу.

Если вы хотите автоматически установить IP-адрес с помощью DHCP, измените определение частной сети, как показано ниже:

config.vm.network "private_network", type: "dhcp"

Виртуальной машине будет присвоен случайный IP-адрес. Чтобы узнать IP-адрес виртуальной машины, вам необходимо подключиться к ней по SSH с помощью команды vagrant ssh, а затем найти ее IP-адрес с помощью ip . команда.

3. Настройте общедоступную сеть.

В общедоступной сети или сети с мостовым соединением все виртуальные машины будут находиться в той же сети, что и ваш хост-компьютер. Каждая виртуальная машина получит свой IP-адрес от DHCP-сервера (если он доступен в локальной сети). Таким образом, все виртуальные машины будут действовать как еще одна физическая система в сети и смогут взаимодействовать с любой системой в сети.

Чтобы настроить общедоступную или мостовую сеть, отредактируйте Vagrantfile, найдите следующую строку и раскомментируйте ее:

config.vm.network "public_network"

Сохраните и закройте файл. Перезапустите виртуальную машину, чтобы применить изменения. Виртуальная машина автоматически получит IP-адрес.

Если вы хотите установить статический IP-адрес, просто измените определение сети, как показано ниже:

config.vm.network "public_network", ip: "192.168.121.61"

4. Установите имя хоста

Вы можете определить имя хоста, используя параметр config.vm.hostname в Vagrantfile.

Отредактируйте Vagrantfile в предпочитаемом вами редакторе и добавьте/измените следующую строку:

config.vm.hostname = "myhost.ostechnix.example"

Сохраните и закройте файл. Приведенное выше определение добавит строку myhost.ostechnix.example в файл /etc/hosts.

Перезапустите Vagrant VM, чтобы изменения вступили в силу.

Проверьте, изменилось ли имя хоста:

[vagrant@myhost ~]$ hostname -f
myhost.osechnix.example

Вы также можете напрямую проверить содержимое файла /etc/hosts.

cat /etc/hosts

Пример вывода:

127.0.0.1   localhost localhost.localdomain localhost4 localhost4.localdomain4
::1         localhost localhost.localdomain localhost6 localhost6.localdomain6
127.0.1.1 myhost.osechnix.example myhost

5. Включите несколько параметров сети.

У каждого варианта сети есть свои плюсы и минусы. По какой-то причине вам может потребоваться настроить все параметры сети для одной виртуальной машины. Если да, то Vagrant имеет возможность включить несколько сетевых опций. Все, что вам нужно сделать, это просто определить параметры сети один за другим в Vagrantfile, как показано ниже:

config.vm.hostname = "myhost.ostechnix.example"
config.vm.network "forwarded_port", guest: 80, host: 8080, auto_correct: true
config.vm.network "private_network", ip: "192.168.121.60"

Когда вы создаете новую виртуальную машину с помощью этого файла Vagrantfile, vagrant создаст виртуальную машину со следующими сведениями о сети:

  • установите имя хоста как myhost.ostechnix.example
  • настроить переадресацию портов
  • настроить приват со статическим IP 192.168.121.60

Помимо настройки нескольких типов сетей, мы также можем определить несколько сетей. Например, вы можете определить несколько сетей только для хоста с разными IP-адресами, как показано ниже.

config.vm.network "private_network", ip: "192.168.121.60"
config.vm.network "private_network", ip: "192.168.121.61"

Надеюсь это поможет. На этом этапе вы, возможно, получите базовое представление о типах сетей Vagrant и о том, как настроить сеть в Vagrant из командной строки. Есть еще чему поучиться. Я рекомендую вам просмотреть официальную документацию Vagrant для более подробной настройки.

Ресурс:

  • Бродячая сеть

Статьи по данной тематике