实战:构建、调参与组网排障
专栏:VNT 2.0 组网源码 · 第 11 / 11 篇:::info 学习目标 完成本篇后你能够:从源码构建三种载体;按场景选择参数组合;用系统化清单排查组网故障。 前置:第 2~10 篇完成。预计时长:90 分钟(含构建)。 :::
:::note 本章术语速查(新手建议先读)
- lto / strip:Rust 发布优化——链接期优化与去掉调试符号,产物更小更快。
- feature:Rust 的可选功能开关,按需编译出不同形态的二进制。
- QoS:运营商对某些流量限速/降级的行为。
- wintun:Windows 上的 TUN 驱动(VNT 自带 DLL 并启动时释放)。 :::
从源码构建
git clone -b v2 https://github.com/vnt-dev/vnt.git
cd vnt
# CLI + ctrl(最轻)
cargo build --release -p vnt2 --features vnt-ipc
# 产物: target/release/vnt2_cli / vnt2_ctrl
# Web 管理面(需要 pnpm 构建前端)
pnpm install && pnpm build:web
cargo build --release -p vnt2 --features vnt-web
# 产物: target/release/vnt2_web(Vue3 已内嵌)
# 桌面端(Tauri,需要系统依赖)
pnpm build:desktop
release profile 是体积导向的(opt-level="z" + lto + strip)——对应 2.0 新特性里的”减少程序体积”。
参数速查与选型
| 参数 | 默认 | 何时改 |
|---|---|---|
-s <地址> | 无(必填,可重复配多台) | 服务端协议前缀:quic:// 握手快 / tcp:// 兼容 / wss:// 过墙 / dynamic:// 免改配置搬家 |
-k <编号> | 无(必填;兼容 v1 的 token 别名) | 同组网设备保持一致 |
-p <密码> | 无(强烈建议) | 设置后端到端加密、服务端零知识 |
--device-mode | tun | tap 要二层广播;no 无管理员权限只做出口 |
--rtx | 关 | 丢包严重、跑 TCP 业务(QUIC 可靠通道) |
--fec | 关 | 实时性敏感(游戏/语音)且 UDP 丢包 |
-z --compress | 关 | 带宽紧张、流量大(LZ4,≥256B 才生效) |
--mtu | 1380 | 一般不动;PPPoE 等特殊网络试 1400/1480 |
--ip | 服务端分配 | 固定虚拟 IP(配 ip_variable 语义) |
--input / --output | 空 | 跨子网互访(网关场景) |
--cert-mode | skip | 自建服务端可用 finger:<sha256> 钉死证书 |
--ctrl-port | 11233 | 0 = 禁用 IPC 查询 |
组网排障清单
按”从下到上”的顺序排查:
高频问题速查:
| 症状 | 最可能原因 | 处置 |
|---|---|---|
| 注册循环失败 | 服务端地址/协议前缀错、网络不通 | 先 ping/探端口;换传输前缀 |
| ping 不通但列表在线 | 对端防火墙拦 ICMP | 用真实业务(SSH/HTTP)验证 |
| 直连失败总走中继 | 双侧对称 NAT | 正常,检查中继质量;或加开 rtx |
| 慢 | 丢包/绕路 | 开 --fec(容忍丢包)或 --rtx(可靠);查 route 的 RTT |
| Windows 蓝屏/无网卡 | wintun 驱动问题 | 管理员运行、重装 wintun |
| Android 建隧道失败 | establish 返回 -1 | 重授 VPN 权限 |
进阶:自建服务端
服务端 vnts 是独立项目(本仓库是客户端),按其文档部署后:
- 用
cert_mode=finger钉死自建服务端证书——杜绝假服务端; - 配多台服务端体验协调注册与容灾(第 9 篇);
- 用
dynamic://+ DNS TXT 实现服务端无感迁移。
毕业检查
- 能不看资料说出生命周期三段与各自的关键函数
- 能解释”服务端为什么看不到流量”
- 能用三层中继模型解释某次连接的实际路径(
vnt2_ctrl route) - 构建过至少一种载体并成功组网
到这里,专栏目录的全部篇章完成。下一步建议:读服务端 vnts 的源码(注册表、中继转发、管理 API 与客户端协议正好互补),或者把 vnt-core 的某个模块(如 FEC)移植到你自己的项目里练手。