Вопрос или проблема
Это моя ситуация:
Два компьютера под одним маршрутизатором, 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-туннелирования, можно найти обходные пути для достижения ваших целей. При этом важно учитывать надежность и безопасность, не меняя критические системные настройки без крайней необходимости. Убедитесь, что любые изменения протестированы в безопасной среде перед их внедрением в рабочую инфраструктуру.