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

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

Параметр

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

111 голосов | спросил Dan Fabulich 27 AMpSat, 27 Apr 2013 00:20:46 +040020Saturday 2013, 00:20:46

5 ответов


0

Когда вы запускаете vagrant ssh, он фактически использует эту базовую команду:

ssh -p 2222 -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no -o LogLevel=ERROR -o IdentitiesOnly=yes -i ~/.vagrant.d/insecure_private_key [email protected]

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 [email protected]

Как правильно комментирует Eero, вы также можете использовать команду vagrant ssh -- -R 12345:localhost:80, которая имеет тот же эффект, что и гораздо более краткая команда.

ответил wlritchi 7 Maypm13 2013, 17:47:21
0

В книге Vagrant: Up and Running (дата публикации: 12 июня 2013 г.), написанной создателем Vagrant, он упомянул, что гостевой машине невозможно получить доступ к службам, запущенным на хост-машине.

Вместо использования Forwarded Ports вы можете настроить частную сеть, используя Host-Only Networks.

  • Преимущества использования Host-Only Networks над Forwarded Ports

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

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

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

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

    3. Безопасный

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

    4. Меньше работы

      Не нужно настраивать каждый Forwarded Port


  • Как настроить Host-Only Networks

    config.vm.network :"hostonly", "192.168.0.0" # Vagrant Version # 1

    config.vm.network :private_network, ip: "192.168.0.0" # Vagrant Version # 2

    Наличие этой строки в вашем Vagrantfile даст команду vagrant создать частную сеть со статическим IP-адресом: 192.168.0.0

    IP-адрес хоста всегда совпадает с IP-адресом, но с последним октетом, равным 1. В предыдущем примере хост-компьютер имел бы IP-адрес 192.168.0.1.

ответил Mingyu 9 J0000006Europe/Moscow 2013, 21:43:56
0

Вы можете получить доступ к портам на хост-машине через шлюз по умолчанию в гостевой ОС. (Как правило, 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?

ответил Ajedi32 21 J000000Tuesday15 2015, 23:38:41
0

Добавьте следующее к вашему ~/.ssh/config на хост-компьютере:

Host 127.0.0.1
RemoteForward 52698 127.0.0.1:52698

Он позволяет вам получить доступ к службе на порту 52698 хост-машины из Vagrant, если вы вошли в систему через vagrant ssh.

Вы можете подтвердить, что он работает, запустив netstat -lt на бродячей ВМ и сделав заметку в следующих строках:

tcp      0    0 localhost:52698         *:*                 LISTEN
tcp6     0    0 ip6-localhost:52698     [::]:*              LISTEN
ответил stacker-baka 27 Jam1000000amTue, 27 Jan 2015 03:25:26 +030015 2015, 03:25:26
0

Я могу получить доступ к службам, запущенным на моем хост-компьютере, по его локальному IP-адресу (а не по адресу обратной связи). Я проверил, создав http-сервер на порту 80 (а затем на порту 987) и curl в 197.45.0.10:80 и 197.45.0.10 : 987 (действительный IP-адрес изменен для защиты невинных). Это сработало оба раза, и у меня нет какой-либо специальной конфигурации vagrant (нет public_network, нет forwarded_port), и хотя у меня действительно есть некоторые порты, перенаправленные через PuTTY, у меня нет портов 80 и 987, пересылаемых. Поэтому, возможно, попробуйте использовать локальный или общедоступный IP-адрес компьютера.

И если вы хотите получить доступ (ssh в) к одному гостевому экземпляру vagrant из другого, вы можете включить public_network, а также переадресацию из порт 22 в Vagrantfile вот так:

config.vm.network "public_network"
config.vm.network "forwarded_port", guest: 22, host: 2200

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

ответил B T 10 thEurope/Moscowp30Europe/Moscow09bEurope/MoscowWed, 10 Sep 2014 03:17:25 +0400 2014, 03:17:25

Похожие вопросы

Популярные теги

security × 330linux × 316macos × 2827 × 268performance × 244command-line × 241sql-server × 235joomla-3.x × 222java × 189c++ × 186windows × 180cisco × 168bash × 158c# × 142gmail × 139arduino-uno × 139javascript × 134ssh × 133seo × 132mysql × 132