Бродячий обратный порт переадресации?


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

бродяги config.vm.forwarded_port параметр откроет порт на хосте и отправит данные гостю. Но как я могу открыть порт на гостевой и отправить данные на хост? (Это все еще переадресация портов, но в обратном направлении.)

5 106

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 over Forwarded Ports

    1. гостевые машины могут получить доступ к службам, запущенным на хосте

      этот функция решит вашу проблему.

    2. гостевые машины могут получить доступ к службам, запущенным на другой гостевой машине

      эта функция очень полезна для разделения служб на несколько машин, чтобы более точно имитировать производственную среду.

    3. безопасное

      внешние машины не имеют доступа к службам, запущенным на гостевых машинах

    4. меньше работа

      нет необходимости настраивать каждый 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) и curling 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

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