Мой выбор пал на регистратор Neoline G-Tech X53, и тому было несколько причин:
- он укомплектован двумя камерами, одна из которых даёт настоящую FullHD картинку,
- он спроектирован специально для скрытной установки,
- он полностью управляется по WiFi через приложение на смартфоне, что немаловажно в контексте данной статьи, и кроме прочего это даёт возможность по-настоящему скрытной установки без потребности периодически лазить или доставать блок (например, чтобы скопировать запись с флешки).
Затем, как это часто бывает, аппетит пришёл во время еды. После установки регистратора в машину я оценил его удобство, вошёл во вкус, и мне захотелось, чтобы доступ к его записям у меня был не только рядом с машиной, где ловится сигнал его WiFi, а вообще везде. Ну, или хотя бы дома, для начала.
Конечно, в природе существуют модели регистраторов, которые по команде сливают записи в облако, но они привязывают пользователя к этому облаку и вынуждают платить за него, а это не мой вариант. Кроме того, моя хотелка хорошо накладывалась на планы установки в машину WiFi роутера с модемом, так что задача выглядела вполне выполнимой.
Правда, достаточно быстро выяснилось, что у регистратора нет документированного API и доступ к нему возможно получить только при помощи родного приложения для смартфона. Приложение в свою очередь оказалось очень прихотливым — оно работает только тогда, когда телефон подключен к WiFi регистратора.
То есть мне предстояло понять, чего хочет приложение от WiFi, и заставить его «увидеть» регистратор, расположенный совсем в другом месте, с решением всех сопутствующих технических загвоздок — в общем, всё, как я люблю.
В качестве маршрутизатора, раздающего в машине интернет через WiFi, я использовал Mikrotik RBmAP2nD (mAP) с модемом Huawei e3372h (если вы знаете другие бюджетные варианты, на которых можно реализовать конфигурации, описанные ниже — напишите в комментариях). Поскольку регистратор умеет только раздавать свой WiFi и не умеет подключаться к уже имеющейся AP, пришлось настраивать AP-Client, который должен к нему подключаться. И тут достаточно быстро выяснилось, что работа Mikrotik в качестве одновременно AP и AP-Client (на slave-интерфейсе) приводит к нестабильной раздаче WiFi, поэтому было решено поставить в пару к основному роутеру ещё один — Mikrotik RBmAPL-2nD (mAP lite).
Обманываем приложение
Для начала я заставил приложение работать с регистратором через совершенно другую сеть WiFi, работающую в той же машине. Попутно удалось ответить на вопросы — как приложение опознаёт сеть регистратора и как можно его обмануть. Также попутно удалось достичь ещё бОльшего удобства — теперь для работы с регистратором в машине не нужно переключаться на его WiFi, на котором нет интернета.
Не буду подробно описывать десятки экспериментов, в ходе которых я пришёл к рабочему решению, просто опишу это решение. Итак, что нужно, чтобы приложение опознало WiFi регистратора:
- SSID должен иметь вид "G-Tech X5X-120...", где вместо последних точек — произвольные цифры (маленькие буквы) в шестнадцатеричной системе счисления. Для примера, я устанавливал "G-Tech X5X-120aaa" и так далее. Возможно, вместо «120» тоже можно ставить что-то своё, я не пробовал.
- Адрес клиента должен быть получен по DHCP, должен находиться в подсети 192.168.100.0/24, адрес сервера (регистратора) = 192.168.100.1.
Остальное не принципиально. Многое другое не пробовал, но точно знаю, что:
- MAC-адрес AP и сервера не имеют значения.
- Если на пути следования трафика есть участки с пониженным MTU (например, тоннели), связь работает нормально.
- TCP Window достаточно широкое, чтобы скачивание записей не замедлялось при пингах даже под 300мс и выше.
Итак, что в сухом остатке?
- Приложение хочет иметь адрес в сети 192.168.100.0/24 и соединяться с адресом 192.168.100.1.
- У регистратора адрес тоже 192.168.100.1 и он хочет, чтобы клиент был в сети 192.168.100.0/24 (на другие у него просто нет маршрутов).
Это не поменять, но мы ведь хотим научиться разносить приложение и регистратор. Значит надо присвоить роутеру, раздающему WiFi, адрес 192.168.100.1, а для решения возникающих проблем с маршрутизацией трафика надо ввести стыковочную подсеть и добавить немного сетевой магии. Например, так:
Описание:
- Приложение работает на смартфоне, который подключен к маршрутизатору R1. Смартфон получает адрес по DHCP, в нашем примере это 192.168.100.100.
- IP-адрес R1 на интерфейсе WiFi — 192.168.100.1 (как хочет приложение), на Ethernet-интерфейсе — 192.168.99.1 (это стыковочная подсеть).
- IP-адрес R2 на Ethernet-интерфейсе — 192.168.99.2, на WiFi интерфейсе — получается по DHCP от регистратора, в нашем примере это 192.168.100.150.
- Каждый маршрутизатор выполняет DNAT на входе и SNAT на выходе, таким образом пакеты в каждой подсети имеют адреса источника и назначения, совпадающие с адресами граничных маршрутизаторов этой сети.
Как происходит соединение:
- Приложение убеждается в том, что оно подключено к WiFi регистратора, и инициирует соединение с адресом 192.168.100.1, полагая, что это адрес регистратора.
- R1 принимает запрос на соединение, выполняя на входящем интерфейсе DNAT с подменой адреса назначения на 192.168.99.2, а на исходящем интерфейсе — SNAT с подменой адреса источника на 192.168.99.1.
- R2 принимает запрос на соединение, выполняя на входящем интерфейсе DNAT с подменой адреса назначения на 192.168.100.1, а на исходящем интерфейсе — masquerade с подменой адреса источника на адрес, полученный по DHCP от регистратора.
- Регистратор принимает и обрабатывает запрос на соединение, пришедший от адреса, который он ранее выдал по DHCP. Что и требовалось.
У вдумчивого читателя уже возник вопрос: для какого именно трафика делать перенаправление? Начав со «всего трафика, кроме ssh» и включив логирование, я дознался, что достаточно перенаправлять tcp-порты 7777, 7778 и 7779. Ничего другого приложению для работы с регистратором не нужно.
Пропускаем трафик через интернет
Научившись обманывать приложение, я устранил самое сложное препятствие на пути к основной цели — организации доступа к записям с любой точки интернета. Но чтобы приложение, запущенное на телефоне в этой «любой точке», могло соединиться с регистратором, для его «обмана» нужно выполнить все вышеозначенные условия, а это накладывает некоторые ограничения. Впрочем, по одному адресу записи бывают нужны особенно часто — это дома. Вот с домашнего роутера и начнём.
Дома, как вы наверное уже догадались, у меня тоже стоит Mikrotik. У внешнего маршрутизатора — «белый» ip-адрес, и я этим воспользовался, чтобы создать L2TP-тоннель между автомобильным и домашним роутерами и организовать между ними ещё одну стыковочную подсеть. В схему, которую я описал выше, добавился ещё один маршрутизатор, и теперь она упрощённо выглядит так:
Описание:
- Приложение работает на смартфоне, который подключен к домашнему маршрутизатору R0. Смартфон получает адрес по DHCP, в нашем примере это 192.168.100.100.
- IP-адрес R0 на интерфейсе WiFi — 192.168.100.1 (как хочет приложение), на L2TP-интерфейсе — 192.168.98.1 (стыковочная подсеть 0).
- IP-адрес R1 на интерфейсе L2TP — 192.168.98.2, на Ethernet-интерфейсе — 192.168.99.1 (стыковочная подсеть 1).
- IP-адрес R2 на Ethernet-интерфейсе — 192.168.99.2, на WiFi интерфейсе — получается по DHCP от регистратора, в нашем примере это 192.168.100.150.
- Каждый маршрутизатор выполняет DNAT на входе и SNAT на выходе, таким образом пакеты в каждой подсети имеют адреса источника и назначения, совпадающие с адресами граничных маршрутизаторов этой сети.
Как происходит соединение:
- Приложение убеждается в том, что оно подключено к WiFi регистратора, и инициирует соединение с адресом 192.168.100.1, полагая, что это адрес регистратора.
- R0 принимает запрос на соединение, выполняя на входящем интерфейсе DNAT с подменой адреса назначения на 192.168.98.2, а на исходящем интерфейсе — SNAT с подменой адреса источника на 192.168.98.1.
- R1 принимает запрос на соединение, выполняя на входящем интерфейсе DNAT с подменой адреса назначения на 192.168.99.2, а на исходящем интерфейсе — SNAT с подменой адреса источника на 192.168.99.1.
- R2 принимает запрос на соединение, выполняя на входящем интерфейсе DNAT с подменой адреса назначения на 192.168.100.1, а на исходящем интерфейсе — masquerade с подменой адреса источника на адрес, полученный по DHCP от регистратора.
- Регистратор принимает и обрабатывает запрос на соединение, пришедший от адреса, который он ранее выдал по DHCP. Что и требовалось.
А откуда берём питание?
Маршрутизаторы и модем потребляют немного, но достаточно, чтобы за 3-4 дня высосать автомобильный аккумулятор в ноль. Поэтому включать их лучше по требованию. А чтобы это вписывалось в концепцию «доступа в произвольный момент времени», я воспользовался тем фактом, что установленная в моей машине сигнализация Starline A96 имеет кроме прочего GSM-модуль, запрограммировал включение доп.канала по команде с пульта или приложения смартфона и запитал маршрутизатор mAP с доп.канала, а mAP lite — через PoE с первого. Рассказывать об этом здесь я подробно не буду, всё это легко гуглится, но если интересно — напишите в комментах.
Итоги
Сделав всё это, я получил возможность не только копировать записи регистратора, сидя при этом дома, а ещё и смотреть картинки с камер в режиме реального времени. И всё это вне зависимости от того, где находится автомобиль, главное — чтобы у его маршрутизатора была связь с интернетом. Разве это не прекрасно?
А ещё приятным бонусом получил более высокую скорость копирования видеозаписей, нежели сидя в машине: 1.2-1.5 мб/с против 1 мб/с. Не знаю, почему.
А конфиги будут?
Честно признаться, не думаю, что кому-нибудь придёт в голову делать в точности то, что описано. В любом случае будет некая адаптация решения к тому, что уже имеется. Но если сильно нужно — ниже вы найдёте правила nat, на которых реализовано 99% всего того, о чём шла речь выше.
/ip firewall nat
add action=src-nat chain=srcnat comment=AVR out-interface=l2tp-auto src-address=192.168.100.0/24 to-addresses=192.168.98.1
add action=dst-nat chain=dstnat comment=AVR dst-address=192.168.100.1 dst-port=7777,7778,7779 in-interface=wlan1 protocol=tcp to-addresses=192.168.98.2
/ip firewall nat
add action=masquerade chain=srcnat comment=AVR out-interface=l2tp-auto
add action=masquerade chain=srcnat comment=AVR out-interface=ether2
add action=masquerade chain=srcnat comment=AVR out-interface=wlan1
add action=dst-nat chain=dstnat comment=AVR dst-port=7777,7778,7779 in-interface=l2tp-auto protocol=tcp to-addresses=192.168.99.2
add action=dst-nat chain=dstnat comment=AVR dst-port=7777,7778,7779 in-interface=wlan1 protocol=tcp to-addresses=192.168.99.2
/ip firewall nat
add action=dst-nat chain=dstnat comment=AVR dst-address=192.168.99.2 dst-port=7777,7778,7779 in-interface=ether1 protocol=tcp to-addresses=192.168.100.1
add action=masquerade chain=srcnat comment=AVR out-interface=wlan1
Комментарии (19)
Mobile1
05.07.2018 20:28Сделали похожее решение с онлайн видеонаблюдением — в машину ставится смартфон с мессенджером, который умеет поднимать трубку и транслировать видео.
q2eggdrop Автор
05.07.2018 21:15Интересная задумка, но у такого решения цель совсем иная — это не видеорегистратор, а способ видеосвязи с сидящими в машине и слежения, причём сугубо в режиме онлайн.
Mobile1
06.07.2018 06:51Есть еще бот, который может делать фото и рассылать в группу наблюдающим.
Причем с любой из 2 камер.
Фоторегистратор :)q2eggdrop Автор
06.07.2018 10:59у меня такой же бот (телеграмм) прикручен к домашнему видео наблюдению, это действительно очень удобно. напишу тоже как-нибудь.
AlexPanych
06.07.2018 17:25Подписался, буду ждать публикации :)
Если есть ссылки на подобные проекты или ключевые слова — поделитесь, плиз)
Надо бы видеонаблюдение с дистанционным доступом через хилый инет…
trublast
05.07.2018 22:29если вы знаете другие бюджетные варианты
TL-Link MR3020 с прошивкой OpenWRT (LEDE), почти в 3 раза бюджетнееtrublast
05.07.2018 22:38Жаль только, что сейчас есть новые версии HW, на которых LEDE не работает. То есть в интернет-магазине просто так не купить, версию узнать можно только на коробке.
q2eggdrop Автор
06.07.2018 05:43Да, наверное будет работать. Но для автомобиля скорее всего придётся выбрать другую железку: tp-link вряд ли вытянет в условиях, когда солнце прогревает салон градусов до 60-80, а для routerboard это норма. Что касается выбора между openwrt и routeros, я лично для себя лет 5 назад выбрал второе по очень многим критериям, которые затмили и то, что чистый линукс мне ближе, и даже то, что на routeros лицензии платные. И ни капли не пожалел. В общем, каждому своё :)
N0Good
06.07.2018 15:48Именно этот самый 3020 в качестве wifi роутера с huawei 3372 у меня трудится в машине уже года 2. Живу на юге. Нормально переносит такую температуру.
juDge
06.07.2018 05:44Подскажи какая microSD карта стоит? Я уже замучался… как только подключаю заднюю камеру через какое то время отключется запись. Поддержка из пустого в парожнюю льет. Ни какой конкретики не выдает, типа карта виновата… покупаетй и перечисляет бренды. Выдал плюс минус серию минкросд карт двух производителей, но одна карты нет в продаже. А по трансценду отзывы были не айс. Спросил про самсунг сказали что ок в итоге опять стопы полезли
q2eggdrop Автор
06.07.2018 05:51Точно не помню, но либо a-data, либо transcend. Сейчас многие флешки продаются с 5- и даже 10-летней гарантией, так что я не вижу в этом большой проблемы: покупаем в местном магазине, который не сдуется за это время, сохраняем все документы и кладём рядом ксерокопию чека (на случай, если термобумага выцветет).
А вообще с подобными проблемами я раньше сталкивался на других регистраторах. Имеет большое значение скорость записи, которую карта реально может вытянуть (а не та, которая написана на упаковке). Производители регистраторов рекомендуют минимум класс 10 (10мб/с), я выбирал с заявленной скоростью записи не ниже 15-20мб/с, потому что на проверку она обычно завышена процентов на 20. В случае возникновения любых подозрений о проблемах — для проверки пользуюсь линуксовым whdd (похож на mhdd, но способен проверять что угодно). На флешках часто встречаются «битые сектора» — области, к которым время доступа зашкаливает. В регистратор такие ставить нельзя.juDge
06.07.2018 11:28Прикупил SAMSUNG EVO PLUS 2 с заявленой минимальной скоростью записи в 60 МБ/с… пару часов и опять та же фигня… запись отключена и все. Карту купил у офицального партнера самсунга так что подделки не должно быть по определению. Суппорт Неолайна ни чего вразумительного выдать не может. Чем я только занимаюсь это покупаю карты… и «очередная карта» опять выдает ошибку записи.
q2eggdrop Автор
06.07.2018 11:41попробуйте whdd или любое другое средство для посекторной проверки флешки, может здесь и зарыта собака. Если флешки в порядке, а регистратор стабильно не хочет писать — сдавайте по гарантии.
Henry7
06.07.2018 11:55А как бы так автоматизировать, чтобы вечером при парковке возле дома, регистратор подключался по Wi-Fi к домашней сети (Mikrotik) и сливал записанные за день данные куда-нибудь на NAS или облако.
q2eggdrop Автор
06.07.2018 17:28Тоже думаю над этим. Надо бы поковырять API, может там всё просто. Ну или в сторону SD-WIFI карты с известным API подумать.
Nikita_ab
06.07.2018 17:26Мне кажется, как-то небезопасно крепить это все к стеклу так на виду. У некоторых это может вызвать желание разбить стекло и стырить «такую интересную шутку».
q2eggdrop Автор
06.07.2018 17:32а оно не на виду. Заднее стекло с заводской тонировкой и снаружи ничего не видно. Ещё и грязь лишнюю помеху обзору снаружи создаёт. А вид, на самом деле, не такой уж монструозный. :)
KMVp
Микротик — сила! А через eoip не рассматривали вариант? Тогда можно было б избежать множественных dnat snat. MAP lite подключается клиентом к регистратору, этот интерфейс в бридж с eoip. А другой конец на домашнем микротике в бридж с Virtual AP c SSID регистратора.
q2eggdrop Автор
Вариант, согласен. Но есть одно но: если нужно, чтобы на телефоне работало не только приложение регистратора, а ещё и интернет, начинают возникать разного рода сложности.