13. Доступ извне. Практика



    В предыдущем материале были выбраны основные требования для организации удалённого доступа к домашнему серверу Home Assistant. В этой статье рассмотрим практические решения этих требований.  

Если вы новичок, то перед прочтением рекомендуется ознакомиться со следующей статьёй:

Cloudflare — это сеть серверов по всему миру, к которой люди подключают свои сайты, чтобы увеличить скорость их загрузки и защитить от DDoS-атак. Также при помощи этого сервиса можно управлять DNS-записями на домене и перевести сайт на HTTPS. У них есть бесплатный тариф и несколько платных. В зависимости от тарифа, уровень защиты и возможности по ускорению сайта отличаются.

Nabu Casa - облачный проект самих разработчиков Home Assistant. Сервис для организации подключения к домашнему серверу с помощью уже встроенного в ХА механизма. 


Оба сервиса позволяют делать следующие вещи:

-  Шифровать трафик на основе сертификатов. Подключение на основе сертификатов ещё называют безопасным, или HTTPS.

- Привязать  настоящий айпи к доменному имени.

- Создать виртуальный "туннель" для доменного имени. С одной стороны которого, на входе будет стоять айпи адрес облачного сервиса(именно он будет виден всему интернету), а с другой - настоящий айпи нашего раутера. Тем самым этот сервис являет собой подобие использование абонентского ящика для обычной почты, вместо указания реального адреса.

- Реализация защитных функций от внешних атак.

В чём же различие между этими сервисами и какой выбрать? Выбор - личное дело каждого, а про разницу в двух словах можно сказать следующее:

    Набу каса создана специально под нужды хоум ассистанта. Этот сервис платный, с первым месяцем пробного периода. На 2022 год ежемесячный абонемент стоит 5$, деньги идут на развитие проекта Home Assistant. Зарегистрировались, заплатили, внесли имя пользователя и пароль в настройках сервера и на этом всё.
    Клаудфлэр многопрофильный сервис с максимально гибкими настройками. Разные опции включаются на разных тарифных планах, но есть и бесплатные возможности в ограниченном количестве.
Дополнительно ко всему, этот сервис позволяет кэшировать у себя часть данных сайта, на который пытались зайти. Тем самым ускоряя его загрузку (оставляет на своих серверах копии элементов страницы, чтобы не подгружать их снова).
Так же доступен защитный сетевой экран (фаервол). В бесплатной версии возможность настройки до 5 правил. Для начала нам хватит и одного - блокировать весь входящий трафик, который не из списка интернет провайдеров. Ограничивая доступ по стране мы существенно снижаем возможность взлома, без нагрузки на своё сетевое оборудование и сам сервер.

    Из вышесказанного понятно что пользоваться клаудфлэр экономически выгоднее. Именно его неофициальное дополнение и будем использовать.

    Во первых надо обзавестись собственным доменом первого уровня. И чтобы была возможность поменять настройки адресации этого домена (NS record). На момент написания этого материала есть как минимум один регистратор, предлагающий домен второго уровня бесплатно на год.
Так что заходим на freeneom.com , регистрируемся и оформляем домен. 

*UPD
Однако стоит помнить про бесплатный сыр и мышеловку. Уже меньше через месяц после выхода этой статьи, появилась информация о прекращении поддержки новых доменов первого уровня из тех зон, которые этот регистратор раздаёт бесплатно. Однако попытка не пытка.

(у регистратора namecheap.com можно купить домен в индийской зоне co.in за 29.08 $ на 10 лет) 


После приобретения домена необходимо зарегистрироваться на cloudflare.com и добавить его.




Когда сервис распознает что домен есть, но он не может ничего с ним сделать, то предложит перенастроить его NS записи на свои. Это нужно сделать вручную.
Заходим в настройки записей домена и ставим те NS записи, которые были указаны на клаудфлэр.

Завершаем настройки и ждём e-mail о подтверждении и активации домена на клаудфлэр.

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

http: use_x_forwarded_for: true trusted_proxies: - 172.30.33.0/24

Убеждаемся, глядя на зелёную галочку, что текст файла остался без ошибок и сохраняемся.
Теперь необходимо установить репозиторий дополнения. Заходим в настройки ХА -> дополнения -> магазин дополнений -> добавить репозитории. Добавляем репозиторий по ссылке:
https://github.com/brenner-tobias/ha-addons
Если дополнение не появится в списке установленных, то просто обновляем страницу. Теперь его можно установить.


Важно!!!
На этом этапе отключаем автозагрузку дополнения и пока что не запускаем его.
Теперь можно перезапустить сервер для применения изменений.

