feat(moonnat): v0.1.0 首发收敛——README 全卷(血统明示 Tailscale netcheck·iroh autonat v2·RustDesk punch 思想线全自研 clean-room/包结构/特性/两层 API 快速上手)+ CHANGELOG 0.1.0(Keep a Changelog,moongard 形:Added 八项/Security 三条/Notes 三条——零默认名单纪律入卷)+ spec 演进承诺(0.x 同 minor)+ guides 两件(索引/入门:NatPump 回调方言与纯函数库两路)+ 版位 0.0.1→0.1.0 + 仓库指正 mbt.nat;剥离核查净(零默认 STUN 名单,宪法律 3.2 闭环);门 25/25 / check / fmt / info 绿
NAT 画像与打洞编排纯核(MoonBit):RFC 8489 STUN 报文自实现、地址 观测(autonat v2 纪律:nonce 防混淆 + dial-back 防谎报,自报不收)、 打洞状态机(纯函数 reducer + 可配重试/端口预测)。核心零 IO 零时钟 零随机,时间与熵全注入——moonkcp 同款纯核纪律,决策面 sim 可回放。
血统明示:Tailscale netcheck 思想、iroh autonat v2 验证纪律、 RustDesk punch 编排思想——思想与编排参考,实现与线全自研 (clean-room,Apache-2.0)。
thy1016/moonnat/core
moonbitlang/async
thy1016/moonnat/adapter/udp
状态:0.1.0。0.x 实验期,API 仍可能随反馈调整;未经独立安全审计。 结构事实与契约见 spec.md;纪律底卷见 const.md。
now : Int64
pub(open) trait ProbeSocket
on_picture
on_established
on_abandoned
moon add thy1016/moonnat
消费包 moon.pkg 按需添加 import:thy1016/moonnat/core(@core)、 thy1016/moonnat/adapter/udp(@udp)。
moon.pkg
@core
@udp
画像一台机器的 NAT,再把洞打穿(真 UDP + 回声对端):
let socket = @udp.UdpProbeSocket::listen(addr_text="0.0.0.0:0") let pump = @core.NatPump::new( socket, policy=@core.PunchPolicy::make( max_sends=6, use_port_prediction=true, retry_delay_ms=200L, ), callbacks=@core.NatPumpCallbacks::new( on_picture=fn(p : @core.NatPicture) -> Bool { true }, // no-go 可在此裁 on_established=fn(addr : UInt32, port : Int32) -> Unit { ... }, on_abandoned=fn(reason : String) -> Unit { ... }, ), next_nonce=crypto_nonce, // 熵注入口(生产 CSPRNG;测试计数器) ) // 双服务器 STUN 探测入账(server 地址配置注入,本仓零默认名单) let _ = pump.probe_once(server_id=0, server_addr=s1, server_port=3478, window_ms=500) let _ = pump.probe_once(server_id=1, server_addr=s2, server_port=3478, window_ms=500) // 画像出炉 → 打洞环跑到终态(回声/dial-back 全自动) pump.launch(picture=pump.picture()) let final_state = pump.drive(attempt_window_ms=300)
宿主自有事件环?(vox1000 T5 形)——绕过 NatPump,直接吃纯核: stun_binding_probe 单轮事务 + nat_picture_of 画像 + punch_next reducer,在自己泵里驱动。
stun_binding_probe
nat_picture_of
punch_next
Apache-2.0
版权所有:中国计算机学会技术支持:开源发展技术委员会 京ICP备13000930号-9 京公网安备 11010802047560号
moonnat
NAT 画像与打洞编排纯核(MoonBit):RFC 8489 STUN 报文自实现、地址 观测(autonat v2 纪律:nonce 防混淆 + dial-back 防谎报,自报不收)、 打洞状态机(纯函数 reducer + 可配重试/端口预测)。核心零 IO 零时钟 零随机,时间与熵全注入——moonkcp 同款纯核纪律,决策面 sim 可回放。
血统明示:Tailscale netcheck 思想、iroh autonat v2 验证纪律、 RustDesk punch 编排思想——思想与编排参考,实现与线全自研 (clean-room,Apache-2.0)。
包结构
thy1016/moonnat/coremoonbitlang/asyncthy1016/moonnat/adapter/udp状态:0.1.0。0.x 实验期,API 仍可能随反馈调整;未经独立安全审计。 结构事实与契约见 spec.md;纪律底卷见 const.md。
特性
now : Int64与熵 (nonce 种子)全注入——核心零钟零随机,全决策确定性回放。pub(open) trait ProbeSocket); 其余 = 纯函数 + 注入参数 + 数据,变点之外不再立 trait。on_picture/on_established/on_abandoned沉没槽,独立用户五分钟上手)。安装
消费包
moon.pkg按需添加 import:thy1016/moonnat/core(@core)、thy1016/moonnat/adapter/udp(@udp)。快速上手
画像一台机器的 NAT,再把洞打穿(真 UDP + 回声对端):
宿主自有事件环?(vox1000 T5 形)——绕过 NatPump,直接吃纯核:
stun_binding_probe单轮事务 +nat_picture_of画像 +punch_nextreducer,在自己泵里驱动。文档
License
Apache-2.0