LINUX.ORG.RU
ФорумAdmin

Настроить ssh-туннель для доступа за NAT.

 ,


0

1

В интернете полно инструкций, но я откровенно в них уже запутался, поэтому пишу сюда.

Задача: нужно обеспечить доступ по ssh к компьютеру за NAT.

Что есть:

  • Домашний интернет с белым динамическим ip и настроенным ddns. Назовем домен my.ddns.net.
  • Домашний сервер, к которому можно подключиться командой ssh user@my.ddns.net
  • Ноутбук за NAT, к которому как раз и нужен удалённый доступ.

Если правильно понимаю, на ноутбуке должен работать демон, который слушает сервер my.ddns.net, а на самом сервере другой демон перенаправляет подключение к ноутбуку.

Как это дело настроить?

Домашний интернет с белым динамическим ip

Вот тут мой мозг сразу сломался и дальше я понимать перестал.

Твой ноут в твоей домашней сети. Если у тебя есть возможность попасть в эту домашнюю сеть извне (через NAT провайдера и, возможно, твой внутренний NAT на домашнем роутере), то ты можешь использовать port redirection.

У меня не через ddns, но git по ssh наружу именно так и торчит. // Ну точнее далеко совсем не так, у меня схема сложнее, но я не стану пудрить тебе мозги.

Пробросить порт ты можешь много чем, хоть тем же ssh, хоть nginx, хоть даже файерволлом.

mord0d ★★★★★
()
Ответ на: комментарий от mord0d

Вот тут мой мозг сразу сломался и дальше я понимать перестал.

Наверное, тут неправильно выразился, извиняюсь. Я могу извне могу попасть в свою домашнюю сеть, я это имел ввиду.

Твой ноут в твоей домашней сети.

Нет, в этом-то как раз и проблема, он где-то «там». Например, у друга, у которого нельзя сделать port redirection, потому что извне нельзя достучаться до домашней сети.

Jullyfish
() автор топика

На сервере создай ssh-аккаунт для ноутбука. И в sshd_config поменяй GatewayPorts на yes.

На ноутбуке введи

ssh -R 12345:127.0.0.1:22 user@my.ddns.net
и залогинься. После этого входящие подключения на порт 12345 сервера будут оказываться подключениями к 22 порту ноутбука.

firkax ★★★★★
()
Последнее исправление: firkax (всего исправлений: 2)
Ответ на: комментарий от Jullyfish

Нет, в этом-то как раз и проблема, он где-то «там». Например, у друга, у которого нельзя сделать port redirection, потому что извне нельзя достучаться до домашней сети.

Тогда тебе придётся организовывать VPN для соединения своей сети и сети друга. Можешь взять какой-нибудь WireGuard, поднять у себя "сервер", доступный по ddns, и дать креды другу, чтобы он подключался как клиент. Если объединить сети (bidirectional NAT), то это будет так же прозрачно, как если бы твой друг был в твоей домашней сети.

mord0d ★★★★★
()
Ответ на: комментарий от firkax

Огромное спасибо, получилось! Пришлось на роутере ещё одну переадресацию порта на 12345 добавить.

Теперь два вопроса:

  1. Как сделать чтобы ssh -R ... на ноутбуке при включении запускался (Slackware 15.0)?
  2. На что обратить внимание в плане безопасности? К ноутбуку без проблем подключился с помощью ключей (аутентификация по паролю отключена), я даже удивился. ssh -R ... по паролю.
Jullyfish
() автор топика
Ответ на: комментарий от Jullyfish

Как сделать чтобы ssh -R ... на ноутбуке при включении запускался (Slackware 15.0)?

И перезапускался когда соединение падает еще. И хорошо бы проверять состояние как-то. И надеяться что второго ноутбука не появится. В общем проще vpn-сервер поднять на «сервере» если вы хотите чтоб этот коннект был постоянным. Этот проброс порта обычно используется для какой-то разовой активности.

micronekodesu ★★★
()
Ответ на: комментарий от Jullyfish

Как сделать чтобы ssh -R ... на ноутбуке при включении запускался (Slackware 15.0)?

Создать systemd-юнит инит-скрипт. Но это тоже не особо надёжно будет — после перезапуска sshd нужно будет перезапускать и его (он будет запущен, но иногда может ничего при этом не делать).

На что обратить внимание в плане безопасности?

На всё. (=
В безопасности нет неважных мелочей. (=

mord0d ★★★★★
()
Ответ на: комментарий от micronekodesu

И перезапускался когда соединение падает еще. И хорошо бы проверять состояние как-то.

Тут имхо достаточно прописать в крон скрипт типа

if ! ping -I $IF_TUNNEL -c 1 $IP_SRV>/dev/null 2>&1; then 
# Здесь рестарт туннеля
fi 
Причем именно рестарт, причин почему процесс ssh не робит может быть больше одной, поэтому на всякий случай пытаемся его кильнуть.

anc ★★★★★
()
Ответ на: комментарий от anc

в крон скрипт

Впервые пригляделся к cron. Выглядит прикольно. А есть возможность им запустить ssh -R ... без авторизации пользователя? Допустим, если ноутбук перезагрузили.

Jullyfish
() автор топика
Ответ на: комментарий от Jullyfish

А есть возможность им запустить ssh -R ... без авторизации пользователя?

Крон выполняет задачи по расписанию, а не по воздействию внешних факторов типа логин пользователя, что в расписании задали, так оно и будет запускаться.

anc ★★★★★
()
Ответ на: комментарий от firkax

Почему бы не воспользоваться ssh -D к серверу и быть как дома?

Или локальный порт использовать? ssh -L 11122:адрес-ноута-в-локалке:22 user@my.ddns.net. Затем подключаешься к 127.0.0.1:11122 вторым ssh

NyXzOr ★★★★
()
Последнее исправление: NyXzOr (всего исправлений: 1)