Если вам повезло, что ваш интернет-провайдер (ISP) предоставил выделенный IP-адрес, вы можете настроить домашний сервер и сделать его доступным для Интернета, добавив на маршрутизатор несколько правил переадресации портов. Но если ваш интернет-провайдер заставляет вас делиться этим IP-адресом с соседями, переадресация портов не поможет. Другие провайдеры просто блокируют входящие соединения через правила брандмауэра.
Все эти ограничения пользователи могут преодолеть с помощью виртуальных частных серверов. Все будет работать с объемом оперативной памяти менее 512 МБ, поскольку все, что нужно, — это перенаправить сетевой трафик. Он не потребляет много оперативной памяти и процессора. Сервер будет принимать входящие соединения и перенаправлять их на компьютер через « обратный SSH-туннель ». Таким образом, вы можете настроить домашний сервер любого типа за очень небольшую ежемесячную плату.
Представьте, что вы создаете сервер NextCloud для загрузки или синхронизации файлов. Вы защитите конфиденциальность своих файлов, когда они находятся на вашем домашнем сервере, и при необходимости вы можете купить жесткий диск емкостью 6 ТБ, чтобы увеличить емкость хранилища. Ежемесячный счет за электроэнергию составляет менее 5 долларов США в месяц (115 000 донгов) для виртуального частного сервера. Дешевле, чем ежемесячный счет за сервер емкостью 6 ТБ.
Примечание . Этот метод используется только для перенаправления сетевого трафика TCP. TCP используется веб-сервером (порт 80/tcp). UDP используется некоторыми (но не всеми) игровыми серверами, например Counter Strike (порт 27015/UDP). UDP-туннелирование также возможно, но требует некоторых хитростей.
Позволяет внешнее подключение к ПК
В Windows 10 теперь есть встроенный SSH-клиент
Больше нет необходимости использовать PuTTY для инициации SSH-соединений. В этом уроке мы будем использовать встроенный SSH-клиент для настройки туннеля. Прочтите статью LuckyTemplates « Как установить OpenSSH в Windows 10» , чтобы узнать больше.
Подготовьте виртуальный частный сервер для туннельного подключения
Создайте виртуальный частный сервер с вашим любимым провайдером. Самое главное — выбрать расположение сервера как можно ближе, чтобы минимизировать задержку в сети. Попробуйте настроить сервер таким образом, чтобы вы могли войти непосредственно в учетную запись root, желательно с ключом SSH, так как это более безопасно. Это необходимо, если вы хотите, чтобы сервер «прослушивал» входящие соединения на портах ниже 1024, также известных как привилегированные порты.
Откройте командную строку (или терминал, если вы используете Linux) и войдите на сервер через SSH.
Измените настройки сервера OpenSSH:
nano /etc/ssh/sshd_config
Если вы вошли в систему не как root, а как обычный пользователь, вам нужно будет использовать эту команду, чтобы сохранить файл:
sudo nano /etc/ssh/sshd_config
Прокрутите вниз, пока не найдете переменную с именем GatewayPorts. Эта строка может выглядеть так:
#GatewayPorts no
Удалите # (чтобы превратить его из комментария в часть программы) и измените строку на:
GatewayPorts yes
Если вы не можете найти эту строку, просто прокрутите страницу вниз и добавьте ее самостоятельно:
GatewayPorts yes

Нажмите Ctrl + X , затем нажмите y и, наконец, Enter , чтобы сохранить файл.
Перезагрузите демон SSH, чтобы он принял новые настройки.
systemctl reload ssh.service
Выйдите из сеанса SSH.
exit
Как настроить обратный SSH-туннель
Параметры команды одинаковы в Linux, Windows и даже BSD. Общий синтаксис:
ssh -R remote_port:host:localport your_username@IP-of-server
- Remote_port сообщает серверу о необходимости перенаправить соединения к нему через этот порт.
- хост сообщает серверу IP-адрес, на который будет перенаправлено соединение. Здесь будет использоваться адрес 127.0.0.1 для перенаправления на собственный компьютер пользователя.
- localport указывает, на какой порт следует перенаправлять пакеты. Здесь пользователь должен задать номер порта, который «слушает» установленное на локальном компьютере приложение.
Например, чтобы перенаправить все соединения через порт 80 (на сервер) и отправить их на порт 8080 на локальном компьютере, команда будет такой:
ssh -R 80:127.0.0.1:8080 root@203.0.113.1
Предполагается, что у вас есть веб-сервер, такой как Apache или Nginx, локально прослушивающий порт 8080. Но если Apache/Nginx прослушивает порт 80 по умолчанию, то нет проблем с использованием одного и того же порта дважды в предыдущей команде (поскольку они относятся к порту 80 на другом сервере).
ssh -R 80:127.0.0.1:80 root@203.0.113.1
На этом этапе, если кто-то введет IP-адрес вашего виртуального частного сервера в адресную строку своего браузера, его соединение будет перенаправлено и обработано вашим локальным компьютером.

На изображении выше использован простой веб-сервер для Chrome, который по умолчанию прослушивает порт 8887. Пользователи могут попробовать эту настройку самостоятельно, установив приложение, а затем воспользовавшись командой, как показано на рисунке.
Стоит отметить, что для поддержания активности туннеля сеанс SSH должен оставаться активным. Чтобы закрыть туннель, введите Exit в окне терминала или командной строки.
Как видите, создать обратный SSH-туннель несложно, но безопасность веб-сайта — это другое. Итак, если вы решите реализовать такую идею, как локальный сервер NextCloud, изолируйте ее хотя бы на виртуальной машине. Таким образом, если веб-сайт будет взломан, по крайней мере остальная часть операционной системы не пострадает.
И еще одна важная вещь, которую следует помнить: всегда делайте резервную копию того, что вы не хотите рисковать потерять!
Надеюсь, вы добьетесь успеха.