VNTVNT
首页
指南
赞助
参与开发
问答
  • 简体中文
  • English
首页
指南
赞助
参与开发
问答
  • 简体中文
  • English
  • 介绍
  • 命令行版本快速上手
  • 界面版本快速上手
  • WireGuard接入VNT
  • 进阶使用
  • 自建服务器
  • 无权限无tun模块组网
  • 局域网游戏联机
  • 性能测试

进阶使用

一、数据加密

端到端数据加密

开启此加密,中继节点也无法解密数据(服务器中继节点可能不受信任)

  1. 指定密码,命令行版本使用-w <password>参数,界面版本是组网密码
  2. (可选)指定加密方式,命令行使用--model <model>参数,值可选aes_gcm、chacha20_poly1305等,界面版本是加密算法,下拉选中后保存
  3. 如下图所示,请注意 所有客户端必须使用相同的密码和加密方式,才能正常组网互通

客户端到服务端数据加密

使用 -W参数开启服务端加密,界面版本默认开启

客户端和服务器通过rsa非对称加密算法协商加密密钥,请留意服务端公钥指纹,确保加密过程安全。客户端和服务端会传递组网编号,如果加密过程遭到破坏则有可能导致组网编号泄露。当然如果开启了端到端加密,那即使组网编号泄露,虚拟网络也还是安全的。使用公共服务器是建议开启端到端加密的

二、数据压缩

命令行使用--compressor <lz4>,界面版本下拉选择压缩,数据压缩是自适应的,程序会根据压缩效果自动判断是否压缩数据

请注意 **命令行版本默认只有lz4压缩,没有zstd压缩,各版本混用时请选择对方支持的压缩算法,否则启用压缩可能会导致数据无法互通 **

三、指定虚拟IP

服务端会根据各设备id自动分配未使用的IP地址,不同设备的IP地址不能相同,如果要指定特定的IP,则可以添加参数--ip <ip> ,界面版本则输入虚拟IPv4, 服务端会限制虚拟IP的网段,只能使用对应网段内未使用的IP

四、点对网

两个设备组网后,如果要访问对方设备内网下的其他设备(或者把对方的设备当跳板访问其他IP),就需要用到点对网的配置了

  1. 前提条件:两个局域网均有运行了vnt的设备(图中的A1和C1),并且跳板节点能访问对方的IP( 图中C1能访问C2,也就是说C2的防火墙对C1开放)
  2. 原理:图中的跳板节点是C1,A1通过C1访问C2,跳板节点也可以是局域网C的路由器
  3. 配置参数1:跳板节点设备C1增加参数 -o 0.0.0.0/0 ,该参数表示允许转发所有目标的流量,这个参数是处于内网安全考虑的,也可以是-o 192.168.2.12/32,表示只能转发到C2
  4. 配置参数2:设备A1增加参数 -i 192.168.2.0/24,10.26.0.3,该参数表示拦截目标是192.168.2.0/24的流量,转发到10.26.0.3节点,也就是图中的跳板节点C1
  5. 配置上述参数后,即可在A1上使用C2的内网IP(192.168.2.12)直接访问C2,可以尝试在A1上ping 192.168.2.12,会发现能访问了( 如果C2开启ping)
 再进阶,使用系统的IP转发,这会进一步提高点对网的性能,在低性能设备上这很有用,
 在跳板节点上如下操作,增加参数`--no-proxy`,再执行如下命令
 Windows:
  #设置nat,名字可以自己取,网段是vnt的网段
  New-NetNat -Name vntnat -InternalIPInterfaceAddressPrefix 10.26.0.0/24
  #查看设置
  Get-NetNat
 Linux:
  # 开启ip转发
  sudo sysctl -w net.ipv4.ip_forward=1
  # 开启nat转发  表示来源10.26.0.0/24的数据通过nat映射后再从vnt-tun以外的其他网卡发出去
  sudo iptables -t nat -A POSTROUTING ! -o vnt-tun -s 10.26.0.0/24 -j MASQUERADE
  # 或者这样  表示来源10.26.0.0/24的数据通过nat映射后再从eth0网卡发出去
  sudo iptables -t nat -A POSTROUTING  -o eth0 -s 10.26.0.0/24 -j MASQUERADE
  # 查看设置
  iptables -vnL -t nat
 MacOS:
  # 开启ip转发
  sudo sysctl -w net.ipv4.ip_forward=1
  # 配置NAT转发规则
  # 在/etc/pf.conf文件中添加以下规则,en0是出口网卡,10.26.0.0/24是来源网段
  nat on en0 from 10.26.0.0/24 to any -> (en0)
  # 加载规则
  sudo pfctl -f /etc/pf.conf -e

