Если вам повезло, что ваш интернет-провайдер (ISP) предоставил вам выделенный IP-адрес, вы можете настроить домашний сервер и сделать его доступным для Интернета, добавив несколько правила переадресации портов к вашему маршрутизатору. Но если ваш интернет-провайдер заставляет вас делиться этим IP-адресом с соседями, то переадресация портов не поможет. Другие провайдеры просто блокируют входящие соединения с помощью правил брандмауэра.
Все эти ограничения вы можете обойти с помощью виртуального частного сервера. Все будет работать, даже если у него меньше 512 МБ ОЗУ, поскольку все, что ему нужно сделать, это перенаправить сетевой трафик. Это очень легко нагружает процессор и оперативную память. Сервер будет получать входящие соединения и перенаправлять их на ваш компьютер через так называемый «обратный SSH-туннель». Таким образом, вы можете настроить любой домашний сервер с очень небольшими ежемесячными затратами.
Читайте также: 9 лучших провайдеров динамических DNS, которые вы можете использовать бесплатно
Представьте, что вы создаете СледующийОблачный сервер для загрузки/синхронизации файлов. Вы получаете конфиденциальность хранения этих файлов на своем домашнем сервере, а затем можете купить жесткий диск емкостью 6 ТБ, чтобы получить все необходимое пространство. Вам нужно платить только ежемесячный счет за электроэнергию и менее 5 долларов в месяц за виртуальный частный сервер. Это намного дешевле, чем ежемесячный счет за сервер с 6 ТБ свободного места.
Примечание. Это работает только для перенаправления сетевого трафика TCP. TCP используется такими вещами, как веб-серверы (порт 80/tcp). UDP используется некоторыми (не всеми) игровыми серверами, например Counter Strike (порт 27015/UDP). Туннелирование UDP возможно, но с некоторыми «хаками», которые могут стать темой будущего руководства.
В Windows 10 теперь есть встроенный SSH-клиент
Больше нет необходимости использовать PuTTY для инициации SSH-соединений. Фактически, в этом руководстве вы будете использовать этот встроенный клиент для настройки туннеля. Прочтите учебник по клиенту OpenSSH для Windows 10 , если вы еще с ним не знакомы.
Подготовка виртуального частного сервера к туннельным соединениям
Создайте виртуальный частный сервер с вашим любимым провайдером, например ЦифровойОкеан , Linode, Vultr или любым другим, который вы предпочитаете. Самое главное — выбрать расположение сервера как можно ближе к вам, чтобы минимизировать задержку в сети. Попробуйте настроить сервер таким образом, чтобы вы могли входить в учетную запись root напрямую, желательно с помощью ключа SSH, поскольку это более безопасно. Это необходимо, если вы хотите, чтобы сервер прослушивал соединения, поступающие на порты ниже 1024, так называемые привилегированные порты.
Откройте командную строку (или терминал, если вы используете Linux) и войдите на сервер через SSH.
Изменить настройки сервера OpenSSH:
nano /etc/ssh/sshd_config
Если вы вошли в систему не как root, а как обычный пользователь, вам нужно будет использовать эту коман
Contents
В Windows 10 теперь есть встроенный SSH-клиент
sudo naПодготовка виртуального частного сервера к туннельным соединениям
><
Прокрутите вниз, пока не найдете переменную с именем «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
сообщает серверу перенаправить соединения, поступающие к нему через этот порт.host
сообщает серверу, на какой 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, изолируйте ее хотя бы на виртуальной машине. Таким образом, если ваш сайт будет скомпрометирован, по крайней мере остальная часть вашей операционной системы не пострадает.
И, знаете… всегда создавайте резервные копии того, что не хотите рисковать потерять!