Рейтинг:0

Настройка виртуальной машины Windows10 в Azure в качестве SSH-сервера для выполнения обратного туннелирования.

флаг cn

Цель: Открывайте веб-приложения, работающие на локальном компьютере, внешнему миру с помощью обратного туннелирования (сервис, подобный ngrok).

У меня есть виртуальная машина Windows 10 Pro, работающая в Azure. Я установил там сервер OpenSSH и протестировал его, используя переадресацию локальных портов и динамическую переадресацию портов (socks-прокси). Оба работают нормально.

Но у меня не работает обратное туннелирование.

Это команда, которую я использую на своей локальной машине:

ssh -R 5002: локальный: 5002 хх.хх.хх.ххх

Где, xx.xx.xx.xxx — общедоступный IP-адрес виртуальной машины Win10 в Azure. 5002 — это порт, на котором мое веб-приложение работает на моем локальном компьютере, и я также хочу сохранить тот же порт для виртуальной машины Azure.

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

я@VMW10Pro C:\Пользователи\я>

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

https://xx.xx.xx.xxx:5002/myapp

Я также пробовал, но безуспешно:

http://xx.xx.xx.xxx:5002/myapp

Вот как я настроил правила входящего порта для виртуальной машины Azure: введите описание изображения здесь

А вот как выглядят правила исходящего порта. Я даже временно разрешил все порты. введите описание изображения здесь

И это sshd_config файл на виртуальной машине Azure. Единственное изменение, которое я сделал, это настройка Порты шлюза к да:

# Это общесистемный файл конфигурации сервера sshd. Видеть
# sshd_config(5) для получения дополнительной информации.

# Стратегия, используемая для опций в sshd_config по умолчанию, поставляемой с
# OpenSSH должен указать параметры со значением по умолчанию, где
# возможно, но оставьте их комментариями. Незакомментированные параметры переопределяют
# значение по умолчанию.

#Порт 22
#AddressFamily любой
#ListenAddress 0.0.0.0
#ListenAddress ::

#HostKey __PROGRAMDATA__/ssh/ssh_host_rsa_key
#HostKey __PROGRAMDATA__/ssh/ssh_host_dsa_key
#HostKey __PROGRAMDATA__/ssh/ssh_host_ecdsa_key
#HostKey __PROGRAMDATA__/ssh/ssh_host_ed25519_key

# Шифры и ключи
#RekeyLimit по умолчанию нет

# Логирование
#SyslogFacility АУТЕНТИФИКАЦИЯ
#LogLevel ИНФОРМАЦИЯ

# Аутентификация:

#LoginGraceTime 2 м
#PermitRootLogin запретить пароль
#Строгиережимы да
#MaxAuthTries 6
#МаксСеансов 10

#PubkeyАутентификация да

# По умолчанию проверяются оба .ssh/authorized_keys и .ssh/authorized_keys2
# но это переопределено, поэтому при установке будут проверяться только .ssh/authorized_keys
Файл авторизованных ключей .ssh/authorized_keys

#AuthorizedPrincipalsFile нет

# Для этого вам также понадобятся ключи хоста в %programData%/ssh/ssh_known_hosts
#HostbasedAuthentication нет
# Измените на yes, если вы не доверяете ~/.ssh/known_hosts для
# Аутентификация на основе хоста
#IgnoreUserKnownHosts нет
# Не читать пользовательские файлы ~/.rhosts и ~/.shosts
#ИгнорироватьRhosts да

# Чтобы отключить туннелируемые пароли в открытом виде, измените здесь на no!
#Аутентификация по паролю да
#PermitEmptyPasswords нет

#AllowAgentForwarding да
#AllowTcpForwarding да
Порты шлюза да
#PermitTTY да
#PrintMotd да
#PrintLastLog да
#TCPKeepAlive да
#UseLogin нет
#PermitUserEnvironment нет
#ClientAliveInterval 0
#ClientAliveCountMax 3
#UseDNS нет
#PidFile /var/run/sshd.pid
#Макс.Запусков 10:30:100
#PermitTunnel нет
#ChrootDirectory нет
#VersionAddendum нет

