← На главную

AVR64DD32 запускает веб-сервер через эмуляцию модема

17.05.2026 01:25 · hackernews

Автосервис с микроконтроллером AVR64DD32, который напоминает Arduino, но дешевле и проще в программировании. Чип имеет 64 килобита флеш-памяти, 8 килобайт оперативной памяти и работает на частоте 24 мегагерца. Его задача — запустить настоящий веб-сервер. Проблема в том, что обычный Ethernet-адаптер слишком быстрый для этого процессора. Стандартные сети передают данные в десять раз быстрее, чем умеет генерировать периферия контроллера, причём Manchester-кодирование дополнительно удваивает объём потока, превращая 10 мегабит в 20 мегабит по кабелю. Прямое подключение невозможно из-за этой скорости и требований к тактовой частоте периферии. Решение нашли через Serial Line Internet Protocol, старый стандарт работы сетей через последовательные порты. Протокол очень простой: пакеты оборачиваются в контрольные символы, а определённые байты заменяются на специальные коды, чтобы избежать ошибок при передаче. Такие соединения раньше использовали модемы, и сейчас их поддерживает даже Linux через утилиту slattach. Hardware-часть решения элементарна: нужен просто переходник USB-to-Serial, резисторы для индикаторов и диод для защиты от обратного напряжения. Сервер работает от того же адаптера, так как потребление всего милливатты. Чтобы ответить на запросы посетителей, микроконтроллер меняет местами адреса отправителя и получателя в заголовке IP. Современные операционные системы сами отключают сложную фрагментацию пакетов, поэтому задачу упрощают до простой переписывания данных. Протокол TCP реализовать гораздо труднее: нужно отслеживать состояние соединений, повторять отправку утерянных пакетов и обрабатывать тысячи крайних случаев. Над этим кодом писали несколько дней, и некоторые ошибки всё ещё остались. Веб-протокол HTTP реализовали через фиксированный ответ на любую страницу, что работает только для одного URL. Для доступа к устройству из сети нужен публичный IPv4-адрес, но выдать его нельзя без подключения к дата-центру в Хельсинки. Вместо этого установили Linux-роутер, который соединяет MCU с облачным виртуальным сервером через WireGuard. Этот протокол создаёт виртуальную точку доступа поверх интернета и работает даже через CGNAT. В результате любые запросы, идущие на путь /mcu, переправляются на локальный адаптер с резервными IP-адресами. Посетители не общаются напрямую с TCP/IP-стеком микроконтроллера, а используют этот «туннель» как безопасный способ обхода ограничений. Хотя теоретически такой сервер можно атаковать пакетами SYN, это потребует огромных усилий, что не так просто для обычного DDoS. Проблема бы исчезла, если бы у всех был доступ к IPv6, но прошло тридцать лет, и пользователи всё ещё не получили эту технологию.

Читать оригинал →