Skip to content

Latest commit

 

History

History
88 lines (50 loc) · 14.4 KB

homesite.md

File metadata and controls

88 lines (50 loc) · 14.4 KB

Web-сервер в домашней сети

Существует возможность создать публично доступный web-сайт, используя инфраструктуру домашней сети. Затраты на создание такого решения могут быть нулевыми, или быть близки к нулевым.

Провайдер услуг доступа в интернет выделяет динамический IP-адрес каждому из своих пользователей. Чаще всего этот адрес получает маршрутизатор. Для организации публичной доступа к компьютеру в домашней сети необходимо, чтобы маршрутизатор поддерживал функцию port forwarding, т.е. при поступлении запроса на входной порт маршрутизатора, пересылал запрос другому компьютеру в домашней сети, которые реализует функцию web-сервера.

Чтобы пользователи интернет могли получать постоянный доступ к компьютеру (маршрутизатору) у которого постоянно изменяется IP-адрес, необходимо задействовать инфраструктуру DDNS (Dynamic DNS), которая также должна поддерживаться маршрутизатором.

"Вишенка на торте" - создание бесплатного SSL-сертификата для web-сервера, например, используя сервис Let's Encrypt.

Переадрессация запросов на домашний компьютер

Начать нужно с включения переадрессации на домашнем маршрутизаторе. Для этого нужно зайти под учёной записью администратора (на маршрутизатор) и настроить правило port forwarding, т.к. переадрессацию входящего запроса. Такая настройка в управляющей консоли администратора может храниться в разделе "NAT-переадрессация" -> "Виртуальные серверы" (справедливо для некоторых моделей TP-Link).

В управляющей консоли домашних маршрутизаторов TP-Link поле "тип сервиса" означает символический идентификатор записи в реестре, которая создаётся лишь для удобства администратора в управлении устройством.

Заметим, что данная схема работает далеко не у всех провайдеров интернета. В частности, компания "МТС" выдаёт маршрутизатору IP-адрес внутренней сети, который не виден из глобального интернета. Для того, чтобы обеспечить маршрутизацию запросов на домашний роутер необходимо оплачивать дополнительную услугу.

DDNS - noip.com

Вторая часть задачи - обеспечить возможность переадрессации на динамически изменяемый IP-адрес маршрутизатора по некоторому символическому имени. Эту задачу можно решить используя Dynamic-DNS.

Часто подобная схема применяется для маршрутизаторов домашних сетей. При загрузке, или изменении локального IP-адреса, маршрутизатор отправляет на специализированный сервис свой IP-адрес и credentials. Имя учётной записи на DDNS может использоваться для формирования символического имени компьютера/маршрутизатора, например: sokoban.hopto.org. В случае, если сервис (DDNS) будет получать запросы на адрес связанный с учётной записью, он будет переадресовывать запросы на IP-адрес этого компьютера (маршрутизатора).

Один из наиболее известных сервисов DDNS, у которого есть бесплатный тарифный план: https://www.noip.com/. Компания-разработчик опубликовала открытый протокол, который поддерживают различные маршрутизаторы.

После создания учётной записи на сайте NoIP, необходимо активировать функционал привязки маршрутизатора к NoIP в маршрутизаторе и активировать его. В управляющей консоли маршрутизатора активация DDNS через NoIP осуществляется в разделе "Сеть" --> "DDNS" --> "Дополнительные настройки".

В управляющей консоли NoIP можно посмотреть IP-адрес маршрутизатора и дата последнего обновления IP-адреса. Это позволяет убедиться в том, что настройка DDNS выполнена корректно. Если в консоли NoIP есть подтверждение регистрации маршрутизатора, то когда сервер NoIP получит запрос на зарегистрированный адрес (например, sokoban.hopto.org), то этот запрос будет переадрессован на последний известный динамический IP-адрес маршрутизатора.

Следует заметить, что даже на бесплатном тарифе noip.com предоставляет один бесплатный SSL-сертификат. Управлять сертификатами можно в разделе "My Services -> SSL certificates". Сервис предоставляет 1 TrustCor Standard DV SSL Certificate, но в бесплатном тарифе бесплатный сертификат предоставляется только через 30 дней ожидания (!).

Бесплатный SSL-сертификат

Бесплатные сертификаты можно сгенерировать на Let's Encrypt.

