Я создал собственную платформу для туннелирования
Я потратил три дня на доработку веб-приложения на своем ноутбуке. Оно выглядело идеально. Но когда я попытался протестировать его на телефоне, всё сломалось.
Локальная разработка превращается в хаос, когда требуется второе устройство. Поделиться локальным 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
