lbl
|
92463499ef
|
fix(utils): TaskGuard::drop 不再调用 tokio::task::id()
问题:TaskGuard::drop 中调用 tokio::task::id()。abort 路径下
future 的销毁若发生在非任务上下文,id() 直接 panic 刷日志;
若发生在调用方任务上下文,则拿到调用方的任务 id,把它从
任务组中误删,破坏任务组记账。
修复:spawn 时在任务上下文内获取自身 id 存入 TaskGuard,
Drop 只使用保存的 id。
测试:test_abort_task_keeps_caller_bookkeeping 验证在同组任务内
abort 其他任务后,调用方条目不被误删、wait_all_stopped 正常返回。
|
2026-08-20 23:15:02 +08:00 |
|
lbl
|
837ef29c15
|
fix(tun): TUN 读写任一方向结束即整体退出,消除半开状态
此前 in_tun_loop/out_tun_loop 是两个独立任务,任一方向出错后
另一方向继续运行:TUN 处于半开状态,一个方向的流量被静默吞掉,
无恢复也无上报。
修复:两个方向合并为单个任务并用 tokio::select! 组合,任一方向
结束(出错或设备关闭)即取消另一方向并记录日志。DeviceTask
相应合并为单 SubTask。
注:依赖真实 TUN 设备,未做端到端测试;全部既有单测通过。
|
2026-08-20 23:12:23 +08:00 |
|
lbl
|
7fbac61e75
|
fix(server): 动态 DNS 发现的 wss:// 地址正确映射为 Wss 协议
此前动态 DNS TXT 记录中的 wss:// 被错映射为 TlsTcp,导致动态发现
模式下 WSS 连接实际不可用(会对 wss 端口发起裸 TLS over TCP)。
将前缀解析抽为纯函数 parse_dynamic_txt,wss:// -> ProtocolType::Wss,
其余映射保持不变。
测试:test_parse_dynamic_txt 覆盖 wss/quic/udp/tcp/ws/无前缀六种输入。
|
2026-08-20 23:10:12 +08:00 |
|
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 |
|