1. Диагноз
Знакомая ситуация. Нужно скинуть коллеге дамп базы на 40 гигабайт. WeTransfer орёт про лимит. Google Drive синхронизируется час, потом падает по квоте. Email режет вложение на середине. А файл лежит на соседнем столе — в буквальном смысле, коллега сидит в трёх метрах.
Вот тут и нужна прямая передача файлов через интернет — без загрузки в чужое облако, без ожидания синхронизации, без аккаунтов и подписок. По факту это P2P: два устройства договариваются напрямую и гоняют данные между собой, а сервер если и участвует — то только чтобы помочь им найти друг друга.
Дальше разберём это на DashBeam — open-source клиенте (бывший AltSendme), который построен поверх P2P-стека Iroh. Разберём почему облачные сервисы упираются в потолок, как поднять P2P-передачу за пять минут, что делать если соединение не пробивается через NAT, и чем этот подход отличается от croc, Magic Wormhole и LocalSend.
Уйдёт минут десять на первую отправку. Дальше — секунды. Нужен только сам DashBeam на обоих устройствах и файл, который надоело ждать.
| Компонент | Актуальная версия / требование |
|---|---|
| DashBeam | 0.6.0 (релиз «Paired Devices») |
| Windows | x64, портативная версия или установщик MSI/EXE |
| macOS | Universal (Intel + Apple Silicon), от 10.15 |
| Linux | deb / rpm / AppImage, amd64 |
| Android | arm64 / armv7 / universal APK |
| Web-клиент | app.dashbeam.net, без установки, throughput ниже нативного |
| Транспорт | QUIC + TLS 1.3 (через Iroh) |
На момент публикации актуальна версия 0.6.0. Перед установкой проверь свежие релизы на GitHub — проект развивается быстро, релизы выходят почти каждый месяц.
2. Причины
Почему вообще облако не решает задачу «просто передать файл»? Смотри по пунктам.
- Лимиты размера. Бесплатный WeTransfer режет на 2-5 ГБ, почта — на 25 МБ вложения. Дамп базы, архив с логами или видео с камер туда просто не влезают.
- Двойное время передачи. Файл сначала грузится на сервер, потом скачивается получателем. Это два прохода по сети вместо одного — а если у тебя асимметричный канал, аплоад всегда медленнее даунлоада.
- Данные проходят через чужой сервер. Даже с шифрованием «в облаке» файл физически лежит на диске третьей стороны, пусть и временно. Для внутренних логов, конфигов с секретами или клиентских данных это лишний риск.
- Нужен аккаунт. Регистрация, подтверждение почты, ограничение на количество отправок в день — лишние шаги там, где нужно было просто скинуть файл.
- Нет возобновления при обрыве. Оборвался аплоад на 90% — начинай сначала. При передаче больших архивов через нестабильный канал это выматывает.
- Файлообменники живут недолго. Ссылка сгорает через сутки-неделю, сервис закрывается, домен продают. P2P-передача такой проблемы не знает в принципе — потому что она не оставляет файл на сервере вообще.
Ну и запросы у вас — сказал бы облачный сервис, если бы умел говорить, и повис на middleware балансировщика.
3. Рецепт
Подготовка
Зависимости минимальные — собственно, это одна из причин почему DashBeam выбран для примера, а не что-то с сервером и Docker-Compose на пять контейнеров.
- Два устройства с доступом в интернет (или в одну локальную сеть — тогда ещё быстрее)
- Права на установку приложения (админ на Windows/Linux, обычные права на macOS/Android)
- Открытый исходящий трафик — входящие порты пробрасывать не нужно, ниже объясню почему
Шаг 1. Установи DashBeam на отправляющее устройство
Зайди на GitHub-релизы проекта, скачай сборку под свою ОС. Для Windows — MSI или портативный ZIP, для macOS — Universal DMG, для Linux — deb/rpm/AppImage под твой дистрибутив.
# Linux (Debian/Ubuntu) - пример установки .deb пакета
sudo dpkg -i AltSendme_0.6.0_amd64.deb
sudo apt-get install -f
Результат: в списке приложений появляется DashBeam, при первом запуске генерируется криптографический ключ устройства (Ed25519) — он и определяет «личность» твоего эндпоинта в сети Iroh.
Шаг 2. Установи DashBeam на принимающее устройство
Та же процедура на втором устройстве — неважно, macOS это, Android или Linux. DashBeam кросс-платформенный, отправить можно с телефона на сервер и наоборот.
# macOS - установка через смонтированный DMG
hdiutil attach DashBeam_universal.dmg
cp -R "/Volumes/DashBeam/DashBeam.app" /Applications/
hdiutil detach "/Volumes/DashBeam"
Результат: приложение доступно на обоих концах передачи. Аккаунт не нужен — ты уже готов слать файлы.
Шаг 3. Отправь файл
В интерфейсе DashBeam перетащи файл или папку в окно отправки. Приложение считает хэш содержимого по BLAKE3 и сгенерирует «тикет» — строку, в которой зашит endpoint id отправителя, адреса для подключения и хэш блоба.
Тикет можно передать любым способом: скопировать текстом, показать QR-код для сканирования камерой, отправить через системное меню «Поделиться». Дальше выбираешь один из трёх маршрутов:
- Разослать тикет вручную (чат, почта, любой мессенджер)
- Отправить на устройство, которое уже в паре (без копирования тикета вообще)
- Отправить на устройство, найденное рядом через Nearby (mDNS в локальной сети)
Шаг 4. Прими файл на втором устройстве
Вставь полученный тикет в поле приёма (или прими всплывающий инвайт, если устройства уже в паре). DashBeam покажет предпросмотр — что именно летит и сколько весит — и только после подтверждения начнёт качать.
# Пример структуры тикета (сокращённо, реальный длиннее)
blobtxxxxxxxxx-nodeid-relayurl-hash
Результат: файл или папка появляются в системной папке загрузок DashBeam, целостность подтверждена сверкой BLAKE3-хэша.
Шаг 5. Настрой постоянную пару устройств (опционально, но экономит время)
Если гоняешь файлы между одним и тем же ноутбуком и телефоном регулярно — зайди в Settings → Devices на обоих устройствах и введи код пары один раз. Дальше отправка — это просто «Send» рядом с именем устройства, без копирования тикетов вообще.
Как это устроено внутри
Iroh, на котором построен DashBeam, старается соединить устройства напрямую — и только если это невозможно, подключает релей как временный мост. Схема ниже — без деталей протокола, просто путь пакета.
Ключевой момент: даже когда релей в пути, он видит только зашифрованный QUIC-трафик. Ключи шифрования выводятся из тикета, известного только отправителю и получателю — релей их не получает и расшифровать содержимое не может.
Порты и сетевые требования
| Направление | Протокол | Назначение | Нужен проброс? |
|---|---|---|---|
| Исходящий | UDP (динамический) | QUIC-соединение между устройствами | Нет |
| Исходящий | TCP/443 | Подключение к relay-серверу для сигналинга | Нет |
| Входящий | UDP (эфемерный, при hole punching) | Приём прямого соединения от пира | Обычно нет — пробивается автоматически |
Вот тут важно: DashBeam не требует настраивать проброс портов на роутере в подавляющем большинстве случаев. Hole punching делает свою работу автоматически — примерно так же, как это устроено в WireGuard или Tailscale. Если ты в корпоративной сети с жёстким firewall, который режет весь UDP — тогда остаётся только relay-фолбэк, и скорость упадёт до пропускной способности релея.
Безопасность
- Шифрование по умолчанию. Каждая передача идёт через QUIC поверх TLS 1.3 — ключи привязаны к конкретному тикету, переиспользовать их нельзя.
- Криптографическая аутентификация. Тикет содержит endpoint id отправителя — получатель физически не может подключиться не к тому устройству.
- Один тикет — одна передача. Тикеты для парных инвайтов не переиспользуются между отправками, каждая генерирует новый.
- Ключи в системном хранилище. Секретный ключ устройства лежит в Keychain на macOS, Credential Manager на Windows, Secret Service на Linux — не в текстовом файле рядом с приложением.
- Никакой телеметрии. Разработчики прямо заявляют — статистика передач не собирается.
4. Проверка
После передачи убедись, что всё дошло целым, а не «вроде похоже на оригинал».
# Проверка контрольной суммы полученного файла (Linux/macOS)
b3sum received_file.tar.gz
# Сравни с хэшем, который показывал DashBeam при отправке
# Windows PowerShell - проверка через встроенный certutil (SHA256, если BLAKE3 недоступен локально)
certutil -hashfile received_file.tar.gz SHA256
Дополнительно в самом приложении: открой историю передач (появилась в 0.6.0) и проверь статус — «completed» означает что хэш совпал автоматически, приложение не покажет файл как принятый, если целостность не подтвердилась.
5. Осложнения
| Ошибка / симптом | Причина | Решение |
|---|---|---|
| Список Nearby-устройств пустой | mDNS заблокирован гостевым Wi-Fi или VPN | Отключи VPN на время передачи или используй ручной тикет вместо автообнаружения |
| Скорость передачи низкая, не насыщает канал | Соединение упало на relay-фолбэк, hole punching не прошёл | Проверь что UDP не режется firewall’ом провайдера или корпоративной сетью |
| Получатель не видит инвайт от парного устройства | Приложение на принимающей стороне закрыто, а не свёрнуто в трей | Оставь DashBeam запущенным в фоне (Settings → General → Startup & background) |
| Тикет не принимается, ошибка подключения | Тикет скопирован не полностью или сессия отправителя уже завершена | Запроси свежий тикет у отправителя, скопируй строку целиком |
| Передача обрывается на середине большого файла | Нестабильное соединение, устройство ушло в сон | Отключи режим сна на время передачи, DashBeam возобновит с места обрыва при переподключении |
Всё не так плохо как кажется. Всё намного проще — в девяти случаях из десяти проблема лечится либо свежим тикетом, либо выключенным на минуту VPN.
6. Альтернативы
| Инструмент | Платформы | Особенность | Когда выбрать вместо DashBeam |
|---|---|---|---|
| croc | CLI (Windows/macOS/Linux) | Простая передача по кодовому слову, только терминал | Нужен только CLI, GUI не важен, привычнее к консольным утилитам |
| Magic Wormhole | CLI, Python | Классика P2P-передачи по короткому коду | Уже есть Python-окружение, нужна максимально простая утилита без GUI |
| LocalSend | Desktop + mobile | Работает только в локальной сети | Передача строго внутри одной Wi-Fi сети, интернет не нужен |
| PairDrop | Web/PWA + Android + CLI | WebRTC в браузере, ничего не устанавливать | Нужно передать файл человеку, который не хочет ставить приложение |
DashBeam выбран как основной вариант в этой статье по трём причинам: единственный из перечисленных умеет и десктоп, и мобильные, и веб, и CLI одновременно; передачи возобновляются после обрыва (у Magic Wormhole и LocalSend — нет); и нет искусственного потолка по размеру файла, в отличие от PairDrop, который упирается в память браузера.
7. Профилактика
- Обновляй клиент регулярно. Проект активный, релизы выходят почти ежемесячно — патчи безопасности приходят с обновлениями, а не отдельными хотфиксами.
- Не держи Nearby-обнаружение включённым по умолчанию везде. В Settings → Network переключи видимость на «Paired only», если работаешь в публичных сетях — это не даёт случайным устройствам рядом видеть тебя в списке.
- Сверяй хэш для критичных файлов. Для дампов баз, бэкапов конфигов и всего что пойдёт в продакшн — не полагайся только на «зелёную галочку» в интерфейсе, прогоняй b3sum вручную.
- Держи фоновый режим включённым только на доверенных устройствах. Постоянно активный трей-процесс на общем компьютере — лишняя точка входа, если к машине есть физический доступ у посторонних.
8. FAQ
Почему передача файлов не работает после настройки DashBeam?
Чаще всего дело в UDP, который режет firewall — без него не проходит ни hole punching, ни фолбэк на relay. Проверь настройки сети и попробуй передачу через мобильный интернет для диагностики: если там работает, а на основной сети нет — проблема в корпоративном или роутерном firewall.
Как проверить что P2P-передача работает правильно?
Сверь BLAKE3-хэш полученного файла с тем, что показывало приложение при отправке. В истории передач статус «completed» означает автоматическую проверку целостности — если хэш не совпал, файл помечается как повреждённый, а не как принятый.
Что делать если тикет не принимается на другом устройстве?
Скопируй строку тикета целиком — оборванный тикет не парсится. Если тикет верный, но сессия отправителя уже закрыта (приложение закрыли до завершения передачи), запроси у него новый тикет — старый уже нерабочий.
Чем DashBeam отличается от WeTransfer?
WeTransfer грузит файл на сервер сервиса, а потом получатель качает его оттуда — с лимитом размера и сроком жизни ссылки. DashBeam соединяет устройства напрямую, без промежуточного хранения файла на чужом сервере, без лимитов и без регистрации.
9. Прогноз
Ты поставил DashBeam на оба устройства, прогнал первую передачу, свёл пару и убедился что hole punching пробивает твою сеть без плясок с портами. Дальше отправка большого файла — это тридцать секунд вместо получаса ожидания аплоада в облако.
Дамп базы, архив логов, видео с камер — всё летит напрямую, шифруется по дороге и не оседает на чужом диске. Если после всех шагов передача всё ещё упирается в relay и не разгоняется — пиши в комментарии, разберёмся с конкретным случаем.
Ссылки по теме:
DashBeam на GitHub
Iroh — P2P-стек, на котором построен DashBeam
croc — CLI-альтернатива
Magic Wormhole
LocalSend
PairDrop
Оставайтесь на связи
Рецепты от IT-боли. Без воды, без рекламы, без маркетинговой шелухи.
Подписаться на IT-Аптеку →


