Туннели за день: как я параллелизировал frp-интеграцию

Параллелизм в действии: как я за один день собрал туннельное решение для borisovai-admin
Когда ты работаешь над проектом borisovai-admin, появляются моменты, когда нужно сделать сразу много однотипной работы. У меня была ровно такая задача: реализовать систему frp tunneling — нужно было создать четыре новых файла, переделать четыре существующих и не запутаться в деталях. Обычно такие дни начинаются с вопроса: «С чего начать?» Я выбрал ответ: со всем одновременно.
Задача: соединить машины, не ломая архитектуру
Проблема была в том, что нам нужна была система туннелирования для соединения удалённых серверов через контрольный канал. frp (fast reverse proxy) — отличный инструмент для этого, но его нужно было интегрировать в существующую инфраструктуру. При этом всё должно было работать параллельно с Traefik и не конфликтовать с уже развёрнутой системой.
Первым делом я понял: это не может быть один огромный рефакторинг. Нужен был план, разбитый на логические части.
Что я создал: четыре ключевых компонента
install-frps.sh стал сердцем всей системы — 210-строчный скрипт установки, который берёт на себя всю грязную работу: скачивает бинарник, генерирует конфиг, создаёт systemd unit, настраивает DNS и firewall. Это не просто скрипт — это полноценный конвейер, который должен работать на production-сервере без человеческого вмешательства.
Параллельно я подготовил шаблон frpc.toml для Windows-клиентов, чтобы разработчик мог просто заполнить пару полей и запустить. И конечно, systemd unit и Traefik конфиг для основного сервера — чтобы всё было pre-built и готово к развёртыванию.
Неожиданный момент: три порта вместо одного
Когда я раскладывал архитектуру по полочкам, выяснилось, что frp использует три разных порта: 17420 (control channel), 17480 (HTTP vhost за Traefik), 17490 (dashboard только для localhost). Первый импульс был открыть всё в firewall, но стоп — нужна была безопасность. В итоге получилось изящное решение: контрольный канал открыт, vhost спрятан за Traefik с wildcard HostRegexp, dashboard доступен только локально.
Интересный факт про reverse proxy
Знаете, что смешного в reverse proxy? Обычный proxy скрывает клиента (вы видите proxy, а не пользователя). Reverse proxy делает противоположное — скрывает сервер (клиент видит публичный адрес, а не реальную машину). frp — это именно reverse proxy в его самом полезном проявлении для распределённых систем.
Что дальше
В итоге я обновил четыре существующих файла, добавил скрипт установки в upload-процесс, расширил конфиг примеров четырьмя новыми полями. Теперь разработчик может развернуть frps-сервер одной командой и подключить Windows-клиент без боли.
Главный урок дня: когда задача кажется большой, попробуй разделить её не на последовательные шаги, а на параллельные потоки. Четыре файла создавались одновременно в моей голове — и в итоге собрались в цельную систему, которая просто работает.
😄 Что общего у Bun и подростка? Оба непредсказуемы и требуют постоянного внимания.
Метаданные
- Session ID:
- grouped_borisovai-admin_20260207_1905
- Branch:
- main
- Dev Joke
- Что общего у Bun и подростка? Оба непредсказуемы и требуют постоянного внимания
Часть потока:
Разработка: borisovai-admin