Я пытаюсь получить удаленный доступ к своей машине через SSH, используя мой публичный IP-адрес.
Обычный способ сделать это — разрешить переадресацию портов на моем маршрутизаторе, а затем сделать: ssh ubuntu@myPublicIp
но мой провайдер использует CGNAT, поэтому я не могу переадресовывать порты с моим назначенным публичным IP. Поэтому я использовал tinyproxy на моем экземпляре AWS и подключил свою локальную машину к IP-адресу прокси.
Это означает, что каждый запрос, который я делаю через свою локальную машину, проходит через прокси-IP. Теперь мой публичный IP заменен на прокси-IP. Мой вопрос в том, как мне настроить переадресацию портов на моей локальной машине Linux, на которой включен прокси, чтобы я мог подключиться к машине удаленно с помощью ssh, например: ssh ubuntu@myProxyIp
.
решение1
Чтобы связаться с машиной, находящейся за NAT/брандмауэром/чем-то еще, вам не нужно ничего, кроме возможности этой машины устанавливать исходящее соединение с публичной сетью и иметь доступ по SSH к экземпляру в публичной сети.
Настройка на машине за NAT должна гарантировать, что она создает исходящее SSH-соединение с включенной обратной переадресацией портов:
ssh -R:60000:127.0.0.1:22 [email protected]
где [email protected]
— учетная запись и адрес экземпляра в публичной сети, к которому у вас есть доступ. Эта команда, по сути, означает следующее: установить SSH-подключение с friendly.domain.tld
использованием пользователя joe
для аутентификации и раскрыть наш локальный порт TCP 22 на удаленном конце как порт TCP 60000. Если программное обеспечение сервера SSH достаточно новое (и конфигурация это позволяет), вы также можете напрямую сопоставить свой локальный перенаправленный порт с IP-адресом, выходящим в Интернет, на friendly.domain.tld
, но я предполагаю, что здесь такая конфигурация не допускается.
Теперь, когда наша машина установила исходящую ссылку, все, что нам нужно сделать, чтобы подключиться к ней из любой точки мира, это использовать friendly.domain.tld
в качестве прокси в нашем SSH-подключении. Для этого вам нужно будет открыть два окна терминала: первое будет использоваться для установки ссылки с экземпляром friendly.domain.tld
для переадресации открытого порта TCP 60000 на вашу локальную машину:
ssh -L60000:127.0.0.1:60000 [email protected]
Это сопоставляет TCP-порт 60000 на петлевом интерфейсе с friendly.domain.tld
петлевым интерфейсом экземпляра, на котором вы запускаете команду ssh.
С этого момента вы можете подключиться к своему компьютеру за NAT, просто используя:
ssh -p60000 my_account@localhost
где my_account
находится учетная запись на вашем компьютере за NAT.
Всего в игре задействовано три SSH-туннеля:
machine_behind_nat <=1=> friendly_instance <=2=> your_laptop
<=================3==================>
Причина такой настройки заключается в том, чтобы гарантировать, что даже если «friendly_instance» взломан, ваша связь с машиной за NAT не будет скомпрометирована (мы не доверяем «friendly_instance» за пределами того, что разрешаем ему передавать байты через его интерфейс обратной связи). Мы используем сквозное шифрование в нашем туннеле № 3, который проходит через туннели № 1 и № 2.
Я покрылэта установка в моем блогеесли вам нужна небольшая предыстория и другие трюки, которые можно сделать с помощью ssh.
решение2
В зависимости от того, что именно вам нужно перенаправить, вы можете сделать динамическую обратную переадресацию портов с помощью ssh.
Если вам нужно проксировать только порт 22:
ssh -R 22:0.0.0.0:2222 user@remote_server
Затем вы можете подключиться по ssh к локальной машине, выполнив:
ssh -p 2222 localuser@ProxyIP
Если вы хотите выполнить динамическую пересылку:
ssh -R 0.0.0.0:2222 user @remote_server
Вы можете получить доступ ко всему в вашей локальной сети с помощью цепочек прокси. Обратите внимание, что любой, кто знает ваш удаленный IP и порт для SOCKS-прокси, может получить доступ к вашей локальной сети. Вы можете захотеть реализовать брандмауэр, чтобы ограничить доступ к ней.
Вот хорошая статья, рассказывающая об этом:https://posts.specterops.io/offensive-security-guide-to-ssh-tunnels-and-proxies-b525cbd4d4c6