SSH-соединение между двумя компьютерами за NAT через третий компьютер с публичным IP-адресом

SSH-соединение между двумя компьютерами за NAT через третий компьютер с публичным IP-адресом

У меня дома есть компьютер (домашний сервер), на котором работают irssi, rtorrent и т. д. Мой интернет-провайдер блокирует весь трафик извне (тупость, я знаю, но это единственный интернет-провайдер, который у меня может быть).

Я хочу иметь возможность войти в системудомашний сервероболочка из любогоудаленный компьютер(позади NAT).

У меня где-то есть учетная запись shell (без прав root), возможно, она мне пригодится.

Вот схема, описывающая ситуацию: введите описание изображения здесь

Возможно ли получить доступ к оболочке на моемдомашний сервер? Я что-то слышал о SSH-туннелировании, но не смог найти ни одного руководства, соответствующего этому случаю.

решение1

на домашнем сервере (туннель от третьей стороны к домашнему):
ssh -R 20000:127.0.0.1:22 thirdparty.org

Это подключит ваш домашний компьютер к сторонней оболочке, а затем начнет перенаправлять все соединения с порта 20000 на сторонней оболочке на порт 22 на вашем домашнем компьютере (порт SSH).

На удаленном компьютере (туннель от удаленного компьютера к третьему лицу):
ssh -L 20000:127.0.0.1:20000 thirdparty.org

Это подключит ваш удаленный компьютер к сторонней оболочке, а затем начнет переадресацию порта 20000 на удаленном компьютере на порт 20000 на сторонней оболочке.

а затем на удаленном компьютере (подключение через туннели):
ssh 127.0.0.1:20000и введите учетные данные для вашего домашнего сервера

Это попытается подключиться по ssh к порту 20000 на удаленном компьютере. Поскольку мы настроили туннель к третьей стороне, команда #2 фактически перенаправляет эту попытку подключения на 127.0.0.1:20000 на сторонней оболочке. Затем первая команда снова перенаправляет подключение на порт 22 на вашем домашнем компьютере, и в этот момент сервер ssh подхватывает подключение.

решение2

Я попытался лучше объяснить принятое решение ниже. Предположим, что "машина A" и "машина B" обе находятся за брандмауэром NAT. При этом обе имеют доступ по ssh к удаленной "машине R" (скажем, VPS).

Р -> А

ssh -R 20000:127.0.0.1:22 user@RemoteHost
  1. Вышеуказанная команда выполнена на машинеА.

  2. Создать туннель изр(порт 20000 R) кА(порт 22 А) (обратное туннелирование)

Б -> Р

ssh -L 8000:127.0.0.1:20000 user@RemoteHost
  1. Вышеуказанная команда выполненаБ.

  2. Создает туннель изБ(порт 8000 B) кр(порт 20000 R)

Б -> А

ssh 127.0.0.1 -p 8000

фактическое соединение происходит, хотяр, то естьБ(порт 8000)-> р(порт 20000)-> А(порт 22)


То же самое с использованием PuTTY и Windows:

Р -> А

putty.exe -R 20000:127.0.0.1:22 -ssh RemoteHost -P port -l user -pw password

Б -> Р

putty.exe -L 8000:127.0.0.1:20000  -ssh RemoteHost -P port -l user -pw password

Б -> А

putty.exe -ssh 127.0.0.1 -P 8000 -l user -pw password

решение3

Или вы можете настроить несколько туннелей IPv6 с HE.net и просто подключиться напрямую... (Многие решения VPN также будут работать.)

решение4

Бесплатно, но может кому-то помочь... добавление фотографии в дополнение к вышесказанному.

введите описание изображения здесь

Связанный контент