[ad_1]
Время от времени мне нравится позволять Интернету управлять вещами в моем доме. Иногда это позволяет прямой трансляции включать и выключать свет, а иногда это вождение радиоуправляемой машины по моей гостиной. При создании этих проектов я обычно использую Raspberry Pi для прослушивания веб-трафика и выполнения события, когда кто-то посещает сайт.
Я мог бы дать людям свой IP-адрес и перенаправить порт моего маршрутизатора на мой Raspberry Pi, но я бы предпочел, чтобы мой IP был приватным, а моя сеть была максимально безопасной. Мы можем получить лучшее из обоих миров с помощью туннеля SSH, nginx и виртуальной машины в облаке. Все это создает обратный прокси-сервер, где посетители попадают на общедоступный IP-адрес, который не принадлежит вашей домашней сети, и направляются на Pi, который находится в вашей локальной сети.
Если вы хотите создать что-то интерактивное с вашим Pi, сохраняя при этом максимальную безопасность, вот как это сделать.
Что вам понадобится для этого проекта
- Малиновый Пи 4 или Raspberry Pi 3 с адаптером питания
- Карта microSD 8 ГБ (или больше) с ОС Raspberry Pi. Смотрите наш список лучшие карты microSD для Raspberry Pi.
- Учетная запись Google Cloud Platform и инструмент командной строки gcloud или другого облачного провайдера, с которым вы знакомы. Обратите внимание, что входящий трафик будет стоить денег, которые в нашем случае составляют 5 долларов в месяц.
Как разместить общедоступный веб-сайт на вашем домашнем Raspberry Pi
Прежде чем начать, убедитесь, что у вас настроена ОС Raspberry Pi. Если вы еще этого не сделали, ознакомьтесь с нашей статьей о том, как настроить Raspberry Pi в первый раз или как сделать безголовая установка Raspberry Pi (без клавиатуры и экрана).
1. Установить gitчто позволит нам клонировать код этого проекта.
sudo apt-get update && sudo apt-get install -y git
2. Клонировать репозиторий с примером кода. Этот код обеспечивает связь с датчиком и настраивает простой сервер для мониторинга в вашей домашней сети.
cd ~/
git clone https://github.com/rydercalmdown/pi_home_reverse_proxy.git
3. Запустите команду установки после спуска в хранилище. Это установит все необходимые компоненты SSH, а также nginx, простой сервер, который мы будем использовать в качестве примера.
cd pi_home_reverse_proxy
make install-pi
4. Создайте пару открытого/закрытого ключей SSH. Закрытый ключ останется на Raspberry Pi и будет использоваться вместе с открытым ключом для подключения к нашей облачной виртуальной машине.
ssh-keygen
# press enter to accept all default settings
5. Скопируйте открытый ключ SSH на потом. Это понадобится нам при настройке нашей виртуальной машины в облаке.
/home/pi/.ssh/id_rsa.pub
# Copy the results
6. Посетите облачную консоль Google и перейдите на страницу Экземпляры ВМ.
7. Нажмите «Создать экземпляр», чтобы создать новую виртуальную машину..
8. Выберите запоминающееся имя для вашего экземпляра. Я называю свой «домашний обратный прокси».
9. Выберите желаемый регион и зону. Это не имеет большого значения, но хорошо выбрать что-то близкое к вам для низкой задержки.
10. В конфигурации машины выберите «N1» для серии и f1-micro для типа машины. Это даст нам самую низкую ежемесячную стоимость, около 5 долларов США в месяц.
11. Прокрутите вниз до раздела «Загрузочный диск». и слизнуть кнопку изменения. Установите операционную систему на Ubuntu и версию на «Ubuntu 20.04 LTS», оставьте все остальное без изменений и нажмите «Выбрать».
12. Прокрутите вниз до «Брандмауэр» и установите флажки «Разрешить HTTP-трафик» и «Разрешить HTTPS-трафик».
13. Прокрутите вниз экземпляра и нажмите «Создать».
14. Как только машина заработает, щелкните раскрывающийся список рядом с SSH, чтобы получить команду SSH. Я рекомендую использовать «Просмотр команды gcloud». Вставьте эту команду в свой терминал, чтобы подключиться по SSH к вашей облачной виртуальной машине..
15. После подключения к виртуальной машине установите nginx с помощью следующих команд.
sudo apt-get update
sudo apt-get install -y nginx
16. Проверьте, работает ли nginx. выполнив следующую команду. Вы также можете посетить внешний IP-адрес в своем браузере, указанный рядом с вашей виртуальной машиной в консоли Google Cloud. При посещении вы должны увидеть страницу приветствия nginx.
sudo service nginx status
# Ctrl + C then enter to exit
# It should show “active (running)” in green if all is well
17. Обновите конфигурацию по умолчанию с помощью пользовательской конфигурации обратного прокси-сервера.. Это говорит nginx перенаправлять весь трафик, который он получает, на порт на вашем компьютере.
cd /etc/nginx/sites-enabled
sudo rm default
sudo touch default
sudo nano default
# copy in the code below
Эта скорость кода ограничивает количество запросов до 5 в секунду, чтобы не перегружать pi во время интерактивных проектов. Если вы хотите принять больше, просто увеличьте число или удалите все строки, начинающиеся с limit_req, из файла без ограничений.
limit_req_zone $binary_remote_addr zone=basic:10m rate=5r/s;
server {
listen 80;
location / {
limit_req zone=basic;
proxy_pass http://0.0.0.0:5000;
}
}
18. Перезапустите службу nginx. и снова посетите внешний IP-адрес виртуальной машины. Вам должна быть представлена страница «502 Bad Gateway», если все идет правильно.
sudo service nginx restart
19. Используя следующую команду, создать пользователя для пи к SSH на виртуальной машине.
sudo useradd -m -p raspberry -s /bin/bash piconnect
20. Создайте каталог SSH и авторизованные файлы ключей и скопируйте открытый ключ, который вы скопировали с вашего Raspberry Pi.
sudo mkdir /home/piconnect/.ssh/
sudo touch /home/piconnect/.ssh/authorized_keys
sudo nano /home/piconnect/.ssh/authorized_keys
# copy in the public key you copied from your raspberry pi
21. Вернемся к Raspberry Pi. отредактируйте файл install_remote_connection.sh чтобы включить IP-адрес вашего удаленного сервера.
cd ~/pi_home_reverse_proxy
sudo nano scripts/establish_remote_connection.sh
# change REMOTE_HOST=your_remote_ip_address to the external IP you got from the Google Cloud Platform console
22. Запустите команду make connect чтобы установить SSH-соединение между вашим Raspberry Pi и вашим виртуальным сервером.
make connect
23. Посетите IP-адрес вашей виртуальной машины чтобы увидеть контент, работающий на Raspberry Pi, который обслуживается удаленно, а не на вашем домашнем IP-адресе.
И вот оно! Вы передаете контент с вашего Raspberry Pi с IP-адреса Google Cloud через туннель SSH. Я использую эту настройку только время от времени, но для более постоянной настройки я бы рекомендовал подключить домен и защитить его с помощью LetsEncrypt на стороне виртуальной машины.
[ad_2]