Доступ к домашнему серверу через динамический IP с использованием SSH туннелирования

Введение

Иногда может возникнуть необходимость доступить свой домашний компьютер снаружи. Однако, большинство интернет-провайдеров предоставляют динамический IP-адрес, что осложняет задачу постоянного доступа к домашней сети. В этой статье мы рассмотрим, как использовать виртуальный сервер (VPS) и SSH туннелирование для создания стабильного доступа к вашему домашнему компьютеру через удобное доменное имя.

План действий

  1. Зарегистрировать доменное имя.
  2. Приобрести VPS с минимальными требованиями.
  3. Настроить подключение по SSH по сертификату без ввода пароля.
  4. Использование утилиты autossh для автоматического подключения к VPS.
  5. Настройка службы для автоматического запуска подключения.

Шаг 1: Зарегистрировать доменное имя

Зарегистрируйте нужное вам доменное имя через любой удобный регистратор доменных имен. Убедитесь, что ваша доменная зона настроена корректно и привязана к IP-адресу вашего VPS.

Шаг 2: Приобрести VPS

Приобретите VPS у любого удобного вам провайдера облачных сервисов. Убедитесь, что ваш VPS имеет статический IP-адрес и доступен по SSH.

Шаг 3: Настроить подключение по SSH по сертификату без ввода пароля

Генерация ключей SSH на домашнем компьютере

  1. Сгенерируйте пару ключей SSH (public/private) на вашем домашнем компьютере, если они еще не созданы:
   ssh-keygen -t rsa -b 4096 -C "your_email@example.com"

При этом убедитесь, что вы установили пустой пароль для приватного ключа.

  1. Загрузите публичный ключ на VPS:
   ssh-copy-id username@vps_ip_address

Настройка подключения по SSH с использованием приватного ключа

  1. Убедитесь, что вашему домашнему компьютеру можно подключаться к VPS без ввода пароля:
   ssh -i ~/.ssh/id_rsa username@vps_ip_address

Шаг 4: Использование утилиты autossh для автоматического подключения к VPS

Установка autossh

  1. На домашнем компьютере установите autossh:
   sudo apt update
   sudo apt install autossh

Настройка автоматического подключения с использованием autossh

  1. Создайте скрипт для запуска autossh. Например, создаем файл /usr/local/bin/start_autossh.sh:
   #!/bin/bash
   autossh -M 20000 -f -N -R 5000:localhost:80 username@vps_ip_address -i ~/.ssh/id_rsa
  1. Сделайте скрипт исполняемым:
   sudo chmod +x /usr/local/bin/start_autossh.sh

Шаг 5: Настройка службы для автоматического запуска подключения

Создание systemd сервиса

  1. Создайте файл конфигурации systemctl /etc/systemd/system/autossh.service:
   [Unit]
   Description=AutoSSH tunnel for VPS
   After=network.target

   [Service]
   User=username
   ExecStart=/usr/local/bin/start_autossh.sh
   Restart=always
   RestartSec=10s

   [Install]
   WantedBy=multi-user.target

Включение и запуск службы

  1. Перезагрузите конфигурацию systemctl:
   sudo systemctl daemon-reload
  1. Включите службу для автоматического запуска при загрузке:
   sudo systemctl enable autossh.service
  1. Запустите службу:
   sudo systemctl start autossh.service

Проверка работы службы

  1. Проверьте статус службы:
   sudo systemctl status autossh.service
  1. Убедитесь, что туннель работает правильно:
   ss -tuln | grep 5000

Остановка сервисов на VPS

  1. Перед запуском autossh можно остановить все процессы, которые слушают порт 5000 на VPS:
   ssh -i ~/.ssh/id_rsa username@vps_ip_address "killall -9 $(lsof -ti :5000)"

Объединение всех действий

  1. Модифицируйте скрипт start_autossh.sh, чтобы он включал остановку процессов на VPS:
   #!/bin/bash
   ssh -i ~/.ssh/id_rsa username@vps_ip_address "killall -9 $(lsof -ti :5000)"
   autossh -M 20000 -f -N -R 5000:localhost:80 username@vps_ip_address -i ~/.ssh/id_rsa

Теперь ваш домашний компьютер автоматически подключается к VPS с использованием SSH-туннеля, и служба перезапускается при необходимости. В случае отсутствия связи или сбоя туннеля autossh самопроизвольно восстанавливает соединение.

Запись опубликована в рубрике Linux, Программирование, Сетевое администрирвоание с метками , , , . Добавьте в закладки постоянную ссылку.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *