Бродячий обратный порт переадресации?
Я работаю над архитектурой веб-сервисов. У меня есть программное обеспечение, которое мне нужно запустить на родной хост-машине, а не в Vagrant. Но я хотел бы запустить некоторые клиентские службы на гостя.
бродяги config.vm.forwarded_port
параметр откроет порт на хосте и отправит данные гостю. Но как я могу открыть порт на гостевой и отправить данные на хост? (Это все еще переадресация портов, но в обратном направлении.)
5 ответов:
при выполнении
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 поддерживает пересылку портов в нужном направлении с помощью . Поэтому, если вы хотите подключиться к порту
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: Up and Running
(паб. дата: 12 июня 2013 г.), написанный создателем Vagrant, он упомянул, что гостевая машина не может получить доступ к службам, запущенным на хост-машине.вместо
Forwarded Ports
, вы можете настроить частную сеть, используяHost-Only Networks
.
преимущества использования
Host-Only Networks
overForwarded Ports
гостевые машины могут получить доступ к службам, запущенным на хосте
этот функция решит вашу проблему.
гостевые машины могут получить доступ к службам, запущенным на другой гостевой машине
эта функция очень полезна для разделения служб на несколько машин, чтобы более точно имитировать производственную среду.
безопасное
внешние машины не имеют доступа к службам, запущенным на гостевых машинах
меньше работа
нет необходимости настраивать каждый
Forwarded Port
настройка
Host-Only Networks
config.vm.network :"hostonly", "192.168.0.0"
# Бродячая Версия #1
config.vm.network :private_network, ip: "192.168.0.0"
# Бродячая Версия #2имея эту строку в файле
Vagrantfile
проинструктирует vagrant создать частную сеть, которая имеет статический IP-адрес:192.168.0.0
IP-адрес хоста всегда один и тот же IP адрес, но с последним октетом как 1. В предыдущем примере хост-машина будет иметь IP-адрес
192.168.0.1
.
вы можете получить доступ к портам на главной машине через шлюз по умолчанию внутри гостевой ОС. (Который обычно имеет IP
10.0.2.2
.)например, если у вас есть веб-сервер работает на порту 8000 на вашей машине...
echo 'Hello, guest!' > hello python -m SimpleHTTPServer 8000
вы можете получить доступ к нему изнутри Vagrant VM по адресу
10.0.2.2:8000
(при10.0.2.2
- это ip шлюза гостя по умолчанию):vagrant ssh curl http://10.0.2.2:8000/hello # Outputs: Hello, guest!
чтобы найти IP шлюза по умолчанию внутри гостевой ОС, запустите
netstat -rn
(илиipconfig
на гостевой Windows) и найдите строку с IP-адресом назначения0.0.0.0
(или поле с надписью "шлюз по умолчанию" в Windows):$ netstat -rn Kernel IP routing table Destination Gateway Genmask Flags MSS Window irtt Iface 0.0.0.0 10.0.2.2 0.0.0.0 UG 0 0 0 eth0 10.0.2.0 0.0.0.0 255.255.255.0 U 0 0 0 eth0 192.168.33.0 0.0.0.0 255.255.255.0 U 0 0 0 eth1
вы можете извлечь этот IP программно с
netstat -rn | grep "^0.0.0.0 " | tr -s ' ' | cut -d " " -f2
.источники: Как подключиться к хосту PostgreSQL с vagrant virtualbox machine;подключиться к хост-машине из гостевой ОС VirtualBox?
добавить следующий код
~/.ssh/config
на хост-машине:Host 127.0.0.1 RemoteForward 52698 127.0.0.1:52698
Это позволяет получить доступ к службе на хост-машине порт 52698 от Vagrant, пока вы вошли в систему через
vagrant ssh
.вы можете подтвердить, что он работает, запустив
netstat -lt
на vagrant VM и принимая во внимание следующие строки:tcp 0 0 localhost:52698 *:* LISTEN tcp6 0 0 ip6-localhost:52698 [::]:* LISTEN
Я могу получить доступ к службам, запущенным на моем хост-компьютере, через его локальный IP-адрес (а не его адрес обратной связи). Я протестировал, создав http-сервер на порту 80( а затем на порту 987) и
curl
ing 197.45.0.10:80 и 197.45.0.10: 987 (фактический ip-адрес изменен для защиты невинных). Он работал оба раза, и у меня нет никакой специальной конфигурации vagrant (нет public_network, нет forwarded_port), и хотя у меня есть некоторые порты, перенаправленные через PuTTY, у меня нет портов 80 и 987. Так возможно, попробуйте использовать локальный или общедоступный IP-адрес хост-компьютера.и если вы хотите получить доступ (ssh) к одному гостевому экземпляру бродяги из другого, вы можете включить
public_network
а также переадресация из порта 22 вVagrantfile
такой:config.vm.network "public_network" config.vm.network "forwarded_port", guest: 22, host: 2200
затем, пока этот порт открыт (т. е. сделайте еще несколько переадресаций портов в конфигурации маршрутизатора), вы можете получить доступ к этой машине из любого места, даже из внешнего мира.