Commit Graph
712 Commits
Author SHA1 Message Date
lbl 2e77801adc fix(server): 单台服务器注册失败不再拖垮整个 P2P 栈
问题:data_handle_task_connected 的重连循环中,注册被拒绝
(ResponseMessage::Error)、返回非注册消息、或虚拟网络发生变化时
break 后会调用 task_group.stop(),把包括其他健康服务器连接在内的
整个任务组全部停掉。

修复:
- 注册被拒绝/返回错误消息:与连接失败一致,退避 5 秒后重试,
  仅影响本服务器的重连。
- 虚拟网络发生变化:只结束本服务器的数据任务,不再 stop 整个任务组。

注:重连循环依赖真实服务器连接,未做端到端测试;全部既有单测通过。
2026-08-20 23:08:16 +08:00
lbl 0a73bc3356 fix(nat): TCP/ICMP NAT 不再因单点瞬时错误永久瘫痪
问题:
- tcp_nat listen_task:accept() 或 local/peer_addr 查询失败、
  no_tun 下 network.ip() 未就绪(None),任一错误经 ? 传播直接
  杀掉整个监听任务,NAT 永久失效且无重启。
- icmp_nat task:任一侧 socket 收发或单包处理出错同样经 ? 传播
  终止整个任务。

修复:
- 循环内错误改为 log::warn + continue,并加 100ms 休眠避免持续性
  错误造成空转。
- no_tun 下 network.ip() 为 None 时跳过重写/丢弃该包,而非报错退出。

注:该修复为异步 I/O 循环的容错行为变更,依赖真实 socket,
未补充端到端测试;已有 nat 相关单测全部通过。
2026-08-20 23:05:08 +08:00
lbl 40e2396741 fix(nat): 修复 ICMP NAT 映射只增不减导致内存无界增长
每个 ping 包都会以 (对端地址, identifier, sequence) 为键新增一条
永久映射,运行时间越长内存占用越大。

修复:
- 收到 EchoReply 命中映射即移除该条目(一次 echo 交换完成)。
- 映射值携带创建时间,select 循环中加入 60s 周期的 GC 分支,
  清理超时(60s)未收到应答的残留条目。

测试:test_evict_expired 验证超时条目被清理、未超时条目保留。
2026-08-20 23:00:44 +08:00
lbl d29c9e3122 fix(nat): 修复 UDP NAT 老化回收失效与误删竞态
问题:
1. GC 仅从映射表删除过期条目,其反向转发任务仍阻塞在 socket.recv
   上,任务与 socket 永久残留。
2. 条目过期被 GC 删除并以新 socket 重建后,旧任务退出时无条件
   remove 会把新条目误删。

修复:
- NatEntry 持有反向转发任务的 SubTask 句柄,GC 回收条目时一并
  stop 任务,释放 socket。
- 任务退出时通过 Arc::ptr_eq 确认表中条目仍是本任务的 socket 才删除。

测试:
- test_remove_if_current_only_removes_same_socket: 旧 socket 不能删新条目
- test_entry_inbound_task_stoppable: 条目任务可被 GC 正常终止
2026-08-20 22:58:11 +08:00
lbl af42ff7fe6 refactor(crypto): nonce 与 AAD 职责分离
nonce 只承担唯一性职责:seq(随机起始计数器,现占满 4 字节,
每流约 43 亿包才回绕)+ src + dst;不再用 msg_type 覆盖 seq 低位。

AAD 承担认证职责:msg_type(byte0)/flags(byte2)/reserved(byte3),
即所有传输中不变且不参与 nonce 的头部字节;ttl(byte1) 中继会递减,
仍不认证。

线上协议头部布局不变,但 nonce 推导方式改变,与旧版本
(含 48ba12d)加密不互通。

新增测试 test_tampered_msg_type_rejected:篡改 msg_type 必须解密失败。
2026-08-20 22:54:38 +08:00
lbl 016165ff8e fix(crypto): flags/reserved 头部字节纳入 AAD 认证
chacha20_poly1305 加解密 AAD 为空,flags 字节(COMPRESSED/FEC/GATEWAY)
未经认证,中间人可翻转标志位造成不可检测的丢包/语义篡改。

AAD 取头部 byte2(flags)/byte3(reserved);ttl(byte1) 中继转发时会递减,
不纳入 AAD 以保持中继兼容。

注意:此改动与旧版本(AAD 为空)不兼容,新旧节点间无法互通加密包。

测试:
- test_tampered_flags_rejected: 翻转 flags 必须解密失败
- test_ttl_change_still_decrypts: ttl 递减不影响解密
2026-08-20 22:40:30 +08:00
lbl b78140dc2d 修复 FEC 提交的 clippy 问题
ParityData 重导出改为仅 test 可见;去掉冗余切片与无用 vec!
2026-08-20 22:34:17 +08:00
lbl 1ea38ec715 修复 FEC 变长批次解码必失败且连带丢包
- 编码端把所有数据 shard 填充到 max_len 再做 RS 编码,解码端此前按
  实际长度存放数据 shard,批次内包长不一致时 reconstruct 必报
  IncorrectShardSize。现在记录 shard_size(校验包长度),
  无论校验包先到还是后到都把数据 shard 补齐到统一长度
