Как перенаправить “localhost” на другой локальный IP?

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

Это моя ситуация:

Два компьютера под одним маршрутизатором, 192.168.1.101 и 192.168.1.102

Вот что я хочу сделать: На 192.168.1.101, при доступе к порту 22 с localhost, перенаправлять трафик на 192.168.1.102 порт 22.

Другими словами, я хотел бы перенаправить весь трафик с localhost на другой локальный IP.

Есть ли какое-либо решение для того, что мне нужно?

Если вы используете Windows, можно воспользоваться командой:

netsh interface portproxy add v4tov4 listenaddress=192.168.1.101 listenport=21 connectaddress=192.168.1.102 connectport=21

Замените:

  • 21 на порт, который хотите перенаправить,
  • 192.168.1.101 на ваш IP,
  • 192.168.1.102 на целевой IP.

Не переопределяйте значение localhost. Это приведет к неожиданным проблемам.

Вместо этого, обратите внимание на опции -L и -R в ssh(1). Они облегчают перенаправление порта на локальной машине на IP адрес и порт удаленной машины. Кроме того, туннель защищен с помощью SSH.

Обратите внимание, что эти туннели не обязательно специфичны для трафика ssh/оболочки. Это может быть произвольный трафик.

Не уверен, что это разумное решение. Многие сервисы, предназначенные для работы на локальной машине, используют либо 127.0.0.1 (что не будет проблемой с вашим изменением), либо localhost (в этом случае ваше изменение вызовет проблемы) для подключения к другим сервисам на той же машине. И многие другие пакеты настроены таким образом.

Если цель состоит в том, чтобы иметь одно и то же имя для подключения вне зависимости от того, на какой машине вы находитесь, лучше использовать другое имя для этого. Вместо “localhost” можно, например, использовать “crosshost” – и следовать подсказкам, которые дал Индрек: Проверьте ваш файл hosts (на Linux/Unix и, вероятно, на Mac это /etc/hosts, на Windows это C:\Windows\System32\drivers\etc\hosts (без расширения — так что будьте осторожны, у Windows обычно уже есть другие файлы hosts.* в этом каталоге). Не комментируйте строку 127.0.0.1 localhost и не изменяйте её — оставьте как есть. Просто добавьте строку

192.168.1.101 crosshost

на машине 192.168.1.102, и аналогично с другим адресом на другой машине. Теперь вы можете, например, ssh crosshost чтобы подключиться к одной машине с другой, или скопировать файлы с помощью scp filename.ext crosshost:/path/to/put, или делать то, что вы собирались.

ssh -L 22:localhost:22 [email protected]

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

Чтобы перенаправить трафик с "localhost" на другой локальный IP-адрес в вашей сети, необходимо выполнить определенные шаги, которые зависят от операционной системы, которую вы используете (Windows, Linux, macOS). В рамках данной задачи предположим, что у вас имеется две машины под одним маршрутизатором с IP-адресами 192.168.1.101 и 192.168.1.102. Вы хотите настроить так, чтобы запросы на "localhost" по порту 22 с машины 192.168.1.101 перенаправлялись на 192.168.1.102 по тому же порту. Обсудим, как это можно реализовать с пояснениями с учетом разных систем.

Теория

Настройка перенаправления "localhost" требует понимания, что localhost, по сути, является псевдонимом IP-адреса 127.0.0.1, который всегда указывает на текущую машину. Изменение или перенаправление "localhost" в большинстве случаев может привести к неожиданным последствиям, так как многие приложения настраивают свою работу через этот адрес для взаимодействия внутри одного устройства.

Вместо изменения самого значения "localhost", предлагается использовать порт-прокси или SSH-туннелирование, чтобы достичь желаемой конфигурации без изменения системных настроек, которые могут повредить другим приложениям.

Пример и Применение

1. Использование netsh на Windows:

Для пользователей Windows возможно решение через использование netsh interface portproxy. Это позволяет направлять трафик с одного IP-адреса и порта на другой.

netsh interface portproxy add v4tov4 listenaddress=127.0.0.1 listenport=22 connectaddress=192.168.1.102 connectport=22

В этом случае listenaddress=127.0.0.1 указывает на localhost, слушая 22 порт, и переходит к 192.168.1.102 тоже на 22 порт.

Как это работает:

  • ListenAddress: IP-адрес машины, которая принимает соединение (в вашем случае это 127.0.0.1).
  • ListenPort: Порт, который вы хотите использовать для получения соединения (в вашем случае также 22).
  • ConnectAddress: IP-адрес назначения трафика.
  • ConnectPort: Конечный порт назначения.

Примечание: Это решение применимо только для IPv4. Для IPv6 вам понадобится использовать v6tov6.

2. Использование SSH-туннелирования:

SSH-туннелирование предоставляет безопасный способ перенаправления портов через SSH-соединения. Оно позволяет создать пренаправление порта, которое связывает локальную и удаленную машины через SSH.

Использование команды SSH:

ssh -L 22:127.0.0.1:22 [email protected]

Как это работает:

  • -L 22:127.0.0.1:22: Локальное перенаправление; все запросы на локальный порт 22 перенаправляются на 127.0.0.1:22 машины назначения через SSH-соединение.
  • [email protected]: Параметр пользователь@хост, где хост — IP-адрес (в вашем случае 192.168.1.102), а пользователь — это учетная запись пользователя на удаленной машине.

3. Настройка файла hosts:

Хотя прямое изменение маршрутизации "localhost" не рекомендовано, файл hosts может использоваться для установки комментариев и назначения псевдонимов для отдельных случаев использования.

На Windows: C:\Windows\System32\drivers\etc\hosts

На Linux/macOS: /etc/hosts

Пример записи:

192.168.1.101 crosshost

Эта запись позволит вам обращаться к 192.168.1.101 как crosshost. Это не будет смешивать записи localhost и может использоваться для установления идентификаторов или псевдонимов внутри вашей сети.

Заключение

Перенаправление "localhost" на другой локальный IP-адрес может усложнить работу системы и вызвать проблемы с приложениями, которые полагаются на эти настройки. Однако, с использованием инструментов вроде netsh и SSH-туннелирования, можно найти обходные пути для достижения ваших целей. При этом важно учитывать надежность и безопасность, не меняя критические системные настройки без крайней необходимости. Убедитесь, что любые изменения протестированы в безопасной среде перед их внедрением в рабочую инфраструктуру.

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

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