Использование SSH для перенаправления локальных портов во внешний мир.

Вопрос или проблема

Я прочитал другие проблемы/ответы, которые кажутся похожими на это, но не вижу совпадений.

У меня есть VNC сервер, запущенный на системе Unix. Он слушает на 127.0.0.1.

Мне нужно иметь возможность подключаться к VNC серверу с внешней системы, чей IP не фиксирован. Я хочу осуществлять подключение через SSH и не хочу, чтобы VNC сервер был виден открыто (поэтому он привязан к 127.0.0.1).

Я использую Windows 11 и Putty в качестве моего VNC клиента. VNC сервер находится на Unix системе.

Если я запускаю VNC сервер, не привязывая его к 127.0.0.1 (он привязывается к внешнему нормальному IP адресу), и указываю туннель в моей сессии Putty, то подключение проходит нормально.

Когда я привязываюсь к интерфейсу 127.0.0.1 и пытаюсь подключиться, используя порт 5901, я получаю сообщение о следующем:

Соединение было разорвано сервером до того, как сессия могла быть установлена.

Мой вопрос в том, как использовать SSH для пересылки соединения с host:5901 на localhost:5901 на стороне сервера?

ИЛИ можно ли настроить sshd на сервере для ‘моста’ между незашифрованным localhost:5901 и зашифрованным host:5901?

Я не использую ‘-localhost’ на VNC сервере. Я использую ‘-interface 127.0.0.1’.

Спасибо!

Я разделю ответ на три части:

Изменения динамического IP – Рассмотрите возможность использования динамического DNS (DDNS) Вы можете зарегистрироваться на бесплатный DDNS у любого провайдера по вашему выбору. Например, www.noip.com предоставляет 3 DDNS записи бесплатно. На вашем сервере Linux вы должны установить агент, который будет автоматически обновлять вашу DNS запись при каждом изменении IP. Таким образом, вам не придется слишком беспокоиться об изменениях IP и просто подключаться к вашему серверу, используя DNS имя.

Пересылка портов через SSH Сначала создайте SSH туннель между Windows клиентом и сервером Linux. Windows 10 или Windows 11 поставляются с предустановленным клиентом OpenSSH. Откройте командную строку или Power-shell и выполните следующую команду

ssh -fnN -L 5901:127.0.0.1:5901 user@server_fqdn_name

-N Не выполнять удаленную команду. Это полезно только для пересылки портов (только для протокола версии 2)

-n Перенаправляет stdin от /dev/null (фактически, предотвращает чтение из stdin). Это должно использоваться, когда SSH выполняется в фоновом режиме. Обычный трюк – использовать это для запуска X11 программ (например, VNC) на удаленной машине. Программа SSH будет помещена в фоновый режим. (Это не работает, если SSH нужно спросить пароль или парольную фразу; см. также флаг -f). Чтобы избежать проблемы с запросом пароля, используйте SSH без пароля (также известный как аутентификация через открытый ключ SSH)

-f Запрашивает SSH перейти в фоновый режим непосредственно перед выполнением команды. Это полезно, если SSH собирается запрашивать пароли или парольные фразы, но пользователь хочет, чтобы он работал в фоновом режиме. Это предполагает -n. Рекомендуемый способ запуска программ X11 на удаленном сайте – с чем-то вроде ssh -f host xterm.

-L [адрес_связки:]порт:хост:порт_хоста – Указывает, что данный порт на локальной (клиентской) стороне должен быть переслан на указанный хост и порт на удаленной стороне.

Подключение к VNC серверу

С Windows теперь вы можете подключаться к VNC серверу через 127.0.0.1 и порт 5901

Ссылки:

Примечание: Я советую продолжать использовать 127.0.0.1 и избегать использования localhost. По умолчанию, когда вы пингуете localhost на Windows машине, ответ приходит с IP адресом ::1 вместо 127.0.0.1. По умолчанию, предпочтение отдается IPv6 над IPv4, и это может нарушить ваш SSH туннель.

Ответ или решение

Уважаемый пользователь,

Для решения вашей задачи по обеспечению безопасного доступа к VNC-серверу на Unix-системе, работающему через SSH-туннелирование, важно учитывать несколько ключевых аспектов: динамические IP-адреса, настройку SSH-туннелирования и настройку вашего VNC-клиента на Windows. Позвольте разобрать каждый из этих элементов более подробно, следуя методу TEA (теория, пример, применение).

Теория

Технология порт-форвардинга SSH позволяет направлять трафик от локального ПК через защищенное SSH-соединение на удаленную машину, что обеспечивает безопасность соединения и возможность обхода ограничений сети. Это особенно полезно в случаях, когда сетевые службы, такие как VNC, не предназначены для прямого выхода в интернет из соображений безопасности.

Ваша ситуация осложняет следующий фактор: вы не можете установить фиксированное IP-соединение из-за изменения IP-адреса. Однако это можно решить посредством динамического DNS (DDNS), что позволяет устройству сохранять связь с сетевой службой под одним и тем же доменным именем, даже при изменении его IP-адреса.

Пример

Рассмотрим на примере, как можно реализовать SSH-туннелирование:

  1. Динамический DNS (DDNS): Сначала зарегистрируйтесь на платформе, предоставляющей DDNS, такой как noip.com. Здесь вы можете получить бесплатные DNS-записи, которые помогут следить за изменениями вашего IP. На вашей Unix-системе установить агент, который будет автоматически обновлять DNS-запись.

  2. SSH Туннелирование: На Windows 10 или 11 используйте встроенного SSH-клиента. Для создания SSH-туннеля введите следующую команду в командной строке или PowerShell:

    ssh -fnN -L 5901:127.0.0.1:5901 пользователь@доменное_имя_сервера
    • -N используется для указания, что вы не хотите выполнять удаленные команды, а просто пользоваться портами.
    • -n перенаправляет стандартный ввод эвичного устройства null, что позволяет SSH работать в фоновом режиме.
    • -f отправляет процесс SSH в фон.
    • -L указывает на локальный (клиентский) порт, который будет перенаправлен на заданный порт и адрес на удаленной стороне.
  3. Подключение к VNC Серверу: После установки туннеля на вашей Windows-машине, откройте VNC-клиент (например, PuTTY или любое VNC-приложение), и подключитесь через 127.0.0.1:5901.

Применение

Перенеся вышеизложенное в практическую плоскость, вы обеспечите себе безопасный и надежный доступ к VNC-серверу с использованием SSH-туннелирования. Это позволит скрыть VNC-сервер от лишних глаз, минимизируя риски безопасности. Не забудьте также настроить VNC-сервер, чтобы он слушал только на локальном интерфейсе (127.0.0.1), что защитит ваш сервер от постороннего доступа.

Дополнительные шаги

Кроме того, для автоматизации и упрощения процесса настройки соединения на клиентской стороне, рекомендуется настроить SSH авторизацию без пароля через SSH-ключи, что исключает необходимость ввода пароля при каждом подключении. Также обратите внимание на важность использования именно 127.0.0.1 вместо localhost на вашей Windows системе, чтобы избежать конфликта с IPv6, который может быть по умолчанию приоритетным.

Надеемся, что наши рекомендации помогут вам в успешной настройке безопасной работы с VNC-сервером. Если у вас возникнут дополнительные вопросы, не стесняйтесь обращаться за помощью.

С уважением,

[Ваше Имя],
[Ваш Должность или Название компании]

Оцените материал
Добавить комментарий

Капча загружается...