# нет пути к баннеру по умолчанию
#Баннер нет

# переопределить значение по умолчанию отсутствия подсистем
Подсистема sftp sftp-server.exe

# Пример переопределения настроек для каждого пользователя
#Соответствие пользователю anoncvs
# AllowTcpForwarding нет
# РазрешитьTTY нет
# cvs-сервер ForceCommand

Администраторы Match Group
       AuthorizedKeysFile __PROGRAMDATA__/ssh/administrators_authorized_keys

sshd_config файл на моем локальном компьютере также выглядит так же, как и выше, с Порты шлюза установлен в да.

Обратите внимание: я не эксперт в области сетевых технологий. Существуют и другие учебные пособия и инструкции, которые помогут сделать то же самое с виртуальными машинами Linux. Но я просто хочу использовать существующую виртуальную машину Windows.

Любая помощь приветствуется.

John Hanley avatar
флаг cn
Вы включили IP-переадресацию как на сетевом интерфейсе (Azure), так и в ОС?
флаг cn
@JohnHanley Я включил переадресацию IP только на сетевом интерфейсе. Но не повезло.
John Hanley avatar
флаг cn
Вы должны включить оба
флаг cn
@JohnHanley Я только что включил в ОС, следуя этим инструкциям: https://www.wikihow.com/Enable-IP-Routing-on-Windows-10. Все равно не повезло.
John Hanley avatar
флаг cn
К сожалению, **не повезло** — это не отладочный термин, который я могу анализировать. Нужно четко указать, что не работает. Я понимаю, что это может быть трудно, но мы не можем сделать это за вас. Поскольку вы работаете в Windows, запустите Wireshark.
флаг cn
Спасибо @JohnHanley за вашу помощь. Я понял это.
Рейтинг:0
флаг cn

Я придумал решение. Это было двояко:

  1. я использовал ssh -R '*:5002:localhost:5002' хх.хх.хх.ххх вместо ssh -R 5002: локальный: 5002 хх.хх.хх.ххх. Звездочка делает sshd слушать порт 5002 на всех интерфейсах. В противном случае он просто прослушивал бы петлевой интерфейс.
  2. Мне также пришлось разрешить порт 5002 в брандмауэре Защитника Windows виртуальной машины Azure Win10.

И это заставило его работать. Теперь я могу получить доступ к своему веб-приложению, работающему локально на порту 5002, через Интернет, используя общедоступный IP-адрес виртуальной машины Azure: https://xx.xx.xx.xxx:5002/myapp

Примечание. Я включил IP-переадресацию как на сетевом интерфейсе (Azure), так и в ОС виртуальной машины, следуя предложению Джона Хэнли в комментариях выше. Но после применения двух шагов, упомянутых выше, я отключил IP-переадресацию, чтобы посмотреть, работает ли она, и она работала.

John Hanley avatar
флаг cn
Для туннелирования вам нужно включить IP-переадресацию только в том случае, если пакеты будут покидать виртуальную машину и попадать в сеть. Ваш вопрос не был достаточно ясен в отношении того, к чему вы выполняете обратное туннелирование. Из вашего ответа я понимаю вашу цель.

Ответить или комментировать

Большинство людей не понимают, что склонность к познанию нового открывает путь к обучению и улучшает межличностные связи. В исследованиях Элисон, например, хотя люди могли точно вспомнить, сколько вопросов было задано в их разговорах, они не чувствовали интуитивно связи между вопросами и симпатиями. В четырех исследованиях, в которых участники сами участвовали в разговорах или читали стенограммы чужих разговоров, люди, как правило, не осознавали, что задаваемый вопрос повлияет — или повлиял — на уровень дружбы между собеседниками.