Hacktoberfest 2026: những issue maintainer đã đánh dấu cho tháng Mười, đang mở và phù hợp người mới. Xem issue Hacktoberfest

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

Đang mở
#4 2 bình luận 0 reaction 0 người được giao Xem trên GitHub

Maintainer thường phản hồi trong vòng 7 ngày

Chưa có ai nhận issue này.

Đánh giá

Độ khó
5/5
Thời gian dự kiến
Hơn một tuần
Mức phù hợp với người mới
25/100
Loại issue
Tính năng
Độ rõ ràng
Khá rõ ràng
Mức độ hoạt động
Sôi nổi
Công nghệ
nodejs, python, rust, typescript
Lĩnh vực
networking

Hướng nghiên cứu

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.

Do mô hình lập chỉ mục viết ra từ nội dung của issue.

Mô tả

背景

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

Ngôn ngữ chính
Python
Star
0
Fork
0
Merge trung bình
6 ngày 2 giờ
Pull request đã merge (30 ngày)
2

Chuẩn bị môi trường

  • Có Dockerfile hoặc tệp Docker Compose
  • Không có mẫu pull request
  • Không có hướng dẫn đóng góp

Bắt đầu từ đâu

  1. Đọc hết issue, rồi đọc hướng dẫn đóng góp của dự án.
  2. Bình luận trên issue rằng bạn sẽ nhận — tránh hai người làm cùng một việc.
  3. Fork repository và làm thay đổi trên một nhánh.
  4. Mở pull request có tham chiếu số hiệu của issue.

Issue khác của jeffkit/tunely

Tất cả issue của jeffkit/tunely

Issue tương tự

Thêm issue về Python

Nhận issue mới trong hộp thư của bạn

Bản tóm tắt ngắn những issue GitHub phù hợp với người mới.