После загрузки системы заходим в конфигурацию установленного дополнения и в строке external homeassistant hostname указываем имя приобретённого домена. Строку Cloudflare Tunnel Name можно оставить без изменений или исправить на своё название (только латинскими буквами).


Возвращаемся на главный экран дополнения, включаем все настройки и запускаем его. После чего переходим на вкладку "журнал". Нас интересует строка с адресом, по которой активируется туннель между домашним сервером Home Assistant и сервисами Cloudflare. Копируем адрес, заходим на него из новой вкладки и отметив на страничке свой домен нажимаем Authorize.

Можно было бы сказать что на этом всё. Но лучше добавить последний штрих, в качестве вишенки на торте.

На своём портале в Cloudflare открываем настройки домена -> безопасность -> фаервол приложений и создаём новое правило

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

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

Нажимаем на Edit expression и вставляем весь этот код вместо того, что написано по умолчанию:
(http.host eq "chto-to-tam.com" and not ip.geoip.asnum in {12400 1680 8551 378 12849 198949 6810 12491 47956 8867 25003 25125 42925 50463 202940 30866 13150 35091 16116 44709 20598 20645 208905 48851 21450 199270 35758 199391 21350 8948 51825 210560 212616 61102 25046 21174 41714 60636 210008 206446 43181 29165 35435 9116 20800 20623 5486 3288 198484 204814 5540 213038 200478 56596 8203 31391 43842 204257 213176 39159 13035 47962 35532 201857 208611 34380 13074 42254 42475 16370 16158 61149 42316 58182 25052 49157 206614 50365 49484 50079 15526 205209 201415 201076 60886 201660 212870 200433 28783 25565 12619 199267 21486 213256 13240 21363 12736 44282 49391 43514 204763 41923 50237 50440 50454 39343 203124 15823 15976 205564 43381 205870 16061 35560 35553 57721 57731 206056 61365 8738 8894 8958 9071 12802 207007 35243 35142 12988 202597 35016 13073 198114 34935 12517 209028 200742 209750 13093 209876 33802 210550 211329 30744 21145 29410 29149 39213 25237 203110 202356 12753 35392 49771 42994 56804 44060 44435 44576 44669 44846 203077 47776 47961 48068 49069 49456 49501 49794 50995 205650 56839 57666 207360 197797 197819 207591 211163 212307 198986 212644 212927 200309 31162 201156 34852 201833 202102 202122 41346 41927 43165 43194 43438 211681 211518 29585 198773 211236 31092 44367 210515 21042 31417 31578 210371 210290 33914 209514 209472 208666 198425 201073 208465 203276 43423 34886 34919 20841 207605 197538 197012 207106 206531 59648 35438 206106 57862 57035 56914 51902 51651 202769 205577 51385 202001 203009 50865 50744 39274 204831 39768 41116 202369 43739 41394 50318 50081 50006 41924 44427 202320 42243 49308 49076 47770 47766 42647 42793 47665 15643 43871 213079 213055 212719 212527 199989 212466 212383 212361 212117 47461 211824 211802 9117 132475 13264 15686 15708 16240 196769 196828 197210 198010 198087 198427 198482 198893 199747 200495 201043 202145 204078 204395 204528 205203 205551 205941 206020 206400 206650 206875 206935 206950 207052 207260 207285 207331 207444 207521 207667 208088 208362 208581 209443 209753 210455 21133 211894 211923 212612 212937 213225 213232 213284 25078 28799 28833 31190 33952 34105 34459 34583 34598 34825 35541 35786 35812 38992 39076 39158 41304 41857 42111 42384 43597 43945 44150 44559 44887 4516 47135 47177 47256 47573 47779 47997 48300 49716 50549 50580 51123 51287 51304 51512 51587 51617 5585 56378 57259 57727 58018 58268 58738 59422 59651 60960 8584 15169 396982 16550})
Не забываем отредактировать указанный домен на свой.

Здесь перечислены регистрационные номера IL провайдеров интернета, а так же 2 номера Google для будущей настройки доступа из системы Google Home и возможности управления голосом. Желающие пользоваться Яндекс Алисой или сервисами от Amazon, могут добавить ASN этих сервисов в список самостоятельно.

Теперь можно заходить на свой адрес https://chego-to-tam.com и добро пожаловать на страничку авторизации ХА.

Есть ли минусы у подобного решения и стоит ли его использовать?
Про минусы можно сделать выводы после прочтения этой статьи на Хабре. А выводы, иметь или не иметь, каждый делает сам.

Следующая статья: Координаторы Zigbee.

Комментарии