- 解码失败不再向上传播错误:坏 group 直接移除,
  当前完好包与后续数据包正常透传
- 补充变长批次恢复、校验包先到恢复、解码失败不吞好包三个测试
2026-08-20 22:32:41 +08:00
lbl ca72f2b3d4 修复 Web 状态机在启动中停止时卡死
- 启动任务(含注册重试循环)此前是裸 tokio::spawn,stop 打不断:
  服务器不可达时点击停止,状态永远卡在 Starting 或显示 Running 的死网络。
  现在保存 JoinHandle,stop/restart 时先 abort_start_task 中断它,
  defer 守卫负责把状态迁移到 Stopped
- 清理任务此前 spawn 在自己所等待的 task_group 里,形成自引用等待,
  网络自行停止时永不返回;改为在任务组外等待
- 顺带修复 TaskGroup::wait_all_stopped 的丢失唤醒竞态:
  notified() 先 enable 注册再检查条件
- 补充 Starting 状态停止迁移、任务自然结束唤醒两个测试
2026-08-20 22:21:54 +08:00
lbl bd79844849 修复 Web 静态资源目录穿越
static_handler 此前直接 join 未归一化的 URI 路径,
curl --path-as-is .../../../ 可读取进程权限内任意文件。
改为逐组件校验:仅允许 Normal/CurDir 组件,拒绝 ..、根路径、盘符。
补充路径校验单元测试。
2026-08-20 22:16:01 +08:00
lbl bf2458d464 修复 JNI 建网后 TaskGroupGuard 被立即 drop 导致网络建完即死
TaskGroupGuard drop 会停止整个任务组且后续 spawn 静默失败。此前
nativeCreateNetwork 中 guard 在闭包结束即被释放:注册虽返回成功,
但数据处理任务根本不会启动,VPN 完全不通。

- GlobalState 增加 task_group_guards,guard 随实例持有
- nativeStop 中最后释放 guard;nativeDestroy 整体析构时随之释放
2026-08-20 21:57:33 +08:00
lbl 1ff7405681 修复 register/start_tun 失败后不可重试
- register 拆出 register_impl,Err 时归还 RegistrationContext,
  调用方(CLI/Web 的 5 秒重试循环)不再得到 'can only be called once'
- DeviceIoManager::start_task 改为先创建 tun 设备(唯一可能失败的步骤),
  成功后才消费 TunReceiver/EnhancedOutbound,失败时调用方状态完整可重试
2026-08-20 21:54:27 +08:00
lbl 6489237233 修复空载荷包越界 panic 杀死数据面任务
对端构造的零载荷包(头部长度恰好等于 HEAD_LENGTH)会使
TunDataInbound/InternalNatInbound 的 data[0] 索引越界 panic,
tokio 任务终止后连接永久静默死亡。两处 send 均增加空切片检查,
畸形包静默丢弃。补充空包/短包不 panic 的测试。
2026-08-20 21:48:24 +08:00
lbl b0db6c9659 补充加解密跨版本兼容性测试
nonce 完全由包自带的头部字节计算,解密端不依赖发送端状态,因此
seq 修复与旧版本线上兼容。测试双向验证:旧版本(seq=0)加密的包新版本
可解密,新版本(递增 seq)加密的包按旧逻辑(仅读头部算 nonce)也可解密。
2026-08-20 21:44:50 +08:00
lbl 46d5d24e96 修复 TLS 指纹模式不验握手签名的问题
FingerprintVerifier 此前只比对证书哈希,verify_tls12/13_signature 无条件
放行。而证书由密码确定性生成、属于公开信息,主动中间人重放真实证书即可
完成握手,指纹模式无法抵抗 MITM。

- verify_tls12/13_signature 改为调用 rustls::crypto::verify_tls12/13_signature
  做真实验签(ring provider 的签名算法集)
- supported_verify_schemes 返回算法集实际支持的方案
- 补充基于 tokio 内存通道的真实 TLS 握手测试:指纹匹配握手成功、
  指纹不匹配握手失败
2026-08-20 21:41:02 +08:00
lbl 3c0532b4c5 修复加密 nonce 全局重用
PacketCrypto 的 nonce 由 msg_type+seq+src+dst 构成,但 seq 字段从未赋值,
同一 (msg_type,src,dst) 的所有包共用同一 nonce,AEAD 密钥流重用。

- PacketCrypto 增加 Arc<AtomicU32> 出站序号计数器(随机起始值,避免
  进程重启后相同密钥复用低序号段),encrypt_in_place 时自动分配 seq
- 补充 nonce 唯一性与 clone 共享计数器的测试
2026-08-20 21:33:37 +08:00
lbl 216cf16310 修复中继路由探测失效
- MsgType 的 TryFrom 与枚举判别值不一致:RelayProbe 写 18 却被解码为
  RelayProbeReply,真正的 Reply(19) 被当非法类型丢弃,改为 18/19 与枚举一致
