Вопрос или проблема
У меня есть 3 машины (A, B и сервер). Сервер доступен везде, машина A доступна только в локальной сети моего университета, а машина B всегда со мной и используется для доступа к двум другим машинам. Как я могу получить доступ к машине A, используя сервер в качестве промежуточного звена, поскольку я не могу напрямую получить доступ с A на B. Но я могу получить доступ к серверу с B.
Ниже представлена грубая схема:
Дело в том, что я не уверен в каком-либо способе, как подключиться по ssh к машине A с сервера, но обратное возможно (ssh с машины A на сервер), так что это не двунаправлено.
Если “Машина A” находится в той же подсети, что и “Сервер”, или ничего не блокирует трафик, вы можете использовать IPTables для переадресации трафика,
#Измените 5555 на любой желаемый свободный порт
#Включите IP-адресацию:
sudo sysctl -w net.ipv4.ip_forward=1
#Сделайте изменение постоянным:
echo "net.ipv4.ip_forward=1" | sudo tee -a /etc/sysctl.conf
sudo sysctl -p
#Создайте правило переадресации:
sudo iptables -t nat -A PREROUTING -p tcp --dport 5555 -j DNAT --to-destination IP машины A:22
#Создайте правило MASQUERADE:
sudo iptables -t nat -A POSTROUTING -p tcp -d IP машины A --dport 22 -j MASQUERADE
#Сделайте правило постоянным при перезагрузках:
sudo apt install iptables-persistent
Затем, чтобы получить доступ к “Машине A”, с “Машины B” подключитесь по ssh к порту 5555 на “Сервере”.
Если есть брандмауэр или другое устройство, блокирующее трафик от “Сервера” к “Машине A”
#Создайте обратный туннель с "Машины A" на "Сервер"
#Замените user на ваше имя пользователя и Server на IP
ssh -R 2222:localhost:22 user@Server
#Подключитесь к "Машине A" с "Машины B" через "Сервер"
ssh -J user@Server -p 2222 user@localhost
Ответ или решение
Чтобы установить соединение SSH с машины A через сервер (что является промежуточным узлом) и получить доступ к машине A с машины B, вам необходимо использовать возможность обратного туннелирования SSH. Данная методика может быть особенно полезна в ситуациях, когда одна из машин (в данном случае машина A) недоступна напрямую из-за ограничений сети. В данной статье мы подробно рассмотрим, как выполнить данную задачу.
Шаг 1: Подготовка машины A
Сначала необходимо обеспечить возможность обратного туннелирования с машины A на сервер. Выполните следующие действия:
-
Подключитесь к машине A:
Используйте SSH-клиент для доступа к машине A из университетской сети. Например:ssh user@machineA
-
Создайте обратный туннель на сервер:
Находясь в машине A, выполните следующую команду, чтобы установить туннель к серверу:ssh -R 2222:localhost:22 user@server
Здесь
-R 2222:localhost:22
означает, что порт 2222 на сервере будет перенаправлен на порт 22 (SSH) машины A. Не забудьте заменитьuser
на ваше имя пользователя на сервере.
Шаг 2: Доступ к машине A с машины B
Теперь, когда обратный туннель настроен, вы можете получить доступ к машине A с машины B через сервер:
-
Подключитесь к серверу с машины B:
Используйте вашу учетную запись на сервере для SSH-доступа:ssh user@server
-
Соединение с машиной A через сервер:
Находясь на сервере, выполните следующую команду для подключения к машине A:ssh -p 2222 user@localhost
Здесь вы используете порт 2222, который настроен на сервере для перенаправления на машину A.
Варианты доступа
Если же вы не можете удерживать открытым соединение SSH с машины A на сервер (например, если соединение разрывается), вы можете использовать следующие подходы:
- Автоматизация с помощью скриптов: Вы можете добавить команду SSH в cron на машине A, чтобы автоматически устанавливать соединение с сервером через заданные интервалы времени.
- Использование
autossh
: Установите и используйтеautossh
для автоматического восстановления соединения SSH в случае его разрыва.
Заключение
Теперь вы знаете, как организовать доступ к машине A из машины B, используя промежуточный сервер. Этот метод может служить хорошим решением для работы в условиях ограниченного доступа, особенно в корпоративных и образовательных сетях. Правильная конфигурация туннелирования SSH не только упростит вашу работу, но и обеспечит безопасное подключение к необходимым ресурсам. Не забудьте учитывать политические и правовые аспекты, связанные с использованием SSH-туннелей в вашей сети.