Зачем нужен VNC?

Представьте: вы дома, на работе или в отпуске

Ваш Raspberry Pi стоит дома и что-то делает (качает файлы, управляет умным домом, записывает видео). Вдруг вам нужно что-то посмотреть или изменить. Через SSH вы видите только чёрный экран с текстом — неудобно для графических программ.

С VNC вы откроете программу на своём ноутбуке и увидите полноценный рабочий стол Raspberry Pi — будто сидите за ним. Мышкой кликаете, файлы открываете, программы запускаете.

Что получите после настройки:

Видите рабочий стол

Полноценный графический интерфейс Raspberry Pi у вас на экране. Работает как обычный компьютер — окна, иконки, меню.

Из любой точки мира

Дома, в офисе, в кафе, в другой стране — неважно. Если есть интернет, подключитесь к Raspberry Pi за пару кликов.

Безопасное соединение

Весь трафик зашифрован. Никто не может подсмотреть, что вы делаете, даже если подключены через публичный Wi-Fi.

Без проблем с роутером

Не нужно возиться с настройками роутера и открывать порты. Всё работает через безопасный туннель, который вы уже настроили.

Требуется настроенный SSH-туннель

Это руководство продолжает настройку SSH-туннеля к Raspberry Pi через EC2. Если вы ещё не настроили туннель, начните с того руководства — VNC будет работать через него.

Объяснение терминов простыми словами

Перед началом давайте разберёмся, что означают все эти непонятные слова. Не переживайте, если что-то забудете — к каждому термину мы вернёмся в процессе настройки.

VNC (Virtual Network Computing)

Представьте, что экран вашего Raspberry Pi «транслируется» к вам на ноутбук через интернет. Вы видите его рабочий стол и управляете мышкой и клавиатурой, как будто сидите перед ним.

Аналогия: Как экран смартфона на ноутбуке (скринкаст), только для компьютера.

VNC Viewer (VNC клиент)

Программа на вашем компьютере (Windows, Mac, Linux), которая показывает рабочий стол Raspberry Pi. Как браузер для веб-сайтов, только для удалённого рабочего стола.

VNC Server (VNC сервер)

Программа на Raspberry Pi, которая «делится» своим рабочим столом. Она уже установлена и работает на Raspberry Pi OS из коробки — ничего устанавливать не нужно!

Порт (Port)

Как номер квартиры в доме. IP-адрес — это адрес дома (например, улица Ленина, 5), а порт — конкретная квартира (например, квартира 101), где «живёт» определённая программа.

Порт 5900: «квартира» VNC-сервера на Raspberry Pi

Порт 5901: «квартира» на EC2, которая ведёт к VNC через туннель

Порт 2222: «квартира» на EC2, которая ведёт к SSH Raspberry Pi

SSH-туннель (SSH Tunnel)

Зашифрованная «труба» между Raspberry Pi и облачным сервером EC2. Весь трафик (в том числе VNC) идёт по этой трубе в зашифрованном виде — никто не может подсмотреть.

Важно: Туннель создаёт сам Raspberry Pi, поэтому домашний роутер его не блокирует.

EC2 (Elastic Compute Cloud)

Виртуальный сервер в облаке Amazon (AWS). Это как арендованный компьютер, который работает 24/7 в дата-центре Amazon и имеет свой постоянный адрес в интернете.

Роль: Посредник между вами и Raspberry Pi. Он доступен из интернета, а Raspberry Pi — нет.

Домен (Domain Name)

Удобное имя вместо набора цифр IP-адреса. Например, вместо 3.120.94.8:5901 можно написать my-raspberry.example.com:5901 — легче запомнить и выглядит профессионально.

Security Group

Виртуальный брандмауэр (firewall) в AWS. Решает, кто и на какие «квартиры» (порты) может постучаться к вашему EC2 серверу из интернета.

Пример: Открыли порт 5901 = разрешили подключаться к VNC.

Systemd Service

Программа-менеджер в Linux, которая следит за другими программами. Если туннель упадёт (отключится интернет, сбой), systemd автоматически его перезапустит через 10 секунд.

Аналогия: Как сторож, который следит, чтобы дверь (туннель) всегда была открыта.

localhost (127.0.0.1)

Специальное имя, которое означает «этот же компьютер». Когда на EC2 мы пишем localhost:5901, имеется в виду «порт 5901 на этом же сервере EC2».

0.0.0.0 (все интерфейсы)

Специальный адрес, означающий «принимать подключения отовсюду». Когда порт открыт на 0.0.0.0, к нему можно подключиться из интернета.

Не паникуйте!

Не обязательно запоминать всё сразу. По ходу настройки мы будем возвращаться к этим терминам и объяснять их снова в контексте. Эта секция — просто справочник, к которому можно вернуться в любой момент.

Как это работает: путь от вас до Raspberry Pi

Давайте разберёмся, как данные путешествуют от вашего компьютера к Raspberry Pi и обратно. Понимание схемы поможет при диагностике проблем.

Визуальная схема:

Ваш компьютер

VNC Viewer

EC2 сервер

YOUR-EC2-IP:5901

SSH Туннель

Зашифрован

Raspberry Pi

VNC Server :5900

Пошаговое объяснение:

1

Вы открываете VNC Viewer

Вводите адрес: YOUR-DOMAIN.example.com:5901 (или YOUR-EC2-IP:5901). VNC Viewer отправляет запрос подключения в интернет на этот адрес и порт.

2

Запрос попадает на EC2 сервер

Ваш EC2 сервер (виртуальная машина в облаке Amazon) получает этот запрос на порт 5901. Security Group (брандмауэр AWS) проверяет: «Разрешён ли доступ на этот порт?» Если да — пропускает дальше.

3

Данные идут по SSH-туннелю

EC2 перенаправляет всё, что пришло на порт 5901, в SSH-туннель. Этот туннель ведёт к вашему Raspberry Pi дома. Все данные зашифрованы — даже если кто-то перехватит, прочитать не сможет.

4

Raspberry Pi отвечает

Запрос доходит до VNC-сервера на Raspberry Pi (порт 5900). VNC-сервер проверяет пароль и отправляет картинку рабочего стола обратно по тому же пути: RPI → туннель → EC2 → интернет → ваш компьютер.

5

Вы видите рабочий стол!

VNC Viewer получает картинку и отображает её в окне. Теперь вы управляете мышкой и клавиатурой — всё, что вы делаете, передаётся обратно по тому же пути и выполняется на Raspberry Pi.

Почему это безопасно?

  • Весь трафик идёт через SSH-туннель — самый защищённый способ передачи данных
  • Домашний роутер не открывает никаких портов — нет уязвимостей
  • Raspberry Pi сам создаёт туннель — никто извне не может к нему достучаться
  • Доступ защищён паролем VNC (а лучше ещё и ключами SSH, о чём ниже)

Что нужно подготовить

Перед началом убедитесь, что у вас есть всё необходимое. Если чего-то не хватает, настройте сначала это.

Обязательные требования

  • Настроенный SSH-туннель к Raspberry Pi

    Вы должны были настроить его по этому руководству. Проверка: команда ssh rpi подключает вас к Raspberry Pi.

  • Raspberry Pi с Raspberry Pi OS

    VNC-сервер уже установлен и работает в Raspberry Pi OS — ничего дополнительно устанавливать не нужно!

  • EC2 сервер на AWS

    С постоянным IP-адресом (Elastic IP). У вас он уже есть, если настроили SSH-туннель.

  • Доступ к AWS Console

    Чтобы открыть порт 5901 в Security Group (брандмауэре).

  • VNC Viewer на вашем компьютере

    Бесплатная программа от RealVNC. Установим в процессе настройки.

Справочник: какие данные понадобятся

Держите эту информацию под рукой. В примерах мы будем использовать плейсхолдеры, вы замените их на свои реальные значения.

Что этоВ примерахВаше значение
IP-адрес EC2YOUR-EC2-IPНапример: 18.185.123.45
Ваш доменYOUR-DOMAIN.example.comНапример: my-rpi.ddns.net
Пользователь на RPIa528fe1Ваше имя пользователя
SSH-ключ для EC2~/.ssh/rpi-tunnel-key.pemПуть к вашему ключу

Шаг 1. Проверка VNC на Raspberry Pi

На Raspberry Pi OS VNC-сервер уже установлен и обычно работает автоматически. Давайте проверим, что он запущен и на каком порту слушает.

1.1 Подключаемся к Raspberry Pi

Откройте терминал на вашем компьютере и выполните:

1ssh rpi

Что происходит:

Вы подключаетесь к Raspberry Pi через уже настроенный SSH-туннель. Если команда не работает, вернитесь к руководству по SSH и убедитесь, что туннель работает.

1.2 Проверяем порт VNC

На Raspberry Pi выполните команду:

1sudo ss -tulpn | grep 590

Расшифровка команды:

  • ss — показывает сетевые соединения
  • -tulpn — параметры для отображения TCP/UDP портов с программами
  • grep 590 — фильтруем только строки с "590" (VNC порты)

Ожидаемый результат (вы должны увидеть):

1tcp   LISTEN   0   5   0.0.0.0:5900   0.0.0.0:*   users:(("vncserver-x11",pid=1234))

Что это означает:

  • VNC-сервер работает
  • Слушает на порту 5900
  • Доступен на всех интерфейсах (0.0.0.0)
  • Программа называется vncserver-x11

⚠Запомните номер порта (5900)! Он понадобится в следующем шаге.

Если VNC не работает (ничего не выводится):

Проверьте статус службы VNC:

1sudo systemctl status vncserver-x11-serviced.service

Если служба не активна, запустите её:

1sudo systemctl enable vncserver-x11-serviced.service
2sudo systemctl start vncserver-x11-serviced.service

Проверьте снова:

1sudo systemctl status vncserver-x11-serviced.service

Должно быть: active (running)

Отлично! VNC работает. Не закрывайте терминал — переходим к следующему шагу.

Шаг 2. Добавление VNC в SSH-туннель

Сейчас ваш туннель передаёт только SSH (порт 22). Нужно добавить в него VNC, чтобы вы могли видеть рабочий стол Raspberry Pi из интернета.

Что мы делаем:

Мы скажем SSH-туннелю: «Всё, что приходит на EC2 на порт 5901, передавай на Raspberry Pi на порт 5900 (где работает VNC)». Порт 5901 на EC2 будет «входом», а порт 5900 на RPI — «выходом».

2.1 Останавливаем туннель

На Raspberry Pi (в терминале где вы подключены) выполните:

1sudo systemctl stop reverse-tunnel.service

Зачем останавливать:

Чтобы безопасно изменить настройки туннеля. Если не остановить, старый туннель может конфликтовать с новым.

2.2 Редактируем настройки туннеля

Откройте файл конфигурации туннеля:

1sudo vim /etc/systemd/system/reverse-tunnel.service

Как работать в vim (напоминание):

  • Перемещение: стрелки на клавиатуре
  • Начать редактирование: нажмите клавишу i (внизу появится -- INSERT --)
  • Редактируйте как в обычном блокноте
  • Сохранить и выйти: нажмите Esc, наберите :wq (двоеточие, w, q), нажмите Enter
  • Выйти без сохранения: Esc, :q!

2.3 Находим и изменяем строку ExecStart

Найдите строку, которая начинается с ExecStart=. Она длинная, но нам нужно добавить в её конец новый параметр.

Было (старая версия):

1ExecStart=/usr/bin/ssh -i /home/a528fe1/.ssh/id_tunnel ... -R 2222:localhost:22 tunnel@YOUR-EC2-IP

Должно стать (новая версия):

1ExecStart=/usr/bin/ssh -i /home/a528fe1/.ssh/id_tunnel ... -R 2222:localhost:22 -R 5901:localhost:5900 tunnel@YOUR-EC2-IP

Что мы добавили:

-R 5901:localhost:5900 — создаём проброс порта:

  • 5901 — порт на EC2 сервере (снаружи, из интернета)
  • localhost:5900 — порт на Raspberry Pi (внутри, где работает VNC)
  • Когда кто-то подключится к EC2:5901, он попадёт на RPI:5900

2.4 Сохраняем изменения

В редакторе vim:

  1. Нажмите Esc
  2. Наберите :wq
  3. Нажмите Enter

Файл сохранён!

2.5 Применяем изменения и запускаем туннель

Выполните по очереди эти команды:

1# Говорим systemd перечитать файлы конфигурации
2sudo systemctl daemon-reload
3
4# Запускаем туннель с новыми настройками
5sudo systemctl start reverse-tunnel.service
6
7# Проверяем статус
8sudo systemctl status reverse-tunnel.service

Что смотреть в выводе:

Ожидаемый результат:

  • Статус: active (running) зелёным цветом
  • Нет строк красного цвета с ошибками
  • Процесс работает несколько секунд (смотрите на время)

2.6 Проверяем, что туннель работает с VNC

Убедимся, что SSH-процесс действительно пробрасывает порт 5901:

1ps aux | grep ssh | grep tunnel

Вы должны увидеть строку примерно такую:

1a528fe1  12345  ... /usr/bin/ssh ... -R 2222:localhost:22 -R 5901:localhost:5900 tunnel@YOUR-EC2-IP

Видите -R 5901:localhost:5900?

Отлично! Туннель настроен правильно и передаёт VNC. Переходим к EC2 серверу.

Не закрывайте терминал, но можете выйти из Raspberry Pi:

1exit

Шаг 3. Проверка на EC2 сервере

Теперь проверим, что туннель «прибыл» на EC2 сервер и порт 5901 действительно открыт для подключений.

3.1 Подключаемся к EC2

В терминале на вашем компьютере:

1ssh -i ~/.ssh/rpi-tunnel-key.pem ubuntu@YOUR-EC2-IP

Если настроили алиас:

Можете просто: ssh ec2-tunnel (если добавили в SSH config)

3.2 Проверяем порты туннеля

На EC2 выполните:

1sudo ss -tulpn | grep -E "2222|5901"

Желаемый результат (один из двух вариантов):

Вариант 1 (порты локальные):

1tcp   LISTEN   0   128   127.0.0.1:2222   0.0.0.0:*   users:(("sshd",pid=...))
2tcp   LISTEN   0   128   127.0.0.1:5901   0.0.0.0:*   users:(("sshd",pid=...))

Вариант 2 (порты глобальные, лучше):

1tcp   LISTEN   0   128   0.0.0.0:2222   0.0.0.0:*   users:(("sshd",pid=...))
2tcp   LISTEN   0   128   0.0.0.0:5901   0.0.0.0:*   users:(("sshd",pid=...))

Разница между вариантами:

  • 127.0.0.1 — порт доступен только локально (с самого EC2 сервера)
  • 0.0.0.0 — порт доступен отовсюду (из интернета) Нам нужен этот!

Если видите вариант 1 (127.0.0.1):

Нужно включить GatewayPorts в настройках SSH. Переходите к следующему пункту.

3.3 Настройка GatewayPorts (если нужно)

Проверяем текущую настройку:

1sudo grep -i gatewayports /etc/ssh/sshd_config

Должно быть:

1GatewayPorts yes

Если строка закомментирована (#GatewayPorts) или её нет:

  1. Откройте файл: sudo vim /etc/ssh/sshd_config
  2. Найдите строку GatewayPorts или добавьте в конец файла
  3. Измените на: GatewayPorts yes
  4. Сохраните: Esc, :wq, Enter

Что делает GatewayPorts:

По умолчанию SSH разрешает пробрасывать порты только на localhost (127.0.0.1). Параметр GatewayPorts yes позволяет привязать порты ко всем интерфейсам (0.0.0.0), что делает их доступными из интернета.

Перезапустите SSH-сервер:

1sudo systemctl restart ssh

Не переживайте: SSH-соединение не разорвётся, вы останетесь подключёнными.

3.4 Перезапускаем туннель на RPI

После изменений на EC2 нужно перезапустить туннель на Raspberry Pi. Не закрывая терминал с EC2, откройте новый терминал и:

1ssh rpi
2sudo systemctl restart reverse-tunnel.service
3exit

3.5 Проверяем снова на EC2

В первом терминале (где EC2) проверьте порты ещё раз:

1sudo ss -tulpn | grep -E "2222|5901"

Теперь должны быть порты на 0.0.0.0:

Это означает, что VNC доступен из интернета!

3.6 Тест локального подключения

Проверим, что можем подключиться к порту 5901 на EC2:

1nc -zv localhost 5901

Что делает команда:

  • nc (netcat) — утилита для работы с сетью
  • -z — только проверить доступность, не передавать данные
  • -v — подробный (verbose) вывод

Ожидаемый результат:

1Connection to localhost 5901 port [tcp/*] succeeded!

Отлично! Порт доступен.

Локально на EC2 мы можем подключиться к порту 5901, который ведёт в туннель к Raspberry Pi. Осталось открыть этот порт в брандмауэре AWS.

Выходим из EC2:

1exit

Шаг 4. Открытие порта в AWS Security Group

Security Group — это виртуальный брандмауэр вашего EC2 сервера. Сейчас порт 5901 закрыт для интернета. Откроем его, чтобы вы могли подключиться к VNC откуда угодно.

4.1 Открываем AWS Console

  1. Перейдите на AWS Console
  2. Войдите в свой аккаунт
  3. Выберите регион, где находится ваш EC2 (например, Frankfurt — eu-central-1)
  4. Откройте: Services → EC2

4.2 Находим Security Group

  1. В левом меню кликните Instances (Инстансы)
  2. Найдите и кликните на ваш инстанс (например, rpi-tunnel-server)
  3. Внизу откроется панель с подробной информацией
  4. Перейдите на вкладку Security
  5. Кликните на название Security Group (например, sg-1234567890abcdef0)

4.3 Добавляем правило для VNC

  1. Кликните кнопку Edit inbound rules (Редактировать входящие правила)
  2. Кликните Add rule (Добавить правило)
  3. Заполните поля:
    • Type: Custom TCP
    • Port range: 5901
    • Source: выберите один из вариантов:
      • 0.0.0.0/0 — доступ из любой точки мира (удобно, но менее безопасно)
      • My IP — доступ только с вашего текущего IP (безопаснее)
    • Description: VNC access to Raspberry Pi
  4. Кликните Save rules

Рекомендация по безопасности:

Если вы всегда подключаетесь с одного места (дома или из офиса):

  • Используйте My IP — безопаснее
  • При смене местоположения просто обновите правило в Security Group

Если подключаетесь из разных мест:

  • Используйте 0.0.0.0/0 для удобства
  • Обязательно используйте сильный пароль VNC (об этом в альтернативном разделе)

4.4 Проверяем все правила

В списке Inbound rules должны быть как минимум эти правила:

TypePortSourceДля чего
SSH22My IPУправление EC2 сервером
Custom TCP22220.0.0.0/0SSH к Raspberry Pi
Custom TCP59010.0.0.0/0 или My IPVNC к Raspberry Pi

Готово! Порт 5901 открыт для подключений.

Теперь VNC Viewer сможет подключиться к вашему EC2 на порту 5901, и трафик пойдёт через туннель к Raspberry Pi.

Шаг 5. Проверка домена и DNS

Если у вас настроен домен (например, my-raspberry.ddns.net), проверим, что он правильно указывает на ваш EC2 сервер. Если домена нет — можете пропустить этот шаг и использовать IP-адрес.

5.1 Проверяем DNS

На вашем компьютере откройте терминал и выполните:

1ping YOUR-DOMAIN.example.com

Замените YOUR-DOMAIN.example.com:

На ваш реальный домен. Например: ping my-raspberry.ddns.net

Ожидаемый результат:

1PING YOUR-DOMAIN.example.com (YOUR-EC2-IP): 56 data bytes
264 bytes from YOUR-EC2-IP: icmp_seq=0 ttl=51 time=28.3 ms
364 bytes from YOUR-EC2-IP: icmp_seq=1 ttl=51 time=27.9 ms

Остановите ping нажатием Ctrl+C

Видите IP-адрес вашего EC2?

Отлично! DNS настроен правильно. Домен указывает на ваш сервер.

Если домен не работает:

  1. Войдите в панель управления вашим доменом (где покупали/регистрировали)
  2. Найдите раздел DNS Settings или DNS Management
  3. Убедитесь, что есть A-запись:
    • Type: A
    • Name: @ или ваш поддомен
    • Value: YOUR-EC2-IP
    • TTL: 3600 (или любое)
  4. Сохраните изменения
  5. Подождите 5-30 минут (иногда до 24 часов) для распространения DNS по всему интернету

Нет домена? Не проблема!

Можете использовать напрямую IP-адрес EC2. В VNC Viewer вместо YOUR-DOMAIN.example.com:5901 используйте YOUR-EC2-IP:5901

Шаг 6. Установка VNC Viewer

VNC Viewer — это программа на вашем компьютере, которая покажет рабочий стол Raspberry Pi. Она бесплатная и работает на всех операционных системах.

Windows

  1. Откройте сайт RealVNC
  2. Скачайте VNC Viewer for Windows
  3. Запустите установочный файл
  4. Следуйте инструкциям установщика
  5. Запустите VNC Viewer из меню Пуск

macOS

  1. Откройте сайт RealVNC
  2. Скачайте VNC Viewer for macOS
  3. Откройте DMG файл
  4. Перетащите VNC Viewer в папку Applications
  5. Запустите из Launchpad или Applications

Linux

Ubuntu / Debian:

1sudo apt update
2sudo apt install realvnc-viewer

Или TigerVNC:

1sudo apt install tigervnc-viewer

Запуск:

1vncviewer

Программа установлена!

Теперь у вас есть VNC Viewer. Переходим к самому интересному — подключению к Raspberry Pi!

Шаг 7. Подключаемся по VNC! 🎉

Всё готово! Сейчас вы впервые увидите рабочий стол своего Raspberry Pi удалённо. Это займёт буквально минуту.

7.1 Запускаем VNC Viewer

Откройте программу VNC Viewer на вашем компьютере.

7.2 Вводим адрес для подключения

В верхней части окна VNC Viewer есть поле ввода адреса.

Если у вас есть домен, введите:

1YOUR-DOMAIN.example.com:5901

Или используйте IP-адрес напрямую:

1YOUR-EC2-IP:5901

Что означает :5901:

Двоеточие и число после адреса — это номер порта. Мы говорим VNC Viewer: «Подключись к этому адресу, но не на стандартный порт, а на порт 5901».

7.3 (Опционально) Сохраняем подключение

Чтобы не вводить адрес каждый раз, можете сохранить подключение:

  1. Кликните File → New connection
  2. В поле VNC Server введите: YOUR-DOMAIN.example.com:5901
  3. В поле Name введите дружественное имя: Raspberry Pi Home
  4. Остальные поля оставьте по умолчанию
  5. Кликните OK

Теперь это подключение сохранено. В следующий раз просто кликните по нему дважды.

7.4 Подключаемся

Нажмите Enter или дважды кликните на сохранённое подключение.

7.5 Предупреждение о безопасности (первый раз)

Может появиться окно с предупреждением:

"The identity of this computer cannot be verified"

или

"The signature of the VNC Server could not be verified"

Почему это появляется:

VNC-сервер на Raspberry Pi не использует проверенный SSL-сертификат (как у сайтов с https://). Для домашнего использования это нормально и не опасно, потому что весь трафик уже защищён SSH-туннелем.

Нажмите Continue или Connect.

7.6 Вводим пароль VNC

Появится окно Authentication с запросом пароля.

Какой пароль вводить:

На Raspberry Pi OS VNC-сервер по умолчанию использует пароль вашего пользователя. То есть тот же пароль, которым вы входите в систему.

В нашем примере: 0fa65eb3e31c (пароль пользователя a528fe1)

Введите пароль и нажмите OK.

7.7 Ура! Вы видите рабочий стол! 🎉

Поздравляем! Всё работает!

Вы должны увидеть рабочий стол Raspberry Pi в окне VNC Viewer. Теперь вы можете:

Управлять мышкой

Печатать на клавиатуре

Открывать программы

Работать с файлами

Всё, что вы делаете в окне VNC Viewer, происходит на Raspberry Pi. Это как если бы вы сидели за ним с клавиатурой и монитором, но через интернет!

Полезные советы:

  • Полноэкранный режим: Нажмите F8 или кнопку в верхней части окна VNC → Full screen
  • Качество картинки: Правый клик на подключение → Properties → Options → Picture quality (можно выбрать Low/Medium/High)
  • Копировать/вставить: Работает между вашим компьютером и Raspberry Pi через буфер обмена VNC

Дополнительная безопасность: VNC через SSH-туннель

Сейчас VNC работает через интернет с паролем. Это нормально, но если хотите ещё больше безопасности, можно пропустить VNC-трафик через дополнительный SSH-туннель. Это добавит ещё один слой шифрования.

Когда это нужно:

  • Вы хотите максимальную безопасность
  • Не хотите открывать порт 5901 в Security Group
  • Подключаетесь через ненадёжные сети (публичный Wi-Fi)

Способ A: Вручную (разовое подключение)

Этот способ подходит для разового подключения.

A.1 Создаём локальный SSH-туннель

В терминале на вашем компьютере выполните:

1ssh -i ~/.ssh/rpi-tunnel-key.pem -L 5901:localhost:5901 ubuntu@YOUR-DOMAIN.example.com -N -f

Что делает команда:

  • -L 5901:localhost:5901 — создать локальный туннель (Local Forward)
  • Левый 5901 — порт на вашем компьютере
  • Правый 5901 — порт на EC2, который идёт к RPI
  • -N — не открывать командную строку
  • -f — работать в фоне

A.2 Подключаемся в VNC Viewer

Теперь в VNC Viewer введите:

1localhost:5901

Теперь VNC идёт через двойной туннель!

Ваш компьютер → SSH-туннель → EC2 → основной туннель → Raspberry Pi. Всё зашифровано дважды!

A.3 Закрываем туннель (когда закончили)

Найдите процесс SSH-туннеля:

1ps aux | grep "ssh.*5901" | grep -v grep

Увидите строку с номером процесса (PID), например:

1username  12345  0.0  0.1  ...  ssh -i ~/.ssh/rpi-tunnel-key.pem -L 5901...

Закройте процесс (замените 12345 на реальный PID):

1kill 12345

Способ B: Автоматически через SSH config (постоянно)

Если часто подключаетесь, настройте автоматический туннель.

B.1 Редактируем SSH config

Откройте файл конфигурации SSH:

1vim ~/.ssh/config

B.2 Находим секцию Host rpi

Ищите секцию для Raspberry Pi. Она должна выглядеть примерно так:

1Host rpi
2    HostName localhost
3    Port 2222
4    User a528fe1
5    IdentityFile ~/.ssh/id_rpi
6    ProxyCommand ssh -i ~/.ssh/rpi-tunnel-key.pem -W localhost:2222 ubuntu@YOUR-DOMAIN.example.com

B.3 Добавляем строку LocalForward

Добавьте строку перед ProxyCommand:

1Host rpi
2    HostName localhost
3    Port 2222
4    User a528fe1
5    IdentityFile ~/.ssh/id_rpi
6    LocalForward 5901 localhost:5901
7    ProxyCommand ssh -i ~/.ssh/rpi-tunnel-key.pem -W localhost:2222 ubuntu@YOUR-DOMAIN.example.com

Сохраните файл.

B.4 Подключаемся

Теперь каждый раз, когда вы выполняете:

1ssh rpi

Автоматически создаётся туннель для VNC! В VNC Viewer подключайтесь к:

1localhost:5901

Максимальная безопасность настроена!

Теперь VNC защищён тремя уровнями: паролем VNC + основным SSH-туннелем + дополнительным SSH-туннелем. Даже если кто-то перехватит трафик, прочитать его будет невозможно.

Решение проблем: Что делать, если не работает

Если что-то пошло не так, не паникуйте. Вот самые частые проблемы и их решения.

Проблема 1: "Connection refused" в VNC Viewer

Что это означает:

VNC Viewer не может достучаться до порта 5901 на EC2. Либо порт закрыт, либо туннель не работает.

Как проверить:

  1. Проверьте туннель на Raspberry Pi:
    1ssh rpi
    2sudo systemctl status reverse-tunnel.service
    Должно быть: active (running)
  2. Если туннель не активен:
    1sudo systemctl restart reverse-tunnel.service
    2sudo systemctl status reverse-tunnel.service
  3. Проверьте порт на EC2:
    1ssh -i ~/.ssh/rpi-tunnel-key.pem ubuntu@YOUR-EC2-IP
    2sudo ss -tulpn | grep 5901
    Должна быть строка с портом 5901
  4. Проверьте Security Group в AWS Console (Шаг 4) — порт 5901 должен быть открыт

Проблема 2: "Authentication failure" в VNC

Что это означает:

Неправильный пароль VNC.

Как решить:

  1. Убедитесь, что вводите пароль пользователя Raspberry Pi (не пароль EC2!)
  2. Если забыли пароль или хотите изменить, на Raspberry Pi:
    1passwd
    Введите новый пароль дважды
  3. Попробуйте подключиться снова с новым паролем

Проблема 3: Чёрный экран в VNC

Что это означает:

Графический интерфейс не запущен на Raspberry Pi, или VNC показывает консольный режим.

Как решить:

  1. Включите графический интерфейс с автозапуском:
    1ssh rpi
    2sudo raspi-config
  2. Выберите: System Options Boot / Auto LoginDesktop Autologin
  3. Выберите FinishYes (reboot now)
  4. Подождите 1-2 минуты, пока Raspberry Pi перезагрузится
  5. Подключитесь снова через VNC Viewer

Проблема 4: VNC работает очень медленно

Что это означает:

Высокое качество изображения + медленный интернет = задержки в отображении.

Как ускорить:

В VNC Viewer:

  1. Кликните правой кнопкой на подключение → Properties
  2. Вкладка Options
  3. Picture quality: выберите Medium или Low
  4. Включите Adaptive (автоматическая подстройка качества)
  5. Кликните OK

На Raspberry Pi (уменьшить разрешение):

1ssh rpi
2sudo raspi-config

Выберите: Display Options VNC Resolution1280x720 или 1024x768

Перезагрузите:

1sudo reboot

Результат: Картинка будет менее детальной, но работа станет гораздо быстрее и комфортнее.

Проблема 5: "Unable to connect to VNC Server"

Что проверить:

  1. DNS работает правильно:
    1ping YOUR-DOMAIN.example.com
    Должен вернуть IP-адрес EC2
  2. Порт доступен из интернета:
    1nc -zv YOUR-DOMAIN.example.com 5901
    Должен вернуть "succeeded"
  3. Security Group открыт (см. Шаг 4)
  4. Туннель работает на Raspberry Pi (см. Проблему 1)

Полезные команды для повседневного использования

Сохраните эти команды — они пригодятся для управления VNC и диагностики проблем.

На Raspberry Pi

Статус туннеля:

1sudo systemctl status reverse-tunnel.service

Перезапуск туннеля:

1sudo systemctl restart reverse-tunnel.service

Логи туннеля (последние 50 строк):

1sudo journalctl -u reverse-tunnel.service -n 50

Логи в реальном времени:

1sudo journalctl -u reverse-tunnel.service -f

Нажмите Ctrl+C для выхода

Статус VNC-сервера:

1sudo systemctl status vncserver-x11-serviced.service

Перезапуск VNC-сервера:

1sudo systemctl restart vncserver-x11-serviced.service

Проверка VNC порта:

1sudo ss -tulpn | grep 590

На EC2 сервере

Проверка портов туннеля:

1sudo ss -tulpn | grep -E "2222|5901"

Проверка SSH конфигурации:

1sudo grep GatewayPorts /etc/ssh/sshd_config

Перезапуск SSH (после изменений конфигурации):

1sudo systemctl restart ssh

На вашем компьютере

Проверка DNS:

1ping YOUR-DOMAIN.example.com

Проверка доступности порта VNC:

1nc -zv YOUR-DOMAIN.example.com 5901

Создание SSH-туннеля для VNC вручную:

1ssh -i ~/.ssh/rpi-tunnel-key.pem -L 5901:localhost:5901 ubuntu@YOUR-DOMAIN.example.com -N -f

Подключение к RPI по SSH:

1ssh rpi

Подключение к EC2 напрямую:

1ssh -i ~/.ssh/rpi-tunnel-key.pem ubuntu@YOUR-EC2-IP

Итоговая схема: Как всё работает вместе

1

Ваш компьютер (где угодно в мире)

VNC Viewer подключается к YOUR-DOMAIN.example.com:5901

2

EC2 сервер (облако Amazon AWS)

IP: YOUR-EC2-IP, порт 5901 открыт в Security Group

3

SSH-туннель (зашифрованный канал)

Reverse tunnel создан Raspberry Pi: EC2:5901 → RPI:5900

4

Raspberry Pi (дома за роутером)

VNC-сервер на порту 5900, пользователь a528fe1

Учётные данные для быстрого доступа:

Домен/IP:YOUR-DOMAIN.example.com или YOUR-EC2-IP
VNC адрес:YOUR-DOMAIN.example.com:5901
VNC пароль:0fa65eb3e31c (пароль пользователя RPI)
SSH к RPI:ssh rpi
SSH к EC2:ssh -i ~/.ssh/rpi-tunnel-key.pem ubuntu@YOUR-EC2-IP

Поздравляем! 🎉

Теперь у вас полный удалённый доступ к Raspberry Pi из любой точки мира:

  • SSH для командной строки
  • VNC для графического рабочего стола
  • Безопасное зашифрованное соединение
  • Работает за любым роутером без настроек
  • Доступно через красивый домен

Что дальше?

Теперь, когда у вас есть полный удалённый доступ, вы можете использовать Raspberry Pi для множества интересных проектов:

Домашний сервер

Установите Nextcloud для собственного облачного хранилища, Plex для медиасервера, или Pi-hole для блокировки рекламы во всей домашней сети.

Nextcloud →

Умный дом

Настройте Home Assistant для управления всеми устройствами умного дома из одного интерфейса. Управляйте светом, температурой, камерами откуда угодно.

Home Assistant →

Мониторинг и автоматизация

Используйте для мониторинга серверов, сбора метрик, автоматизации задач. Установите Grafana для красивых дашбордов или Node-RED для автоматизации.

Grafana →

Обучение и эксперименты

Изучайте Linux, программирование, работу с сетями, базами данных. Теперь у вас есть личный сервер для экспериментов, доступный 24/7 откуда угодно.

Документация Raspberry Pi →

Полезные ссылки

Нужна помощь с настройкой удалённого доступа?
Помогаю настроить VNC, SSH-туннели, удалённый доступ к IoT-устройствам и автоматизировать развёртывание инфраструктуры. Расскажите о вашей задаче — предложу оптимальное решение.