Я создал собственную платформу для туннелирования

Я потратил три дня на доработку веб-приложения на своем ноутбуке. Оно выглядело идеально. Но когда я попытался протестировать его на телефоне, всё сломалось.

Локальная разработка превращается в хаос, когда требуется второе устройство. Поделиться локальным IP не получается из-за брандмауэров и проблем с HTTPS-сертификатами.

Я пробовал Ngrok. Он работает, но на бесплатном тарифе соединения обрываются. К тому же, URL выглядят ужасно. Случайные строки вроде a1b2-34-56.ngrok-free.app неудобны для демонстрации клиентам или командам.

Мне нужен был туннель с чистыми и читаемыми URL. Поэтому я создал свой собственный.

Я объединил кастомный туннель с сокращателем ссылок. Добавил ИИ для создания осмысленных слагов (slugs) и внедрил механизмы защиты.

Технологический стек: • Tunnel / Proxy: Django Channels, Daphne, WebSockets, Python & Node.js CLI • Frontend: Next.js, TailwindCSS, Shadcn/UI • Backend: Django 5, Graphene GraphQL • Database: PostgreSQL (Neon) • Auth: JWT, bcrypt • AI: Google Gemini • Security: MaxMind GeoLite2, Google Safe Browsing API

Как это работает:

  • Двунаправленное туннелирование через WebSocket. Локальный CLI-агент подключается к серверу Django для пересылки HTTP-запросов.
  • Защита от состояния гонки (race condition). Я использую выражения Django F() для атомарных обновлений, чтобы аналитика оставалась точной.
  • Неблокирующая телеметрия. Запросы данных о местоположении и ОС выполняются в фоновых потоках, чтобы минимизировать задержку.
  • ИИ-слаги. Gemini анализирует целевой URL, чтобы создать осмысленный слаг вместо случайного набора символов.
  • Проактивная безопасность. Я блокирую диапазоны частных IP-адресов и провожу проверки через Google Safe Browsing перед сохранением любой ссылки.

Бэкенд и логика туннелирования работают стабильно. Фронтенд всё еще в процессе разработки.

Сейчас я готовлюсь к экзаменам в IITM. Я приостановил разработку новых функций, чтобы сосредоточиться на учебе. Вместо того чтобы просто оставить код без дела, я открываю его для ревью.

Мне нужна ваша обратная связь по нескольким вопросам:

  • Latency (задержка): Как обеспечить время редиректа менее 10 мс при высоких нагрузках?
  • Security (безопасность): Какой лучший способ усилить защиту от SSRF?
  • Scalability (масштабируемость): Стоит ли использовать WebSockets или TCP для долгоживущих туннелей?
  • Observability (наблюдаемость): Какие метрики стоит отслеживать для контроля состояния туннеля?

Если у вас есть опыт работы с прокси-воркерами или системным дизайном, пожалуйста, поделитесь своими мыслями.

Полный разбор системного дизайна: [Link] Кодовая база: [Link]

Как вы тестируете мобильные разрешения во время локальной разработки? Используете сторонние туннели или собственные инструменты?

Источник: https://dev.to/zallu/my-ngrok-urls-got-so-ugly-i-built-my-own-tunneling-platform-instead-59d