Настройка VNC-доступа к Raspberry Pi через AWS EC2 и собственный домен
Зачем нужен 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
Пошаговое объяснение:
Вы открываете VNC Viewer
Вводите адрес: YOUR-DOMAIN.example.com:5901
(или YOUR-EC2-IP:5901
). VNC Viewer отправляет запрос подключения в интернет на этот адрес и порт.
Запрос попадает на EC2 сервер
Ваш EC2 сервер (виртуальная машина в облаке Amazon) получает этот запрос на порт 5901. Security Group (брандмауэр AWS) проверяет: «Разрешён ли доступ на этот порт?» Если да — пропускает дальше.
Данные идут по SSH-туннелю
EC2 перенаправляет всё, что пришло на порт 5901, в SSH-туннель. Этот туннель ведёт к вашему Raspberry Pi дома. Все данные зашифрованы — даже если кто-то перехватит, прочитать не сможет.
Raspberry Pi отвечает
Запрос доходит до VNC-сервера на Raspberry Pi (порт 5900). VNC-сервер проверяет пароль и отправляет картинку рабочего стола обратно по тому же пути: RPI → туннель → EC2 → интернет → ваш компьютер.
Вы видите рабочий стол!
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-адрес EC2 | YOUR-EC2-IP | Например: 18.185.123.45 |
Ваш домен | YOUR-DOMAIN.example.com | Например: my-rpi.ddns.net |
Пользователь на RPI | a528fe1 | Ваше имя пользователя |
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:
- Нажмите
Esc
- Наберите
:wq
- Нажмите
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
) или её нет:
- Откройте файл:
sudo vim /etc/ssh/sshd_config
- Найдите строку
GatewayPorts
или добавьте в конец файла - Измените на:
GatewayPorts yes
- Сохраните:
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
- Перейдите на AWS Console
- Войдите в свой аккаунт
- Выберите регион, где находится ваш EC2 (например, Frankfurt — eu-central-1)
- Откройте: Services → EC2
4.2 Находим Security Group
- В левом меню кликните Instances (Инстансы)
- Найдите и кликните на ваш инстанс (например,
rpi-tunnel-server
) - Внизу откроется панель с подробной информацией
- Перейдите на вкладку Security
- Кликните на название Security Group (например,
sg-1234567890abcdef0
)
4.3 Добавляем правило для VNC
- Кликните кнопку Edit inbound rules (Редактировать входящие правила)
- Кликните Add rule (Добавить правило)
- Заполните поля:
- Type: Custom TCP
- Port range:
5901
- Source: выберите один из вариантов:
0.0.0.0/0
— доступ из любой точки мира (удобно, но менее безопасно)My IP
— доступ только с вашего текущего IP (безопаснее)
- Description:
VNC access to Raspberry Pi
- Кликните Save rules
Рекомендация по безопасности:
Если вы всегда подключаетесь с одного места (дома или из офиса):
- Используйте
My IP
— безопаснее - При смене местоположения просто обновите правило в Security Group
Если подключаетесь из разных мест:
- Используйте
0.0.0.0/0
для удобства - Обязательно используйте сильный пароль VNC (об этом в альтернативном разделе)
4.4 Проверяем все правила
В списке Inbound rules должны быть как минимум эти правила:
Type | Port | Source | Для чего |
---|---|---|---|
SSH | 22 | My IP | Управление EC2 сервером |
Custom TCP | 2222 | 0.0.0.0/0 | SSH к Raspberry Pi |
Custom TCP | 5901 | 0.0.0.0/0 или My IP | VNC к 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 настроен правильно. Домен указывает на ваш сервер.
Если домен не работает:
- Войдите в панель управления вашим доменом (где покупали/регистрировали)
- Найдите раздел DNS Settings или DNS Management
- Убедитесь, что есть A-запись:
- Type: A
- Name:
@
или ваш поддомен - Value:
YOUR-EC2-IP
- TTL: 3600 (или любое)
- Сохраните изменения
- Подождите 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
- Откройте сайт RealVNC
- Скачайте VNC Viewer for Windows
- Запустите установочный файл
- Следуйте инструкциям установщика
- Запустите VNC Viewer из меню Пуск
macOS
- Откройте сайт RealVNC
- Скачайте VNC Viewer for macOS
- Откройте DMG файл
- Перетащите VNC Viewer в папку Applications
- Запустите из 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 (Опционально) Сохраняем подключение
Чтобы не вводить адрес каждый раз, можете сохранить подключение:
- Кликните File → New connection
- В поле VNC Server введите:
YOUR-DOMAIN.example.com:5901
- В поле Name введите дружественное имя:
Raspberry Pi Home
- Остальные поля оставьте по умолчанию
- Кликните 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. Либо порт закрыт, либо туннель не работает.
Как проверить:
- Проверьте туннель на Raspberry Pi:Должно быть:
1ssh rpi 2sudo systemctl status reverse-tunnel.service
active (running)
- Если туннель не активен:
1sudo systemctl restart reverse-tunnel.service 2sudo systemctl status reverse-tunnel.service
- Проверьте порт на EC2:Должна быть строка с портом 5901
1ssh -i ~/.ssh/rpi-tunnel-key.pem ubuntu@YOUR-EC2-IP 2sudo ss -tulpn | grep 5901
- Проверьте Security Group в AWS Console (Шаг 4) — порт 5901 должен быть открыт
Проблема 2: "Authentication failure" в VNC
Что это означает:
Неправильный пароль VNC.
Как решить:
- Убедитесь, что вводите пароль пользователя Raspberry Pi (не пароль EC2!)
- Если забыли пароль или хотите изменить, на Raspberry Pi:Введите новый пароль дважды
1passwd
- Попробуйте подключиться снова с новым паролем
Проблема 3: Чёрный экран в VNC
Что это означает:
Графический интерфейс не запущен на Raspberry Pi, или VNC показывает консольный режим.
Как решить:
- Включите графический интерфейс с автозапуском:
1ssh rpi 2sudo raspi-config
- Выберите: System Options → Boot / Auto Login → Desktop Autologin
- Выберите Finish → Yes (reboot now)
- Подождите 1-2 минуты, пока Raspberry Pi перезагрузится
- Подключитесь снова через VNC Viewer
Проблема 4: VNC работает очень медленно
Что это означает:
Высокое качество изображения + медленный интернет = задержки в отображении.
Как ускорить:
В VNC Viewer:
- Кликните правой кнопкой на подключение → Properties
- Вкладка Options
- Picture quality: выберите Medium или Low
- Включите Adaptive (автоматическая подстройка качества)
- Кликните OK
На Raspberry Pi (уменьшить разрешение):
1ssh rpi
2sudo raspi-config
Выберите: Display Options → VNC Resolution → 1280x720 или 1024x768
Перезагрузите:
1sudo reboot
Результат: Картинка будет менее детальной, но работа станет гораздо быстрее и комфортнее.
Проблема 5: "Unable to connect to VNC Server"
Что проверить:
- DNS работает правильно:Должен вернуть IP-адрес EC2
1ping YOUR-DOMAIN.example.com
- Порт доступен из интернета:Должен вернуть "succeeded"
1nc -zv YOUR-DOMAIN.example.com 5901
- Security Group открыт (см. Шаг 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
Итоговая схема: Как всё работает вместе
Ваш компьютер (где угодно в мире)
VNC Viewer подключается к YOUR-DOMAIN.example.com:5901
EC2 сервер (облако Amazon AWS)
IP: YOUR-EC2-IP
, порт 5901 открыт в Security Group
SSH-туннель (зашифрованный канал)
Reverse tunnel создан Raspberry Pi: EC2:5901 → RPI:5900
Raspberry Pi (дома за роутером)
VNC-сервер на порту 5900, пользователь a528fe1
Учётные данные для быстрого доступа:
Поздравляем! 🎉
Теперь у вас полный удалённый доступ к Raspberry Pi из любой точки мира:
- SSH для командной строки
- VNC для графического рабочего стола
- Безопасное зашифрованное соединение
- Работает за любым роутером без настроек
- Доступно через красивый домен
Что дальше?
Теперь, когда у вас есть полный удалённый доступ, вы можете использовать Raspberry Pi для множества интересных проектов:
Домашний сервер
Установите Nextcloud для собственного облачного хранилища, Plex для медиасервера, или Pi-hole для блокировки рекламы во всей домашней сети.
Nextcloud →Умный дом
Настройте Home Assistant для управления всеми устройствами умного дома из одного интерфейса. Управляйте светом, температурой, камерами откуда угодно.
Home Assistant →Мониторинг и автоматизация
Используйте для мониторинга серверов, сбора метрик, автоматизации задач. Установите Grafana для красивых дашбордов или Node-RED для автоматизации.
Grafana →Обучение и эксперименты
Изучайте Linux, программирование, работу с сетями, базами данных. Теперь у вас есть личный сервер для экспериментов, доступный 24/7 откуда угодно.
Документация Raspberry Pi →