1

У меня есть гостевая машина KVM в виртуальной сети. У него есть IP-адрес, например 192.168.122.65 . Хост-машина подключена к общедоступному интернету. Если я открою терминал на хост-машине, я могу подключиться к гостю по SSH, введя ssh user@192.168.122.65 , так что я знаю, что он работает нормально.

Теперь я хотел бы подключиться к гостю с любого компьютера через Интернет. Как я могу настроить хост-машину, чтобы сделать это возможным? Я перепробовал много правил с iptables но пока ни одно из них не помогло.

Обновление: пока что это решение, кажется, работает, но я не пытался перезапустить сервер: https://serverfault.com/a/170641/264678

2 ответа2

1

Если на хост-машине также запущено программное обеспечение сервера SSH и он доступен из Интернета, вы можете использовать команду ssh -L 22065:127.0.0.1:22 user@192.168.122.65 . Опция -L используется следующим образом:

 -L [bind_address:]port:host:hostport
             Specifies that the given port on the local (client) host is to be
             forwarded to the given host and port on the remote side.  This
             works by allocating a socket to listen to port on the local side,
             optionally bound to the specified bind_address.  Whenever a con‐
             nection is made to this port, the connection is forwarded over
             the secure channel, and a connection is made to host port
             hostport from the remote machine.  Port forwardings can also be
             specified in the configuration file.  IPv6 addresses can be spec‐
             ified by enclosing the address in square brackets.  Only the
             superuser can forward privileged ports.  By default, the local
             port is bound in accordance with the GatewayPorts setting.  How‐
             ever, an explicit bind_address may be used to bind the connection
             to a specific address.  The bind_address of “localhost” indicates
             that the listening port be bound for local use only, while an
             empty address or ‘*’ indicates that the port should be available
             from all interfaces.

Допустим, IP-адрес хоста - 10.0.0.5. Из системы в Интернете вы можете установить соединение с портом 22065 на хосте с помощью команды ssh -p 22065 user@10.0.0.5 . Примечание: вам нужно предоставить действительный идентификатор пользователя и пароль для гостевой системы, даже если вы используете публичный IP-адрес хоста (я использую адрес из диапазона частных IP-адресов 10.xxx только для целей примера), так как соединение будет фактически туннелировано к гостю.

Когда соединение с портом 22065 на хосте установлено, оно пересылается через туннель SSH, установленный вашим первым SSH-соединением от хоста к гостевой системе в 192.168.122.65. Что касается клиента SSH в Интернете, он направляется непосредственно к гостевой системе через порт 22065, хотя на самом деле он подключается к порту 22 этой системы через туннель SSH с хоста 10.0.0.5. Примечание: чтобы это работало, соединение SSH от хоста к гостевой системе должно быть установлено в данный момент.

Там, где я разместил 127.0.0.1 вы могли бы также поместить 192.168.122.65 , но, поскольку соединение осуществляется с адресом localhost , т. Е. С самим гостем, а не с какой-либо внешней системой, я бы использовал 127.0.0.1

Для необходимых правил брандмауэра необходимо иметь правило на хосте и любых брандмауэрах между ним и Интернетом, которые разрешают входящие TCP-подключения к порту 22065 или любому другому выбранному вами порту. Вам не понадобятся дополнительные правила брандмауэра в гостевой системе.

0

Во-первых, может быть, не SSH в ВМ?
Вместо этого установите tmux на свой KVM-хост и подключитесь к нему, где вы можете открыть столько сеансов ssh, сколько захотите.

Скажи мне, если это звучит ближе к твоему желанию, и я уточню.

Быстро и грязно:

  • Настройте обратный туннель с помощью ssh -R , запустите его на хосте KVM, настройте шлюз (маршрутизатор с выходом в Интернет) для переадресации или DMZ :22 на хост KVM на порту, который вы настроили в обратном туннеле.

Постоянный и самодостаточный:

  • Соедините две сети с виртуальным сетевым устройством, например, tun , настройте шлюз аналогичным образом.

Легко:

  • Есть SaaS сервисы, которые делают это для вас. У многих есть бесплатные уровни, которые могут удовлетворить ваш вариант использования.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .