Укрощаем ezShare WiFi SD при помощи OpenWRT, docker’a и прочей магии

Для старых фотоаппаратов и прочего хлама, не имеющего WiFi добрые китайцы придумали чудо техники под названием ezShare. По сути SD карточка с WiFi. Одно время были даже карточки от Transcend, куда народ ставил OpenWRT, но они кончились быстро и мне не досталось. Вместо них на смену пришли карты с непонятным чипом от lzeal про который было известно чуть меньше, чем вообще ничего.

Это чудо техники имеет весьма странные ТТХ. Так, например, не умеет работать в режиме клиента – только в режиме точки доступа. Webdav нет, только кривой и косой веб-интерфейс. В общем-то в этой заметке я и решил разобраться, как из этой хрени сделать что-то, что способно решать насущные задачи и не мешаться.

Linux? Тут же есть linux?

Первую такую карточку я взял несколько лет назад, попробовал получить рута и вкатить линукс по инструкции. Не вышло. Разобрал, планируя подцепить uart и понял, что внутри неведомый контроллер от lzeal и линуксом и не пахнет. Упс. Так она и отправилась в мусор, ибо разобрать ее без уничтожения было невозможно, не осталось даже фоточек. Фейл.

Попытка номер два

В очередной раз сливая фотографии после отпуска, я все же решил добыть себе вновь такую карточку, но на этот раз попытался смириться и жить с ее стоковой прошивкой. Но вот ручное количество действий через WiFi было все равно больше, чем просто копирнуть руками. Что же делать? Правильно, нам потребуется пара костылей. А именно:

  • Придумать, как заставить ее работать в режиме WiFi клиента, а не только точки доступа,
  • Нарисовать скрипт, который синхронизирует содержимое карты,
  • PROFIT!

Ну отлично, поехали.

Режим клиента, когда его нет

Если гора не идет к Магомеду, то Магомед чешет к горе на заниженной и тюнингованной “приоре”. Руководствуясь этой мудростью, я открыл настройку WiFi карты и выставил на ней тот же самый канал WiFi, на котором работала моя домашняя сеть.

Вообще карточка по умолчанию создает сеть Ez Share с паролем 88888888. А пароль на изменение настроек WiFi – admin. Оставлю это тут, мало ли кто будет искать. Сама она сидит под IP адресом 192.168.4.1, раздает через DHCP адреса из /24 подсети и доступна по DNS имени ezshare.card. Запомним это, и поменяем немного настройки.

После этого я полез в настройки роутера. На вкладке Wireless нас интересует WiFi адаптер, работающий в 2.4Ghz диапазоне. Ему мы добавляем еще одну сеть, нажимая на кнопку Add.

Выбираем режим клиент, забиваем пароль WiFi и создаем новую сеть. Я назвал ezshare.

Теперь идем в интерфейсы. Ставим новому интерфейсу режим DHCP Client.

А вот в advanced нам надо включить Force Link (это надо, чтобы отсутствие карточки в домашней сети не блокировало VPN интерфейсы), а также снять галочку Use Default Gateway т.к. в интернет через эту карту мы сходить уж точно не сможем. DNS от этой карточки мы получать тоже не будем, потому смело снимаем и здесь галочку. В общем все делаем так, как у меня на скриншоте.

Теперь лезем в настройки файервола, и создаем новую зону. Я ее также назвал ezshare. Нам потребуется для нее включить masquerade. Так как сетевую маску и маршруты со стороны карты изменить мы не можем, то карта должна думать, что к ней всегда лезут из ее подсети с IP адреса нашего роутера. Выглядеть оно будет как-то так:

Фактически, оно чем-то напоминает обычный WAN интерфейс. Мне повезло, и диапазон 192.168.4.0/24 у меня не был занят. В противном случае все было бы сложнее и геморройнее.

После этого как только мы подадим питание на карту, мы можем ее пингануть с любого хоста нашей сети. Отлично! Чего не хватает? Правильно, dns. Без редиректа с ezshare.card карточка упорно не хочет работать.

Лезем в настройки DHCP и прописываем статическую запись.

Делаем синхронизацию

А вот тут у нас начинается самое интересное. Потыкав существующие решения в виде костыльных баш-скриптов, я родил питоновскую библиотеку и утилиту ezshare-cli.

Действует она примерно так:

Взять ее можно через pip (pip install ezshare) или у меня на github’е: https://github.com/nekromant/ezshare

Проблемы (и решения)

Пока единственная проблема – при включении/выключении карты отваливаются кратковременно все устройтва от сети. На некоторых роутерах может не работать одновременного режима клиента и точки доступа. Но зато если есть свободный USB или, как на Xiaomi AIOT роутерах лишний 2.4Ghz адаптер, то можно вынести обслуживание этой сети на него.

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

Автосинхронизация

Для автосинхронизации на облако, я запихнул в докер контейнер вышеупомянутый костыль в режиме непрерывной синхронизации, смотрировал туда webdav файловую систему с облака, и развернул оный на домашнем сервере. Теперь как только сервер видит SD карточку в сети, он автоматом пытается выдернуть с нее все данные, до каких доберется и заливает на облако по webdav. Файлы с одинаковым размером он игнорирует. docker-compose.yml тоже валяется в репозитории, на случай если кому-то будет надо развернуть эту штуку по-быстрому.

Итоговый вариант показал себя достаточно удобным решением в хозяйстве, а самое главное – не требующим вообще никаких действий. Пока ты лежишь на диване и листаешь на фотике фотографии с отпуска, эта штука втихоря делает свою работу и не отсвечивает.

Добавить комментарий

Этот сайт использует Akismet для борьбы со спамом. Узнайте, как обрабатываются ваши данные комментариев.