- RelayProbeReply 回复 TTL 由 1 改为 2:TTL=1 时中继节点 decr 后即被丢弃,
  回复永远到不了发起方,中继路由(metric=2)无法建立
- 补充 MsgType 全变体 round-trip 与中继 TTL 语义测试
2026-08-20 21:30:32 +08:00
lbl 7d481560e3 规范依赖管理并适配 rand 0.10
- tcp_ip 从 git 依赖切换为 crates.io 0.2(IpStackConfig 改用 builder)
- 公共依赖收拢到 workspace.dependencies 统一版本
- 移除 release profile 的 panic=abort(避免 vnt-jni 中止宿主 JVM)
- vnt-jni 升级 edition 2024(no_mangle 改为 unsafe(no_mangle))
- vnt-ipc 显式声明 tokio features
- 适配 rand 0.10:random_range 移至 RngExt,choose_multiple 改名 sample
- 修复 clippy 警告(type_complexity/collapsible_if/ptr_arg)
2026-08-20 20:58:07 +08:00
lbl e088d305b1 移除过期统计值 2026-03-02 15:52:24 +08:00
lbl 39602c478e 调整路径探测协议 2026-03-02 14:23:39 +08:00
lbl 1dc53ca898 计算路由评分 2026-02-28 19:26:19 +08:00
lbl 12f7eed8a5 记录具体路径的丢包率 2026-02-28 18:56:11 +08:00
lbl 2aa423062e 支持设置端口 2026-02-28 17:49:11 +08:00
lbl 5a31ad89f4 jni 2026-02-24 18:31:40 +08:00
lbl ecdb359bbd fmt 2026-02-24 16:08:44 +08:00
lbl 4708ed2b16 注册失败时重试 2026-02-24 16:08:18 +08:00
lbl b4301a8106 v2 2.0.0 2026-02-10 18:20:39 +08:00
vnt-dev 71da72da34 Merge pull request #171 from cfdworld/main
Update Cargo.toml for client to add support for tls1.2 when use wss
2026-01-27 13:49:46 +08:00
hello c6ef2031fa Update Cargo.toml for client to add support for tls1.2 when use wss
client add support for tls1.2 when use wss
2026-01-27 13:25:40 +08:00
lbl a82933a7a8 调整运行时 v1.2.17 2025-09-23 09:27:54 +08:00
lbl 76444ef17d Merge remote-tracking branch 'refs/remotes/origin/1.2.x' 2025-09-23 09:16:58 +08:00
lubeilin fde33380be 调整超时时间 2025-09-18 18:27:31 +08:00
vnt-dev eedb6684a5 Merge pull request #158 from vnt-dev/vnt-dev-patch-2
Update README.md
2025-09-17 18:25:55 +08:00
vnt-dev a335a5bcdf Update README.md 2025-09-17 18:25:24 +08:00
vnt-dev 4a347d853e Merge pull request #157 from radish0416/main
修改rust.yml文件,云编译通过
2025-09-17 10:01:01 +08:00
radish0416 79f55fe7fd Update rust.yml 2025-09-17 09:30:52 +08:00
lixianjiang affe8fb719 修改rust.yml文件,云编译通过 2025-09-17 08:41:44 +08:00
lbl 22eee048d0 Use the latest version of tun-rs 2025-07-19 22:10:53 +08:00
lbl 2b2a550a98 not specify the rust version 2025-06-28 17:38:46 +08:00
lbl 14427ce437 Update Dependencies 2025-06-28 17:31:00 +08:00
lbl 39c170892e fmt 2025-06-28 17:29:59 +08:00
lbl b82276e6fa Merge branch 'refs/heads/main' into 1.2.x
# Conflicts:
#	vnt/src/channel/ws_channel.rs
#	vnt/src/util/dns_query.rs
2025-06-28 14:57:29 +08:00
vnt-dev 154e8ef09a Merge pull request #146 from lmq8267/1.2.x
1.2.x
2025-04-27 11:40:00 +08:00
VNT-[bot] 97a2f7c306 无网络不终止程序继续运行 2025-04-26 10:20:09 +08:00
VNT-[bot] 8d39d6045a 添加thunk-rs链接Windows 7兼容库 2025-04-26 10:15:27 +08:00
VNT-[bot] 04b60773b9 增加30x重定向功能(服务器地址以http:前缀)例如 tcp://http:域名 2025-04-26 10:08:48 +08:00
VNT-[bot] 774a80dc46 升级mips和i686的编译 2025-04-26 09:57:33 +08:00
vnt-dev 1cba257531 Merge pull request #131 from lmq8267/patch-4
升级mips和i686的编译
2025-04-25 18:02:05 +08:00
vnt-dev 16cc2abe7a Merge pull request #130 from lmq8267/patch-3
替换前缀
2025-04-25 18:01:29 +08:00
vnt-dev 595a49ee3f Merge pull request #129 from lmq8267/patch-2
添加一下 http 302重定向
2025-04-25 18:00:57 +08:00