Hacktoberfest 2026: los issues que los mantenedores marcaron para octubre, abiertos y aptos para principiantes. Explorar issues de Hacktoberfest

[Feature] UDP 转发(udp_session / udp_data / 会话超时)

Abierto
#4 2 comentarios 0 reacciones 0 asignados Ver en GitHub

Nadie ha tomado este issue todavía.

Evaluación

Dificultad
5/5
Tiempo estimado
Más de una semana
Aptitud para principiantes
25/100
Tipo de issue
Nueva funcionalidad
Claridad
Bastante claro
Estado de actividad
Activo
Stack tecnológico
nodejs, python, rust, typescript
Área
networking

Línea de trabajo

Start with issue #3's Protocol v2 binary data-plane design and the existing WS_TUNNEL_TCP_LISTEN handling. Trace the server session lifecycle and the TypeScript dgram and Rust tokio::net::UdpSocket client paths before deciding how the three clients fit. Done means the DNS, timeout cleanup, conformance, and WS-disconnect acceptance checks pass without leaked resources.

Escrito por el modelo de indexación a partir del texto del issue.

Descripción

背景

当前只支持 TCP。frp / rathole / bore 均支持 UDP(DNS、游戏、QUIC 等场景)。

设计草图

UDP 无连接,但需要 NAT 会话语义。建议:

  1. 新增消息(与 TCP 三件套平行):
    • udp_open { session_id, conn_id }(服务端 → 客户端):外部 UDP 首包到达时,服务端为该 (外部地址, 端口) 分配会话并通知客户端建 socket
    • udp_data { session_id, data(base64) }(双向):数据报传递
    • udp_close { session_id, reason? }(双向):会话结束
    • 复用现有 WS 会话,session_id 由服务端分配
  2. 服务端:新增 UDP 监听器(每端口绑一条隧道,复用 0.5.0 的 WS_TUNNEL_TCP_LISTEN 格式,如 "9080:dsh/udp");会话表 (endpoint → session_id),空闲超时(建议 30s 可配)后回收并下发 udp_close
  3. 客户端:每 session 绑定一个 UdpSocket(TS: dgram / Rust: tokio::net::UdpSocket),回包按 session_id 路由
  4. 顺序与重复:UDP 本身不保证,不做重传;分片由 IP 层处理,单报文不超过 MTU(服务端按 1472 截断告警)

验收

  • DNS 查询经隧道往返成功(A 记录)
  • 会话空闲超时回收,客户端资源不泄漏
  • 三客户端实现 + conformance 场景
  • WS 断开时会话全量清理(与 TCP 行为一致)

依赖

建议与 Protocol v2 二进制数据面 同期实施(UDP 报文天然适合二进制帧)。

Lenguaje dominante
Python
Estrellas
0
Forks
0
Métricas de merge de PR
Sin PR fusionados en 30 d

Preparar el entorno

  • Incluye un Dockerfile o un archivo de Docker Compose
  • Sin plantilla de pull request
  • Sin guía de contribución

Primeros pasos

  1. Lee el issue completo y luego la guía de contribución del proyecto.
  2. Comenta en el issue que vas a ocuparte — evita que dos personas hagan lo mismo.
  3. Haz un fork del repositorio y trabaja en una rama.
  4. Abre un pull request que haga referencia al número del issue.

Más de jeffkit/tunely

Todos los issues de jeffkit/tunely

Issues similares

Más issues de Python

Recibe los nuevos issues en tu correo

Un resumen breve de issues de GitHub para principiantes.