五、网对网

在上一节,局域网A中的设备A2(未运行vnt)能不能直接访问局域网C中的设备C2(未运行vnt)?,这其实已经脱离了VNT的范畴,接下来实现这一目标

为了简化流程,我们把vnt运行到双方局域网的默认网关路由器中(不在路由器中也可以,无非就是再加路由,这里对此不作讨论)

拓扑图如下

  1. 路由器配置点对网:路由器A增加参数-i 192.168.2.0/24,10.26.0.3,路由器C增加参数-o 0.0.0.0/0 ,该参数表示将192.168.2.0/24目标的转发到10.26.0.3,也就是路由器C
  2. 根据点对网那一节可知,这样配置就能让路由器A能访问路由器C下的所有内网IP,当然我们的目标是让局域网A下的所有设备都能访问到局域网C下的设备
  3. 原理:由于局域网A的默认网关是路由器A,也就是说在设备A1访问C2的内网IP(192.168.2.12),数据会发到路由器A的网卡( 假设是eth0),而路由器A是能访问C2的,所以再添加转发规则,将数据转发到vnt网卡,即可连通整个链路
  4. 命令操作 :在路由器A上执行sudo iptables -t nat -A POSTROUTING -o vnt的虚拟网卡(一般为vnt-tun) -s 192.168.1.0/24 -j MASQUERADE 该参数表示将数据发送到vnt
  5. 配置完之后,你会发现设备A1能通过路由器A、路由器C访问到设备C2了,如果要C2访问A1或者A2,则再反过来进行上述配置,就能双方互通了

六、端口映射

使用参数--mapping <mapping> 就可以建立一个本地端口到目标端口的映射,用iptables端口转发也能实现相同的作用,这其实和组网无关,增加这个功能是为了简化映射过程( 启动vnt就开启映射,关闭vnt就结束映射,用iptables就麻烦些了)。比如在公网服务器和内网设备运行vnt,可以直接通过公网IP的某个端口访问内网服务

  1. tcp端口映射:--mapping tcp:0.0.0.0:80-domain:80,访问本地80端口,即可转发到目标80端口
  2. udp端口映射: --mapping udp:0.0.0.0:80-domain:80,访问本地80端口,即可转发到目标80端口

七、自定义端口

使用参数--ports <port1,port2>来指定监听的端口,其中UDP监听port1、port2端口,TCP监听port1端口,比如

  • --ports 0,0表示随机监听两个UDP端口,随机监听一个TCP端口
  • --ports 11000,11001,11001表示UDP监听11000,11001,11001,TCP监听11000

自定义端口有如下作用

  • 可以放行指定的端口,从而提高打洞成功率
  • 放行TCP端口则可以进行TCP-P2P通信
  • 一个端口对应一个UDP Socket通道,适量增加UDP通道有利于提升网络稳定性(默认两个通道)

八、流量统计

命令行使用chart_a和chart_b[:ip]查看统计,可以使用启动参数--disable-stats关闭统计,在低性能设备上统计流量会有比较明显的性能损失,可以自行选择是否关闭。

chart_a是流量总计,chart_b[:ip]是指定IP的历史流量趋势图

九、模拟弱网环境

  • --packet-delay:控制延迟,比如原本ping是10ms延迟的,加了--packet-delay 10之后会变成20ms
  • --packet-loss:控制丢包率,比如原本ping不丢包的,加了--packet-loss 0.5之后就会有50%概率丢包

十、多开组网

vnt支持同时组多个局域网,但请注意多开时要使用不同的网段、不同的网卡名称,命令行多开时要将vnt复制到不同的文件进行启动

十一、更多参数请查看Github 项目Readme,或者命令行-h

Prev
WireGuard接入VNT
Next
自建服务器