Let’s Encrypt — это бесплатный, автоматизированный и открытый Центр сертификации (ЦС), работающий на благо общества. Это сервис, предоставляемый Исследовательской группой по безопасности Интернета (ISRG). Ознакомиться с ключевыми принципами Let’s Encrypt можно по ссылке.

Чтобы упростить управление сертификатами при использовании Let's Encrypt может быть использован certbot - специальный Tool, который обновляет бесплатные сертификаты каждые 60 дней. Оптимально подходит для случаев, когда уже существует http-сайт на 80 порту и его необходимо с минимальными усилиями перевести на https.

Отечественные сервисы для выдачи TLS-сертификатов.

Минцифры запустила на портале Госуслуг сервис выдачи отечественных SSL/TLS-сертификатов. Ключевая особенность - эти сертификаты являются доверенными только при использовании Яндекс.Браузер и Атом от VK.

Настройка Raspberry Pi, в качестве публичного web-сервера

В сети интернет есть множество инструкций по применению NoIP для RPi 3/4. Поисковая строка: "How to Install No-IP on Raspberry Pi".

Видео-инструкция Fireship: Raspberry Pi versus AWS // How to host your website on the RPi4

Использование виртуализации (VMware)

Для того, чтобы избежать засорения рабочей машины различными web-приложениями, прекрасно подходят средства виртуализации. Оптимальным для домашних проектов, кажется применение VMware с бесплатной некоммерческой лицензией.

Следует обратить внимание на тот факт, что настройки виртуальной машины можно изменять только если она была создана коммерческой версией VMware.

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

При настройке виртуальной машины следует выбрать сетевой режим (Hardware -> Network Adapter). Наиболее часто используются режимы "Network connection" NAT и Bridged.

Предположим, что хостовая машина (host) имеет IP-адрес 192.168.0.188. Выполнив команду ipconfig в ОС Windows, мы получим что-то типа:

Адаптер беспроводной локальной сети Беспроводная сеть 2:

   DNS-суффикс подключения . . . . . :
   Локальный IPv6-адрес канала . . . : fe80::280f:684b:f17e:bed2%13
   IPv4-адрес. . . . . . . . . . . . : 192.168.0.188
   Маска подсети . . . . . . . . . . : 255.255.255.0
   Основной шлюз. . . . . . . . . : 192.168.0.1

Когда мы запустим гостевую машину (guest) в режиме NAT, то эта машина получит свой уникальный IP-адрес, например, 192.168.213.128. Этот IP-адрес, чаще всего, находится в подсети, отличной от подсети хостовой машины. Таким образом, только хостовая машина будет видеть гостевую машину. Этот режим является оптимальным во время фазы подготовки виртуальной машины к эксплуатации.

В Linux рекомендуется установить набор утилит: sudo apt install net-tools. Получить IP-адрес виртуальной машины в Linux можно командой: sudo ifconfig -a

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

Для гостевой машины можно настроить статический IP-адрес:

  1. Пуск -> Параметры -> Сеть и Интернет -> Ethernet
  2. В левой панели выбрать "Ethernet", а в правой панели выбрать "Сеть"
  3. В появившейся форме "Параметры. Сеть" под пунктом "Параметры IP" выбрать кнопку "Редактировать"
  4. В модальном диалоге "Изменение параметров IP" выбрать пункт "Вручную"
  5. Активировать протокол IPv4
  6. В появившемся области параметров указать желаемый IP-адрес (например, 192.168.0.200), длину префикса подсети (24), шлюз (например, 192.168.0.1) и IP-адреса DNS-серверов. В качестве дополнительного DNS-сервера можно указать, например, 8.8.8.8 (Google Public DNS)

Для того, чтобы можно было увидеть машину из сети, необходимо разрешить сетевое обнаружение машины. Это можно сделать в "Параметрах -> Сеть и интернет". В разделе "Дополнительные сетевые параметры" есть ссылка "Центр управления сетями и общим доступом". Далее следует выбрать ссылку "Изменить дополнительные параметры общего доступа" и установить галку в пункте "Включить сетевое обнаружение" в разделе "Сетевое обнаружение". Для обеспечения доступа к приложению через конкретный порт, следует разрешить этот порт во встроенном Firewall операционной системы.