Я работаю над архитектурой веб-сервисов. У меня есть какое-то программное обеспечение, которое мне нужно запустить на собственном хост-компьютере, а не в Vagrant. Но я бы хотел запустить некоторые клиентские службы на гостевой машине.
config.vm.forwarded_port
Параметр Vagrant откроет порт на хосте и отправит данные гостю. Но как я могу открыть порт на гостевой машине и отправить данные на хост? (Это все еще переадресация портов, но в обратном направлении.)
vagrant
portforwarding
Дэн Фабулич
источник
источник
Ответы:
Когда вы запускаете
vagrant ssh
, он фактически использует эту базовую команду:ssh -p 2222 -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no -o LogLevel=ERROR -o IdentitiesOnly=yes -i ~/.vagrant.d/insecure_private_key vagrant@127.0.0.1
SSH поддерживает переадресацию портов в нужном вам направлении
-R guestport:host:hostport
. Итак, если вы хотите подключиться к порту12345
гостя и перенаправить его на негоlocalhost:80
, вы должны использовать эту команду:ssh -p 2222 -R 12345:localhost:80 -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no -o LogLevel=ERROR -o IdentitiesOnly=yes -i ~/.vagrant.d/insecure_private_key vagrant@127.0.0.1
Как правильно комментирует Ээро, вы также можете использовать команду
vagrant ssh -- -R 12345:localhost:80
, которая дает тот же эффект в гораздо более сжатой команде.источник
vagrant ssh -- -R 12345:localhost:80
Синтаксис опции ssh -R [bind_address:] порт: host: hostport , где первое число - это номер порта для прослушивания на гостевой машине, а последние два - адрес службы как видно с главной машины.vagrant ssh-config | ssh -F /dev/stdin $BOX -R $PORT_VM:localhost:$PORT -N
В книге
Vagrant: Up and Running
(дата публикации: 12 июня 2013 г.), написанной создателем Vagrant, он упомянул, что гостевая машина не может получить доступ к службам, работающим на хост-машине.Вместо использования
Forwarded Ports
вы можете настроить частную сеть, используяHost-Only Networks
.Плюсы использования
Host-Only Networks
болееForwarded Ports
Гостевые машины могут получать доступ к службам, работающим на хост-машине.
Эта функция решит вашу проблему.
Гостевые машины могут получать доступ к службам, работающим на другой гостевой машине.
Эта функция очень полезна для разделения служб на несколько машин для более точной имитации производственной среды.
Безопасный
Внешние машины не имеют доступа к службам, работающим на гостевых машинах.
Меньше работы
Не нужно настраивать каждый
Forwarded Port
Как настроить
Host-Only Networks
config.vm.network :"hostonly", "192.168.0.0"
# Бродячая версия # 1config.vm.network :private_network, ip: "192.168.0.0"
# Бродячая версия # 2Если вы укажете эту строку
Vagrantfile
, бродяга создаст частную сеть со статическим IP-адресом:192.168.0.0
IP-адрес хоста всегда один и тот же IP-адрес, но с последним октетом как 1. В предыдущем примере хост-машина будет иметь IP-адрес
192.168.0.1
.источник
Vagrant: Up and Running
) вы можете настроить мостовую сеть. В сети с мостовым подключением другие машины в вашей локальной сети могут получить доступ к вашей виртуальной машине, и наоборот. Но поскольку IP-адрес назначается через DHCP, вам нужно будетifconfig
найти его IP-адрес на виртуальной машине.192.168.0.0
не работает - скручивание / пинг на хост-машине приводило к подключению t / o. Использование адреса @ Nucleon (в соответствии с документами Vagrant по теме) сработало, как рекламируется.config.vm.network :private_network, ip: "192.168.0.0"
и скручивание / пинг хоста192.168.0.1
приводило к тайм-аутам соединения. Настройка сети, которая будет192.168.50.4
разрешена, т.е. хост, доступный по адресу192.168.50.1
.Вы можете получить доступ к портам на хост-машине через шлюз по умолчанию в гостевой ОС. (Обычно IP-адрес
10.0.2.2
.)Например, если у вас есть веб-сервер, работающий на порту 8000 на вашем хост-компьютере ...
Вы можете получить к нему доступ изнутри Vagrant VM по адресу
10.0.2.2:8000
(предоставляется10.0.2.2
IP-адрес гостевого шлюза по умолчанию):Чтобы найти IP-адрес шлюза по умолчанию в гостевой ОС, запустите
netstat -rn
(или в гостевой ОСipconfig
Windows) и найдите строку с целевым IP-адресом0.0.0.0
(или поле «Шлюз по умолчанию» в Windows):Вы можете извлечь этот IP программно с помощью
netstat -rn | grep "^0.0.0.0 " | tr -s ' ' | cut -d " " -f2
.Источники: Как подключиться к хосту PostgreSQL с машины vagrant virtualbox ; Подключиться к хост-машине из гостевой ОС VirtualBox?
источник
ifconfig
иip address
не получали то, что мне было нужно, но получалиnetstat -rn
.Добавьте
~/.ssh/config
на хост-машину следующее:Он позволяет вам получить доступ к службе на порту 52698 хост-машины из Vagrant, если вы вошли в систему через
vagrant ssh
.Вы можете подтвердить, что это работает, запустив
netstat -lt
бродячую виртуальную машину и отметив следующие строки:источник
Я могу получить доступ к службам, работающим на моем хост-компьютере, через его локальный IP-адрес (а не его адрес обратной связи). Я протестировал, создав http-сервер на 80-м порту (а затем на 987-м) и на
curl
197.45.0.10:80 и 197.45.0.10:987 (фактический IP-адрес изменен для защиты невиновных). Это сработало оба раза, и у меня нет специальной конфигурации бродяг (нет public_network, нет forwarded_port), и хотя у меня есть перенаправленные порты через PuTTY, у меня нет перенаправленных портов 80 и 987. Так что, возможно, попробуйте использовать локальный или общедоступный IP-адрес хост-машины.И если вы хотите получить доступ (ssh into) к одному гостевому экземпляру бродяги из другого, вы можете включить,
public_network
а также переадресацию с порта 22Vagrantfile
следующим образом:Затем, пока этот порт открыт (т.е. сделайте еще несколько переадресации портов в конфигурации вашего маршрутизатора), вы можете получить доступ к этой машине из любого места, даже из внешнего мира.
источник