将异地组网变成一个简单的事,轻松应对自建内网服务、联机游戏、点对点&网对网等场景
- 高性能: 使用rust开发,内存和CPU占用率低,速度快
- 跨平台: 支持Windows/MacOS/Linux/Android
- 和WireGuard互通: 能使用WireGuard接入VNT网络,iOS可以使用这种方式接入
- 穿透多层NAT: 多种打洞策略,轻松穿透锥形网络,遇到对称网络也有一战之力
- 应对运营商QOS: 多通道UDP,能有效减缓UDP QOS
- 支持UDP/TCP/WebSocket等协议: 遭遇UDP丢包严重的时候,总有一个协议适合你
- ipv4/ipv6双协议栈: 可以使用ipv6连接网络
- 域名解析优化: 可以利用txt记录解析动态公网IP、动态公网端口,家庭宽带也能轻松自建服务器
- 安全: 支持AES-GCM、CHACHA20-POLY1305等多种加密算法,端到端加密保证数据安全
- 优化广播: 自适应的点对点广播,降低延迟的同时减少服务器的压力,适合广播/组播游戏
- 数据压缩: 可开启数据压缩减少网络压力
组网场景

现状:
- 局域网A与局域网B是物理相互独立的两个局域网。
- 设备B、C、D都是局域网B中的设备没有公网IPV4和IPV6。
目标:
客户机配置
1.下载二进制文件
下载地址:https://github.com/vnt-dev/vnt/releases
我的客户机是Windows系统,x86 架构,所以我下载vnt-x86_64-pc-windows-msvc-v1.2.16.tar.gz
- 下载NSSM 服务注册Windows 系统服务,解压后找到对应系统的文件。
http://nssm.cc/download
2.创建配置文件
config.yaml
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31
| tap: false #是否使用tap 仅在windows上支持使用tap token: xxx #组网token device_id: Windows #当前设备id name: Windows22 #当前设备名称 server_address: vnt.wherewego.top:29872 #注册和中继服务器 in_ips: #代理ip入站 - 10.20.40.0/23,10.26.0.21 #password: xxxx #密码 mtu: 1420 #mtu tcp: false #tcp模式 ip: 10.26.0.22 #指定虚拟ip use_channel: p2p #relay:仅中继模式.p2p:仅直连模式 server_encrypt: true #服务端加密 parallel: 1 #任务并行度 cipher_model: aes_gcm #客户端加密算法 finger: false #关闭数据指纹 punch_model: ipv4 #打洞模式,表示只使用ipv4地址打洞,默认会同时使用v6和v4 ports: - 0 #使用随机端口,tcp监听此端口 - 0 cmd: false #关闭控制台输入 no_proxy: true #是否关闭内置代理,true为关闭 first_latency: false #是否优先低延迟通道,默认为false,表示优先使用p2p通道 device_name: vnt-tun #网卡名称 packet_loss: 0 #指定丢包率 取值0~1之间的数 用于模拟弱网 packet_delay: 0 #指定延迟 单位毫秒 用于模拟弱网 dns: - 223.5.5.5 # 首选dns - 8.8.8.8 # 备选dns disable_stats: false # 为true表示关闭统计 allow_wire_guard: false # 为true则表示允许接入wg
|
参考文档:vnt/vnt-cli/README.md at main · vnt-dev/vnt
中继服务器我使用的是社区公益服务器。
可使用社区服务器
3.注册为系统服务
我的安装路径在D:\Program\vnt
,所有配置都存放此目录。
1 2 3 4 5 6 7 8 9 10 11
| # 安装服务 nssm install vnt "D:\Program\vnt\vnt-cli.exe" "-f config.yaml"
# 设置工作目录 nssm set vnt AppDirectory "D:\Program\vnt"
# 设置启动类型(自动-延时启动) nssm set vnt Start SERVICE_DELAYED_AUTO_START
# 启动服务 nssm start vnt
|
必须以超级管理员身份运行CMD,执行上述命令。
1 2
| nssm stop vnt nssm remove vnt confirm
|
4.检查连接状态
1
| D:\Program\vnt>vnt-cli.exe --info
|
期望输出:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
| Name: Windows22 Virtual ip: 10.26.0.22 Virtual gateway: 10.26.0.1 Virtual netmask: 255.255.255.0 Connection status: Connected NAT type: Symmetric Relay server: 8.134.146.7:29872 Udp listen: 0.0.0.0:xxxx, 0.0.0.0:xxxx Tcp listen: 0.0.0.0:xxxx Public ips: xx.xx.xx.xx Local addr: xx.xx.xx.xx IPv6: None ------------------------------------------ IP forwarding 1 -- 10.26.0.21 --> 10.20.40.0/23
|
代理机配置
1.下载二进制文件
下载地址:https://github.com/vnt-dev/vnt/releases
我的代理机是Ubuntu 系统,x86 架构,所以我下载vnt-x86_64-unknown-linux-musl-v1.2.16.tar.gz
或者使用wget命令下载
1
| wget https://github.com/vnt-dev/vnt/releases/download/v1.2.16/vnt-x86_64-unknown-linux-musl-v1.2.16.tar.gz
|
2.解压二进制
创建应用程序目录
解压文件
1
| tar -zxvf vnt-x86_64-unknown-linux-musl-v1.2.16.tar.gz -C /opt/vnt/
|
3.创建配置文件
1
| vim /opt/vnt/config.yaml
|
配置内容
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32
| tap: false token: xxx device_id: ubuntu name: Ubuntu 21 server_address: vnt.wherewego.top:29872 out_ips: - 0.0.0.0/0
mtu: 1420 tcp: false ip: 10.26.0.21 use_channel: p2p server_encrypt: true parallel: 1 cipher_model: aes_gcm finger: false punch_model: ipv4 ports: - 0 - 0 cmd: false no_proxy: true first_latency: false device_name: vnt-tun packet_loss: 0 packet_delay: 0 dns: - 223.5.5.5 - 8.8.8.8 disable_stats: false allow_wire_guard: false
|
参考文档:vnt/vnt-cli/README.md at main · vnt-dev/vnt
中继服务器我使用的是社区公益服务器。
可使用社区服务器
开启IP转发
1
| sudo nano /etc/sysctl.conf
|
取消注释或添加:
4.创建服务文件
1
| vim /etc/systemd/system/vnt.service
|
配置如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25
| [Unit] Description = vntserver After = network.target syslog.target Wants = network.target
[Service] Type = simple User=root ExecStart = /opt/vnt/vnt-cli -f /opt/vnt/config.yaml
ExecStartPost = /sbin/iptables -I INPUT -i vnt-tun -j ACCEPT ExecStartPost = /sbin/iptables -I FORWARD -i vnt-tun -o vnt-tun -j ACCEPT ExecStartPost = /sbin/iptables -I FORWARD -i vnt-tun -j ACCEPT ExecStartPost = /sbin/iptables -t nat -I POSTROUTING -j MASQUERADE
ExecStopPost = /sbin/iptables -D INPUT -i vnt-tun -j ACCEPT ExecStopPost = /sbin/iptables -D FORWARD -i vnt-tun -o vnt-tun -j ACCEPT ExecStopPost = /sbin/iptables -D FORWARD -i vnt-tun -j ACCEPT ExecStopPost = /sbin/iptables -t nat -D POSTROUTING -j MASQUERADE
Restart = on-failure RestartSec = 5s
[Install] WantedBy = multi-user.target
|
5.启动服务
1 2 3 4 5
| systemctl daemon-reload
systemctl enable vnt.service
systemctl start vnt.service
|
6.检查连接状态
1
| cd /opt/vnt/ && ./vnt-cli --info
|
期望输出:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
| Name: Ubuntu 21 Virtual ip: 10.26.0.21 Virtual gateway: 10.26.0.1 Virtual netmask: 255.255.255.0 Connection status: Connected NAT type: Cone Relay server: 198.18.0.104:29872 Udp listen: 0.0.0.0:xxxx, 0.0.0.0:xxxx Tcp listen: 0.0.0.0:xxxx Public ips: xx.xx.xx.xx Local addr: xx.xx.xx.xx IPv6: None ------------------------------------------ Allows network 1 0.0.0.0/0
|
检查上线的节点
1
| D:\Program\vnt>vnt-cli.exe --list
|
1 2 3
| D:\Program\vnt>vnt-cli --list Name Virtual Ip Status P2P/Relay Rt Ubuntu 21 10.26.0.21 Online p2p 21
|
联调网络
1 2 3 4 5 6 7 8 9 10 11 12
| D:\Program\vnt>ping 10.20.40.3
正在 Ping 10.20.40.3 具有 32 字节的数据: 来自 10.20.40.3 的回复: 字节=32 时间=22ms TTL=254 来自 10.20.40.3 的回复: 字节=32 时间=20ms TTL=254 来自 10.20.40.3 的回复: 字节=32 时间=20ms TTL=254 来自 10.20.40.3 的回复: 字节=32 时间=20ms TTL=254
10.20.40.3 的 Ping 统计信息: 数据包: 已发送 = 4,已接收 = 4,丢失 = 0 (0% 丢失), 往返行程的估计时间(以毫秒为单位): 最短 = 20ms,最长 = 22ms,平均 = 20ms
|
1 2 3 4 5 6 7 8 9 10 11 12
| D:\Program\vnt>ping 10.20.41.21
正在 Ping 10.20.41.21 具有 32 字节的数据: 来自 10.20.41.21 的回复: 字节=32 时间=15ms TTL=64 来自 10.20.41.21 的回复: 字节=32 时间=15ms TTL=64 来自 10.20.41.21 的回复: 字节=32 时间=19ms TTL=64 来自 10.20.41.21 的回复: 字节=32 时间=16ms TTL=64
10.20.41.21 的 Ping 统计信息: 数据包: 已发送 = 4,已接收 = 4,丢失 = 0 (0% 丢失), 往返行程的估计时间(以毫秒为单位): 最短 = 15ms,最长 = 19ms,平均 = 16ms
|