Hacktoberfest 2026: le issue che i maintainer hanno segnato per ottobre, aperte e adatte ai principianti. Sfoglia le issue Hacktoberfest

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

Aperta
#4 2 commenti 0 reazioni 0 assegnatari Vedi su GitHub

I maintainer di solito rispondono entro 13 giorni

Nessuno ha ancora preso questa issue.

Valutazione

Difficoltà
5/5
Tempo stimato
Più di una settimana
Idoneità per principianti
25/100
Tipo di issue
Funzionalità
Chiarezza
Abbastanza chiara
Stato di attività
Attiva
Stack tecnologico
nodejs, python, rust, typescript
Ambito
networking

Direzione di ricerca

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.

Scritto dal modello di indicizzazione a partire dal testo della issue.

Descrizione

背景

当前只支持 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 报文天然适合二进制帧)。

Lingua principale
Python
Stelle
0
Fork
0
Merge medio
12g 4h
PR unite (30g)
1

Preparare l'ambiente

  • Include un Dockerfile o un file Docker Compose
  • Nessun modello di pull request
  • Nessuna guida per i contributori

Come iniziare

  1. Leggi tutta la issue e poi la guida ai contributi del progetto.
  2. Commenta sulla issue per dire che te ne occupi tu — evita che due persone facciano lo stesso lavoro.
  3. Fai un fork del repository e lavora su un branch.
  4. Apri una pull request che faccia riferimento al numero della issue.

Altre issue di jeffkit/tunely

Tutte le issue di jeffkit/tunely

Issue simili

Altre issue su Python

Ricevi le nuove issue nella tua casella

Un breve riepilogo di issue GitHub adatte ai principianti.