Желание задокументировать сделанную домашнюю автоматизацию со временем переросло в необходимость. Вопрос где хранить документацию? А почему бы и не на Дзене … Обязательно напишу что-то и про автономное водоснабжение, и про отопление, но много делалось «просто по-приколу». Допускаю что некоторые скажут «да зачем...», но карабкаются же некоторые люди в горы - хочется им. Так и мне, интересно же. Но сначала рутина — про связь, так как современная автоматизация не может быть без сетей и информационных каналов.
У многих в дополнение к квартире есть гаражи, дачи или дома в сельской местности, где есть что мониторить или есть престарелые родственники живущие отдельно которым иногда нужно помочь разобраться с их ИТ техникой. В этих случаях удобно сделать так чтобы сети этих локаций были доступны друг другу. Соответственно будет возможным использование общего сетевого хранилища, удалённое администрирование, печать и конечно же удалённый мониторинг технических средств автоматизации речь о которых будет идти в следующих статьях. Конечно же все локации должны быть связаны защищёнными т. е. шифрованными каналами связи, но пользователи и устройства (хосты) в сетях этих локаций ничего знать об этом не должны, и не надо им об этом знать. Конечно стоит также предусмотреть возможность подключения к этой объединённой домашней сети и авторизованным пользователям из Интернет для использования ресурсов того же сетевого хранилища или просто безопасного выхода в Интернет через домашнюю сеть (это следует делать если Вы пользуетесь WiFi в общественных местах).
Другими словами несколько локаций должны быть объединены в виртуальную частную сеть (VPN - virtual private network). Есть несколько технологий организации VPN, обзор их разнообразия не является темой этой статьи, скажу лишь что для поставленной задачи, по моему мнению, наиболее точно соответствует технология OpenVPN так как широко поддержана производителями устройств «из коробки» и к тому же имеет встроенные возможности маршрутизации, в то время как другие технологии это по сути туннели, пусть и с bash скриптами в комплекте для настройки пропуска трафика через туннель. Стоит также отметить что OpenVPN это общественный проект с открытым исходным кодом, доступна полная документация и хороший форум, а значит при наличии желания можно во всём разобраться самостоятельно. Также есть релизы OpenVPN сертифицированные в России для применения в местах определённых государственным регулятором как критически значимые для государства.
Выбор устройства которое станет центром поддержки VPN задача непростая. Конечно, сейчас многие домашние роутеры поддерживают функционал VPN, и даже несколько разновидностей, и даже среди них есть OpenVPN, но увы функционал OpenVPN в них урезанный. Из поставленных задач позволяет только доступ авторизованных пользователей из Интернет для использования локальных ресурсов и, иногда, безопасного выхода в Интернет. Возможность объединения сетей квартиры, дачи и ещё чего-то нет. Тут могут мне возразить: а как же Keenetics там же есть функционал VPN-клиента. Да есть, но если взять два таких клиента то эти клиенты «не видят» сетей друг друга, по крайней мере пока. Может в будущем что-то «допилят». Конечно можно перепрошить роутер Linux прошивкой такой как OpenWRT, DD-WRT, CyberWRT и т. д., или другое отдельное Linux устройство, накатить пакет OpenVPN и использовать возможности OpenVPN по полной. Но такой вариант всё-таки явно не ориентирован на обычного пользователя, каким являюсь и я тоже. Кроме того, в нём нет тех «плюшек» которые встречаются в реализациях OpenVPN в готовых устройствах: web-интерфейс для администрирования пользователей, отображения их активности, сохранения и отображения истории активности с возможностью её экспорта. В 2018 году я случайно остановил свой выбор на NAS Synology DS218j которое я приобрёл ранее, не предполагая использовать его как центр поддержки VPN, но установив пакет VPN понял что вряд-ли я найду что-то «из коробки» что подходило бы лучше. Устройство умеет всё то что обычно умеют роутеры, в части поддержки VPN, а кроме того есть возможность редактирования конфигурационных файлов. Тем более что редактировать нужно совсем чуть-чуть, только то что касается маршрутизации внутри VPN. Все остальные «плюшки» присутствуют.
Выбор локации для размещения центра поддержки VPN из возможных локаций определяется просто - даёт ли провайдер «белый» IP адрес или нет, пусть даже и за дополнительную плату. А если есть возможность получить от провайдера статический белый IP то ещё лучше. Впрочем статический белый IP не обязательно, так как многие производители предоставляют «пожизненный» DDNS сервис для своих устройств. Не исключением является и Synology. Для работы OpenVPN следует подписаться на этот сервис и включить DDNS, если у Вас не статический белый IP. На роутере, обеспечивающем доступ в интернет в этой локации, нужно зафиксировать IP выделяемый роутером для NAS Synology в настройках DHCP роутера или назначить сетевые параметры NAS на самом NAS вручную. На роутере сконфигурировать проброс порта 1194 TCP (да, TCP это не ошибка) на IP адрес NAS или на роутере включить UpnP и после конфигурирования пакета OpenVPN запустить «конфигурацию роутера» в сетевых настройках NAS. Второй вариант предпочтительнее так как создатели Synology постарались и Вы сможете видеть целостную картину с автоматическим тестированием того что проброс портов произошёл успешно.
Итак пакет VPN установлен, порты проброшены — добавляем пользователей. Тут следует учесть то, что если вы планируете пользоваться своей VPN одновременно с ноутбука и со смартфона, то нужно создать аккаунты для обоих этих устройств. Роутеры удалённых локаций это тоже пользователи VPN. Одновременное подключение с одинаковыми реквизитами возможно в OpenVPN, но лучше этого не делать. Пользователи добавляются как обычно, единственный совет — отключите пользователя по-умолчанию admin создав вместо него учётную запись с теми же правами но другим именем. Так будет спокойнее — боты получат отлуп сразу и пойдут дальше, не будут долбить подбором паролей. Далее идём в настройки пакета VPN и настраиваем его. Первым делом отмечаем пользователей которым будет разрешено пользоваться OpenVPN. Далее идем на страничку настроек собственно VPN включаем OpenVPN сервер. IP выбираем в одном из диапазонов частных сетей. По умолчанию предлагает 10.10.10.1, лучше немного изменить не очень хорошая практика оставлять умолчания. Порт 1194 можете оставить, а можете поменять на какой-то другой, главное чтобы он не был заблокирован у провайдера и не совпал с портом используемым приложениями которыми вы пользуетесь. Для начала можно оставить как есть.
Следующая настройка Protocol. Нативным протоколом для OpenVPN является UDP, но на практике лучше работает TCP, так как меньше подвержен сбоям на этапе установления соединения. Шифрование выбираем распространённое и не меньше 256 бит, так как некоторые клиентские программы могут считать шифрование меньше 256-битного устаревшим и не поддерживать его. Скажем AES-256-CBC вполне нормальный выбор, без фанатизма. Аутентификация SHA1 официально устаревшая, её выбирать не стоит, следующая SHA256, выбираем её.
Следующая настройка сжатие в VPN канале. Много существует споров вокруг LZO сжатия, а в данном случае речь именно про него, мол увеличивает задержку и потребляет ресурсы, но я его всё же оставил. Примерно 5..10% эффективность сжатия не лишние. Следующая настройка «Позволять или нет доступ к LAN сервера». Ответ очевиден — да, ради этого всё и затевается. Далее настройка ipv6 это полный отрыв от реальности — пользовался бы я VPN если бы был ipv6? Конечно же нет! Меня вполне устраивал SixXS + Miredo (Teredo), но после sunsetting SixXS в 2017 году и ужесточения требований / ограничений другими туннельными провайдерами ipv6 другого выбора как VPN просто не оставалось. Очень жаль что ivp6 и маржинальность провайдеров оказались несовместимыми понятиями.
Итак, базовая конфигурация OpenVPN закончена, экспортируем конфигурацию. Конфигурация это архив в котором три файла, нам нужен только VPNConfig.ovpn. В нём при помощи текстового редактора заменяем YOUR_SERVER_IP на ваше DDNS доменное имя или ваш статический белый IP. Файл VPNConfig.ovpn отправляем себе на смартфон, на смартфоне устанавливаем клиента OpenVPN и «скармливаем» ему этот файл. Пытаемся зайти на сервер из интернета, то есть выключив Wi-Fi на смартфоне. Должно получиться.
Теперь о подключении сетей других локаций. Для роутеров других локаций мы уже создали пользователей OpenVPN. Теперь надо настроить на сервере OpenVPN, то есть в Synology, те настройки которые отсутствуют в WEB интерфейсе. Для этого разрешаем доступ к Synology по SSH в разделе Terminal & SNMP настроек Synology. И заходим на Synology клиентом SSH например Putty или Tera Term. Для внесения изменения нужно повысить привилегии sudo -i.
Oбщие настройки OpenVPN тут
/usr/syno/etc/packages/VPNCenter/openvpn/openvpn.conf
У Synology только vi редактор есть из коробки, пользоваться им очень просто vi путь/имя, редактирование жмём i, выйти из редактирования ESC, выйти с сохранением ESC :wq без сохранения ESC :q! Вот и всё что я за много лет использования vi смог запомнить. Но больше и не требуется!
Будьте внимательны в написании имени файла, так как если такого файла нет, то vi его создаст, а Вы будете сильно удивлены увидев пустой файл.
В настройках по-умолчанию topology net30, для подключения сетей надо изменить на topology subnet
Прописываем директорию в которой будут храниться конфигурационные файлы клиентов
client-cofig-dir /usr/syno/etc/packages/VPNCenter/openvpn/ccd
Прописываем сети которые клиент представляет, если клиент это роутер в какой-то удалённой локации, например:
route 192.168.99.0 255.255.255.0 10.10.10.99 # не забываем оставить комментарий что это за локация
Где первый IP и маска это сеть удалённой локации, а второй IP это уникальный IP клиента в VPN.
По умолчанию IP клиента в VPN динамический, но не зря же мы создали директорию для конфигураций клиентов.
Разрешаем клиентам видеть друг друга
client-to-client
В этом файле также можно повысить или понизить уровень детализации логирования (вербозинга). Это может быть полезно, иногда, но об этом потом, в конце.
В директории конфигураций клиентов создаём файлики с конфигурациями клиентов. Имя файла это просто имя клиента и больше ничего.
Если это не роутер за которым сеть, а простой пользователь, то файл конфигурации выглядит так:
#---------------------------------------------------
ifconfig-push 10.10.10.15 255.255.255.0 # уникальный ip клиента в сети VPN
Если клиент это роутер за которым сеть, то файл конфигурации выглядит примерно так
#---------------------------------------------------
ifconfig-push 10.10.10.3 255.255.255.0 # уникальный ip клиента в сети VPN
iroute 192.168.15.0 255.255.255.0 # это сеть удалённой локации
Также можно направлять команды клиентам, например:
push "redirect-gateway def1" # если интерфейс VPN должен стать у клиента шлюзом по-умолчанию
push "dhcp-option DNS 192.168.100.1" # подменить DNS на клиенте
push "dhcp-option DNS 8.8.8.8" # добавить альтернативный DNS на клиенте
возможно не весь трафик клиент должен пропускать через VPN интерфейс, а только на определённые сети, тогда вместо push "redirect-gateway def1" пишем например
push "route 192.168.1.0 255.255.255.0"
Настройки выполнены, перезапускаем сервис service openvpn restart.
Про настройку клиентов много написано, повторяться не буду. Скажу лишь что количество удалённых локаций у меня одно время превышало 20. Трафик небольшой — сбор данных иудалённое конфигурирование, аDS218j с ним неплохо стправлялся. Сейчас на DS218j осталось только моё личное — всё что связано с работой переведено на сервер OpenVPN помощнее в дебрях ИТ инфраструктуры предприятия, количество локаций достигло 55, это производственные линии и вспомогательное оборудование, и простых клиентов около 10-ти.
В качестве роутеров в удалённых локациях используются прошитые OpenWRT роутеры TP-Link WR841 или WR842. После 2-х лет использования у себя в доме такого же клиента захотелось чего-то новенького, с лучшим покрытие Wi-Fi, в том числе 5ГГц диапазона. Был приобретён TP-Link Archer C6u который можно перепрошить на OpenWRT. Специально была выбрана такая модель потому что TP-Link WR842 на стоковой прошивке плохо дружил LTE модемом RNDIS, отвалы были каждые 2..3 дня. На прошивкеOpenWRT работал стабильно. К сожалению TP-Link Archer C6u в стоковой порошивке функционала OpenVPN клиент не имеет, но с RNDIS модемом стоковая прошивка работает стабильно. В целом интерфейс мне понравился и я решил не перепрошивать его. Роутер TP-Link WR842 стал просто клиентомOpenVPN в домовладении и перекочевал в баню, где заодно раздаёт интернет. На нём же NTP и Mosquitto. Его конфиг совсем простой:
Соответственно, на TP-Link Archer C6u добавлены маршруты на него для доступа к сетям в других локациях по VPN.
В мире информационной безопасности так быстро всё меняется что вполне возможно Вы при настройке столкнётесь с несовместимостью версий OpenVPN клиента и сервера. Желательно чтобы версии отличались не более чем на 1 во второй цифре. Например 2.4.2 и 2.5.9. Если более, то это существенно уменьшает шансы на успех. Может быть несовместимость TLS различных версий (1.1 — 1.3) или версий библиотек TLS (wolfSSL, MBEDTLS, OpenSSL) между собой. Полезно обратить внимание на эту таблицу.
Крайне желательно чтобы на вашем OpenWRT клиенте не присутствовали одновременно несколько библиотек TLS. Это может привести к нестабильности и просто занимает память. Желательно, но не обязательно, чтобы клиент OpenVPN использовал туже библиотеку TLS что и сервер OpenVPN. Напоминаю, что сейчас можно онлайн быстро создать кастомную прошивку с желаемым набором пакетов, в том числе и желаемой библиотекой TLS непосредственно на сайте OpenWRT. Для минимизации времени установления VPN соединения лучше не использовать упакованные реквизиты (pfx) это не сильно ухудшит вашу информационную безопасность, но упакованные реквизиты требует установленную утилиту для распаковки, а это память. С этой же целью, минимизации времени установления VPN соединения, в OpenVPN есть возможностьограничить тип шифрования используюемого на этапе установления соединения (handshake) одним единственно возможным.
Успехов!
В следующей публикации я раскажу о том что меня угораздило купить дом точно посередине белого пятна карты покрытия 3G,4G всех операторов и как я смог это победить.